多くのデバイストークンにプッシュ通知を送信する

私はこのPHPスクリプトを持っています:

$q = mysql_query("SELECT `token` FROM `tokens`");

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'apns.pem');
$fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);


while($token = mysql_fetch_array($q))
{
    $deviceToken = $token[0];
    echo $deviceToken.": ";
    $payload['aps'] = array('alert' => $message, 'sound' => 'Completed.wav');
    $payload = json_encode($payload);

    if (!$fp)
    {
        echo "Failed to connect {$err} {$errstrn}
"; } else { echo "Connection OK
"; } $msg = chr(0) . pack("n", 32) . pack('H*', $deviceToken) . pack("n", strlen($payload)) . $payload; if (fwrite($fp, $msg, strlen($msg)) === FALSE) { echo "can't write to socket!
"; } } fclose($fp);

すべてのトークンの結果 - 接続OK!しかし、プッシュ通知は1つのデバイスだけで受信されます!私は別のメッセージを送信しようとしましたが、結果は変更されませんでした:(

7
単なる(潜在的に愚かな)考え方 - APNゲートウェイは単一の接続で複数のPNをサポートしていますか?ループ内のストリームのオープン/クローズを移動してみるべきでしょう。
追加された 著者 mkilmanas,
私の場合は、ループ内の接続を開閉していました。
追加された 著者 Sergio Morstabilini,
また、ループ内に stream_socket_clientfclose を含めるようにも機能します
追加された 著者 garanda,
誰かがこれを解決した?私が同じ問題を抱えているのを助けてください。私はDBに1つのデバイスしか持っていませんが、通知を送信できますが、それ以上のときは私は送信できません
追加された 著者 Ravi,
ワオ!!!アイデア!
追加された 著者 Alexander Zakatnov,
いいえ、それは動作しません。私はこのクラスでは、このユニークなIDのメッセージを実装するこのクラスではクラスが見つかりましたが、ユニークなIDについては、このIDについては何もリンゴのドキュメントではありません...
追加された 著者 Alexander Zakatnov,

1 答え

私のコードを試してください。私は4つのデバイスでそれをテストします。

スペイン語で書かれたコメントには申し訳ありません。

    <?php
include("../conectar.php");

if (isset($_GET['msj']) and isset($_GET['cupon']) and $_GET['msj'] != '' and $_GET['cupon'] != '') {

    $msj = $_GET['msj'];
    $cupon = $_GET['cupon'];

    echo '

';
}else{
    echo 'error #2';
}
?>

私のactive_users DBには、私はすべてのトークンを持っています。私はそれが助けて欲しい

3
追加された
このコードは質問内のコードと同じではありません(接続とフリンジに関する)
追加された 著者 jptsetung,
少し遅れて...しかし、これは私のために働く
追加された 著者 spankmaster79,
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com