0

データベースに保存されている多くのデバイスで(配布用に)プッシュ通知を送信するコードを作成しました。phpを作成しました:

// Put your alert message here:
$message = "send push";
// Put your private key's passphrase here:
$passphrase = 'phrase';
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'apns.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);

// Open a connection to the APNS server
$fp = stream_socket_client(
'ssl://gateway.push.apple.com:2195', $err,
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

if (!$fp)
    exit("Failed to connect: $err $errstr" . PHP_EOL);
echo 'Connected to APNS'. "<br>" ;
ob_flush();
flush();

// Create the payload body
$body['aps'] = array(
'alert' =&gt; $message,
'sound' =&gt; 'default'
);

// Encode the payload as JSON
$payload = json_encode($body);
if (mysql_num_rows($results)!=0) {
    while($row = mysql_fetch_array($results))
    {
        $deviceToken= $row['deviceToken'];

        if(isset($deviceToken)&&(strcmp($deviceToken,"(null)")!=0)){
            echo "<br>".$deviceToken."<br>";
            // Build the binary notification
            $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
            $result = fwrite($fp, $msg, strlen($msg));
            if (!$result)
                echo 'Message not delivered';
            else
                echo 'Message successfully delivered' ;
            ob_flush();
            flush();
        }
    }
    // Close the connection to the server
    fclose($fp);
}

db に deviceToken のみが正しいか値 (null) がある場合、メッセージは送信されますが、deviceToken が 1 つ間違っていると、すべてのメッセージを送信したが機能しないメッセージ「メッセージが正常に配信されました」が表示されます。どこで間違いを犯しますか?ありがとう。

4

2 に答える 2

0

あなたは何も悪いことをしません、これはリンゴの品質管理です。私はこの現象に遭遇しました、そして-よく覚えていれば-デバイストークンの構造が無効だった場合、プッシュ通知は配信されませんでした...

したがって、現在デバイスに属していない有効なトークンがある場合(たとえば、デバイスがアプリを削除した場合)、他のプッシュ通知が配信されますが、トークンの構造が完全に正しくないと思われる場合、プッシュ通知は送信されません配達されます。

したがって、デバイスはプロバイダーのDBに有効なトークンを登録するため、この現象は実稼働システムにとって危険ではありません。

たぶん、このチュートリアルのコメントの間に詳細があります:http ://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12

于 2012-09-06T20:46:25.050 に答える
0

これはできません。プッシュ通知が正常に送信されたかどうかを確認する確実な方法はありません。代替手段はありますが、オンザフライではなく、信頼性も高くありません。

  1. アプリがユーザーのデバイスにインストールされていることを確認します。
  2. プッシュ通知を受信したときにデータベースに投稿するロジックをアプリケーションに追加します。そうすれば、プッシュが良かったことがわかります。これの欠点は、プッシュ通知が常に即時であるとは限らないため、遅延が発生する可能性があることです.

ユーザーがこれを説明し、別の投稿でいくつかのリンクを提供しました。Apple プッシュ通知がユーザーに配信されているか、サーバーから配信されていないかを確認する方法は?

于 2012-09-06T22:44:30.153 に答える