0

Androidアプリのプッシュ通知を送信するためのSNS設定が完了しました。次のようにステップのプロセスによって、ステップは以下のとおりです。Amazon SNSでAndroidアプリをアンインストールする

  1. アプリが起動するたびに、それはregister呼び出しを行うことにより、GCMの登録IDを生成します。コードスニペットは、以下である:Globals.GCM_TOKENアプリ用FCM登録をしながら取得したアプリIDである

    private String registerOnGCM(){ try { GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(getBaseContext()); String token = gcm.register(Globals.GCM_TOKEN); return token; } catch (IOException e) { Log.e(TAG, "failed to complete token refresh process"); } return null; }

  2. アプリケーションは、私たちのバックエンドサーバーを呼び出し、この登録IDを渡します。

  3. バックエンドサーバーは、この登録IDが新しいかどうかをチェックします。新規の場合は、この登録IDを使用して新しいSNSエンドポイントを作成し、そのユーザー用に作成されたトピックに新しいエンドポイントを登録します。また、このデータはすべて将来の参照のためにデータベースに保存されています。

ユーザーのすべてのデバイスにプッシュ通知を送信し、我々は単純に、そのユーザー用に作成されたトピックにメッセージをブロードキャストし、メッセージは、ユーザーが所有するすべてのデバイスに送信されます。これは、すべてのアプリケーションに複数のデバイスがインストールされている場合には問題ありません。この問題は、アンインストールと再インストールで発生します。

再インストール後、GCM登録コールは別の登録IDを返し、バックエンドに送信します。バックエンドはそれを新しいデバイスとして検出してSNSに登録し、デバイスは同じでも複数のSNSエンドポイントで終了します。このユーザのトピックに通知をプッシュすると、同じデバイスが2つのプッシュ通知を受信します。おそらく古いエンドポイントがまだ生きているので、それは無効にされているはずです。

私の質問:上記のテストケースでは、アンドロイドデバイスにプッシュ通知が1回だけ送信されるようにする方法。

答えて

1

ここに私の問題で見つけた解決策があります。

再インストールの場合、登録IDが変更され、後で同じ登録IDが使用されて、デバイスがSNSプッシュ用にすでに登録されているかどうかが検出されます。しかし、デバイス固有のエンティティがもう1つあり、再インストールの場合は変更されません。つまり、デバイスIDです。

私は私たちのサーバーへのバックエンド呼び出しを変更し、それにもう1つのパラメータであるデバイスIDを追加しました。このIDは、既存のSNS登録を検出するために使用されるようになりました。 Idがすでに存在していて、登録IDが新しい場合は、古いエンドポイントを削除してそのユーザーのトピックへのサブスクリプションを削除し、残りの登録プロセスを続けます。これにより、SNS上のデータだけでなく、私たち自身のデータもきれいに保管されます。

関連する問題