php iosの一括プッシュ

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-06-13 12:01:58
オリジナル
1247 人が閲覧しました

php ios group Push
説明: 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 />}
ログイン後にコピー

シングルプッシュでは問題ありません
問題の説明:
グループプッシュが必須になりました。以前は、ソケットリンクを使用してループに書き込み、FP を閉じるという内容でしたが、いずれかに問題があるとプッシュを受け取れない人がいるとインターネットで言われています。ユーザーの携帯電話トークン (deviceToken) を受信すると、Apple サーバーがこのソケット接続を中断します。
ソケットを使用して各ユーザーにオープン、書き込み、クローズを実行するように変更しましたが、バックグラウンド プッシュではあったものの、Energizer が必要で、30 分で 9,000 件のメッセージをプッシュすることができないことがわかりました。 30分以内にプッシュします。
私が最初に考えたのは、パラメータを使用せずにこの php ページに同時に 10 回アクセスし、プッシュされるユーザーを 10 の部分に分割するということでした。
良いグループプッシュ方法がわかりません
現在のコードを添付します
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 を試してみると、より信頼性が高くなる可能性があります。
------解決策------------------
手早く言うと、複数のプロセスしか開くことができません。

関連ラベル:
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート