7

プッシュ通知を使用する iOS アプリケーションを開発しています。アプリとサーバー側を実装しました。1 つまたは 2 つの通知を送信するだけでうまく機能します。問題は、すべてのユーザーに同じ通知を送信する必要がある場合に発生します。通知はループの最初のユーザーにのみ届きます。私はサンドボックスにいるので、APNS サービスには制限がないことを読んだので、サンドボックス環境に制限があるのだろうかと思います。何か案が?

前もって感謝します、

更新されたソリューション:

Apple の応答を確認する必要がありました。無効なトークンにプッシュを送信していたため、Apple がサーバーから切断しました。次の関数で問題を解決しました。@Eranとこの投稿に感謝します

/* FUNCTION to check if there is an error response from Apple
 * Returns TRUE if there was and FALSE if there was not
 */
public function checkAppleErrorResponse($fp) {

    //byte1=always 8, byte2=StatusCode, bytes3,4,5,6=identifier(rowID). 
    // Should return nothing if OK.

    //NOTE: Make sure you set stream_set_blocking($fp, 0) or else fread will pause your script and wait 
    // forever when there is no response to be sent. 
    $apple_error_response = fread($fp, 6);
    if ($apple_error_response) {

        // unpack the error response (first byte 'command" should always be 8)
        $error_response = unpack('Ccommand/Cstatus_code/Nidentifier', $apple_error_response); 

        if ($error_response['status_code'] == '0') {
        $error_response['status_code'] = '0-No errors encountered';

        } else if ($error_response['status_code'] == '1') {
        $error_response['status_code'] = '1-Processing error';

        } else if ($error_response['status_code'] == '2') {
        $error_response['status_code'] = '2-Missing device token';

        } else if ($error_response['status_code'] == '3') {
        $error_response['status_code'] = '3-Missing topic';

        } else if ($error_response['status_code'] == '4') {
        $error_response['status_code'] = '4-Missing payload';

        } else if ($error_response['status_code'] == '5') {
        $error_response['status_code'] = '5-Invalid token size';

        } else if ($error_response['status_code'] == '6') {
        $error_response['status_code'] = '6-Invalid topic size';

        } else if ($error_response['status_code'] == '7') {
        $error_response['status_code'] = '7-Invalid payload size';

        } else if ($error_response['status_code'] == '8') {
        $error_response['status_code'] = '8-Invalid token';

        } else if ($error_response['status_code'] == '255') {
        $error_response['status_code'] = '255-None (unknown)';

        } else {
        $error_response['status_code'] = $error_response['status_code'].'-Not listed';

        }

        echo '<br><b>+ + + + + + ERROR</b> Response Command:<b>' . $error_response['command'] . '</b>&nbsp;&nbsp;&nbsp;Identifier:<b>' . $error_response['identifier'] . '</b>&nbsp;&nbsp;&nbsp;Status:<b>' . $error_response['status_code'] . '</b><br>';

        echo 'Identifier is the rowID (index) in the database that caused the problem, and Apple will disconnect you from server. To continue sending Push Notifications, just start at the next rowID after this Identifier.<br>';
        return true;
    }
    return false;
}
4

3 に答える 3

11

考えられる問題は、使用しているデバイス トークンの一部が無効であることです (実稼働デバイス トークンはサンドボックス環境では無効であり、その逆も同様であることに注意してください)。無効なデバイス トークンに通知を送信すると、APN サーバーへのソケットが閉じられます。無効な通知の後にそのソケットに書き込まれたすべての通知は、新しいソケットを開くまで破棄されます。

Apple からのエラー応答を読み取って、どのデバイス トークンが無効であるかを調べることができます。

ここで他の人がすでに言及したテクニカルノートのエラーチェックセクションを必ず読む必要があります。

于 2013-07-17T14:48:59.610 に答える
0

送信できるユーザー数に制限はありません。送信するメッセージのサイズがその制限以下であることを確認する必要があります.Kirtiが述べたように、これは約2048バイトです.

メッセージを送信できる頻度にも制限はありませんが、頻繁に送信することはお勧めしません。

于 2013-07-17T12:43:20.370 に答える