首頁 > 後端開發 > php教程 > php ios 集体推送

php ios 集体推送

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
發布: 2016-06-13 12:01:58
原創
1226 人瀏覽過

php ios 群体推送
描述:用php 做服务器端,向IOS的APNS推送通知,附上代码

public static function apple_push($data,$deviceToken){<br />	$passphrase='123456';<br />	$ckfile="ck.pem";<br />	$ctx = stream_context_create();<br />	stream_context_set_option($ctx, 'ssl', 'local_cert', $ckfile);<br />	stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);<br />	$fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195',$err,$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);<br />	//$fp = stream_socket_client('ssl://gateway.push.apple.com:2195',$err,$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);<br /><br />	if(!$fp){<br />		return false;<br />	}<br />	<br />	$payload=json_encode($data);<br /><br />	$pushdata = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;<br />	$result = fwrite($fp, $pushdata, strlen($pushdata));<br />	if(!$result){<br />		file_put_contents(dirname(__FILE__)."/pushlog.txt",$result.'-'.$deviceToken."-".microtime().PHP_EOL,FILE_APPEND);<br />	}<br />	<br />	fclose($fp);<br />}
登入後複製

单条推送是没有问题的
问题描述:
现在要求群体推送,之前,我写的是用socket链接后,循环写入,再关闭fp,但是有些人没有收到推送,网上说,要是其中一个人的手机令牌(deviceToken)有问题的话,苹果服务器就会中断这个socket链接。
我就改成每个用户都用socket打开,写入,关闭,但是我发现这样很慢,半个小时都不能推送9000条,虽然是后台推送,但是要求劲量在半小时内推送完。
我先在想到的办法是:同时访问这个php页面十次,参数不用,就将要推送的用户分成十份。
不知道有什么好的群体推送方式
附上现在的code
function iospush($tid,$subject,$pushinfo){<br />	$data['aps']=array(<br />		'alert'=>$subject,<br />		'sound'=>'default',<br />		'type'=>'thread',<br />		'tid'=>$tid,<br />	);<br />	$passphrase='123456';<br />	$ckfile="ck.pem";<br />	$ctx = stream_context_create();<br />	stream_context_set_option($ctx, 'ssl', 'local_cert', $ckfile);<br />	stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);<br />	<br />	$payload=json_encode($data);<br />	foreach($pushinfo as $info){<br />		$deviceToken=$info['phoneToken'];<br />		$pushdata = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;<br />		$fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195',$err,$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);<br />		//$fp = stream_socket_client('ssl://gateway.push.apple.com:2195',$err,$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);//正式服务器<br />		if(!$fp){<br />			file_put_contents(dirname(__FILE__)."/pushlog.txt",$err.'-'.$errstr.'-60'.PHP_EOL,FILE_APPEND);<br />			continue;<br />		}<br />		$result = fwrite($fp, $pushdata, strlen($pushdata));<br />		if(!$result){<br />			file_put_contents(dirname(__FILE__)."/pushlog.txt",$result.'-'.$deviceToken.PHP_EOL,FILE_APPEND);<br />		}<br />		fclose($fp);<br />	}<br />}
登入後複製

------解决方案--------------------
这种东西肯定需要用异步去实现
------解决方案--------------------
试试xmpphp,使用聊天服务器来实现,可能更靠谱一些。
------解决方案--------------------
要快就只能開多進程了。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
javascript - js正規符合特定字串
來自於 1970-01-01 08:00:00
0
0
0
為什麼說非物件呼叫成員函數fetch()
來自於 1970-01-01 08:00:00
0
0
0
資料庫設定檔必須要用二維數組
來自於 1970-01-01 08:00:00
0
0
0
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板