13

アプリケーションでGCMを構成しました。ユーザーがアプリケーションをアンインストールするたびに、GCMからデバイスの登録を解除したい。

私は次のようにコードを取得しました

Intent unregIntent = new Intent("com.google.android.c2dm.intent.UNREGISTER");
unregIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0));
startService(unregIntent);

しかし、このコードをどこに配置する必要がありますか。

ありがとうございました。

4

2 に答える 2

21

ユーザーがアプリケーションをアンインストールしている間に呼び出されるメソッドがないため、アンインストール中に GCM から unregister を呼び出すことはできません。

プッシュ通知を送信すると、GCM はユーザーがアプリケーションを持っているかどうかを確認し、ユーザーがアプリケーションをアンインストールした場合、GCM は同じことを認識し、プッシュの返信の一部として通知します。

于 2012-09-04T10:36:26.403 に答える
1

サーバーでこれを確認する必要があります。ユーザーがいつアプリケーションをアンインストールするかを知る方法がないため、アプリケーション コードからは実行できません。

参照: Canonical ID の実装。参考:https ://developers.google.com/cloud-messaging/http#request

正規登録 ID は、アプリケーションによって要求された最後の登録の ID として定義されます。これは、サーバーがデバイスにメッセージを送信するときに使用する ID です。

後で別の登録 ID を使用してメッセージを送信しようとすると、GCM は通常どおりリクエストを処理しますが、レスポンスの registration_id フィールドに正規の登録 ID が含まれます。最終的に使用している ID が機能しなくなるため、サーバーに保存されている登録 ID をこの正規 ID に置き換えてください。

参照: https://stuff.mit.edu/afs/sipb/project/android/docs/google/gcm/adv.html#canonical

Canonical ID が 0 でない場合は、登録が重複しています。

たとえば、データベースに 2 つの登録があるとします。

登録_A

登録_B

プッシュ通知を送信すると、サーバーは次のような応答を受け取ります。

{"multicast_id":########,"success":1,"failure":0,"canonical_ids":1,"results":
[{"registration_id":"new_id_registration_id","message_id":"0:########"}]}
{"multicast_id":######### ,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:################"}]}

このデータを配列に格納します。最初のものには「canonical_ids」:1 があることに注意してください。これは、重複があったことを意味します。したがって、データベース内のどのレコードが古いレコードかを知ることができます。上記で「registration_id」を検索し、インデックス値を保存するだけです。このインデックス値は、データベース内の古いレコードを指しています。

上記の例では、registration_A が古い registration_id になります。

データベースからすべてのレコードを取得します。次に、取得したインデックス値に基づいて削除します。または、更新することができます。これは、データベースの設定方法によって異なります。

幸運を!

于 2015-07-10T05:20:59.177 に答える