65

私のアプリは、GoogleのC2DM(プッシュ通知)を使用して、友達からの新しいアクティビティについてユーザーに通知しています。アプリをインストールしたら、デバイスをC2DMサーバーに登録し、ユーザーの電話番号を保存します。そのため、ユーザーが私のアプリを使用していることがわかり、プッシュ通知を送信できます。しかし、ユーザーが私のアプリをアンインストールするとどうなりますか?私のアプリでそれをキャッチする方法はありますか?または、C2DMを送信して到達不能になったときにサーバーでエラーをキャッチし、ユーザーを非アクティブとしてマークするのが唯一の方法ですか?

友達がアプリを使用しているときと使用しなくなったときに、ユーザーに通知したいと思います。

このシナリオに最適なソリューションは何ですか?

4

7 に答える 7

50

GCMのドキュメントでは、この状況について次のように説明しています。

https://developers.google.com/cloud-messaging/registration#how-uninstalled-client-app-unregistration-works

「アプリケーションは、デバイスからアンインストールされた後、自動的に登録解除できます。ただし、Androidはアンインストールコールバックを提供しないため、このプロセスはすぐには実行されません。」

基本的に、GCMが次のプッシュ通知を送信しようとすると、デバイスは受信アプリケーションがアンインストールされたことをGCMに通知します。

友達がアプリを使用しなくなったことを友達に通知する場合、この障害が発生すると、GCMはNotRegistered通知サーバーにエラーを送信します。すぐにはなりませんが、それを使用できますか?

于 2012-12-03T14:56:40.890 に答える
26

残念ながら、ACTION_PACKAGE_REMOVEDインテントは、自分以外のすべてのレシーバーに送信されます。これはここで確認されます。

私はC2DM計画にあまり詳しくないので、C2DM計画に関するいくつかの質問があります。ユーザーがデバイスを長時間オフにしたままにした場合、それはあなたが使用するエラー状態を引き起こしますか?C2DMは実際に「到達不能」デバイスをどのように報告しますか?それは、プッシュ通知を送信しようとして失敗した場合にのみ発生する状態ですか、それとも、デバイスに到達したが適切に処理されなかったと何らかの理由で判断した場合に発生しますか?明らかに、2番目のシナリオでは計画は機能しますが、それ以外の場合は「誤検知」が発生することがあります。

参照用の古いSOの質問:削除されたパッケージでAndroidがインテントACTION_PACKAGE_REMOVEDを受信して​​いません

于 2011-06-02T02:23:56.207 に答える
8

はい、しかしそれはかなりハッキーです。この方法は、アプリをアンインストールするときにAndroidが最初に行うことはデータファイルを削除することであるという事実に基づいています。したがって、ファイルウォッチャーを使用して削除を検出できます。また、これをネイティブコードで記述する必要があります。Javaでコードを記述した場合、アプリはコードを実行する前にアンインストールされます。このデモをご覧ください:https ://github.com/sevenler/Uninstall_Statics

于 2015-07-02T02:54:22.517 に答える
7

アンインストールされたアプリケーションの検出に関しては、GoogleC2DMサービスはパッシブモードで動作しています。

アプリケーションをアンインストールした後(C2DMから登録解除せずに!!!)の最初のプッシュ通知は、応答でエラーを返しません。ただし、2回目のプッシュ通知では、「無効な登録」または「未登録」のエラーコードが返され、アプリケーションがアンインストールされたことがわかります。

その理由は、C2DMサーバーが応答コードをすぐに返し、それからクライアントをプッシュしようとするためです。アプリケーションがアンインストールされたとクライアントが応答すると、そのアプリケーションはC2DMサーバーから削除されます。次のプッシュ試行は、エラーコードをすぐに返します。

于 2012-03-01T16:05:46.227 に答える
5

私はあなたに言うべきいくつかのポイントがあります、

  1. Androidコミュニティでは、C2DMの代わりにGCMを使用することをお勧めします。これは、使用できなくなったためです。
  2. Androidでは、アプリがアンインストールされていることをアプリケーション自体に通知する方法はありません。
  3. アンインストールされたアプリへのメッセージの送信を停止したい場合は、GCMでこれを参照できます

サーバーからGCMにメッセージを送信すると、応答文字列が表示されます。「NotRegistered」というエラーが表示された場合は、アプリケーションがデバイスからアンインストールされたか、デバイスに登録IDがないため、サーバーデータベースから登録IDを削除する必要があります。 com.google.android.c2dm.intent.RECEIVEインテントを受信するように構成されたブロードキャストレシーバー。」

于 2013-01-18T06:46:39.017 に答える
3

本文に「NotRegistered」メッセージが含まれるサーバー応答200の方法は1つしかわかりません。

NotRegistered —登録IDは無効になりました。たとえば、ユーザーがアプリケーションをアンインストールしたか、通知をオフにしました。送信者は、このデバイスへのメッセージの送信を停止する必要があります。

于 2011-06-04T09:31:46.680 に答える
2

このGCMドキュメントを調べてください: GCM登録解除

アプリの登録を解除しないでください。これはサーバー側から処理されます。

于 2013-08-26T11:49:43.223 に答える