1

デバイスが既にアプリをアンインストールしている状況をテストしています。

アプリをアンインストールした iPhone に JavaPNS 経由で通知をプッシュしようとすると、成功しましたが、デバイスではメッセージが受信されませんでした。

関連するアプリがデバイスにインストールされていないにもかかわらず、JavaPNS が成功を返すのはなぜですか? どうすればこれを解決できますか?

        for (PushedNotification notification : notifications) {
            if (notification.isSuccessful()) {
                //success
            } else {
                iPhoneFailedPushed += 1;
                String deviceId = notification.getDevice() != null ? notification.getDevice().getDeviceId() : "";
                String exception = notification.getException() != null ? notification.getException().getMessage() : "";
                /* Add code here to remove invalidToken from database */
                if (notification.getResponse() != null)
                {
                    //show error code
                }
                else
                {
                    //show exception                
                }
                //log fail token
            }
        }
4

1 に答える 1

1

この場合、これは有効なデバイス トークンであるため、エラー応答パケットを取得することはありません (アプリをアンインストールしても変更されません)。アプリがアンインストールされたことを検出する唯一の方法は、フィードバック サービスを使用することです。

APNS ドキュメントから:

プロバイダーがアプリケーションにプッシュ通知を配信しようとしたときに、アプリケーションがデバイス上に存在しなくなった場合、デバイスはその事実を Apple プッシュ通知サービスに報告します。この状況は、ユーザーがアプリケーションをアンインストールしたときによく発生します。デバイスがアプリケーションの配信試行の失敗を報告した場合、APNs はプロバイダーに通知して、そのデバイスへの通知の送信を控えることができるようにする必要があります。これにより、不要なメッセージのオーバーヘッドが削減され、システム全体のパフォーマンスが向上します。

この目的のために、Apple プッシュ通知サービスにはフィードバック サービスが含まれており、APN は配信試行に失敗したデバイスのアプリケーションごとのリストを継続的に更新します。デバイスは、バイナリ形式でエンコードされたデバイス トークンによって識別されます。プロバイダーは定期的にフィードバック サービスにクエリを実行して、アプリケーションのデバイス トークンのリストを取得する必要があります。各デバイス トークンはトピックによって識別されます。次に、特定されたデバイスでアプリケーションが最近再登録されていないことを確認した後、プロバイダーはこれらのデバイスへの通知の送信を停止する必要があります。

于 2013-01-04T15:12:29.607 に答える