64 votes

Est-il possible de détecter l'application Android désinstaller?

Mon application est à l'aide de Google C2DM (push notification) pour avertir les utilisateurs sur les nouveaux activité de amis. Une fois l'installation de l'application, j'ai enregistrer l'appareil avec C2DM serveurs et de stocker de l'utilisateur numéro de téléphone. Donc, je sais que l'utilisateur est à l'aide de mon application et je peux lui envoyer les notifications push. Mais ce qui se passe si les utilisateurs désinstalle mon application, est-il un moyen de l'attraper dans mon application? Ou le seul moyen est d'attraper une erreur sur mon serveur quand j'envoie un C2DM et il est inaccessible, puis marquer un utilisateur inactif?

J'aimerais informer les utilisateurs de leurs amis sont à l'aide d'une application et quand ils ne le font plus.

Quelle est la meilleure solution pour ce scénario?

50voto

Andrew Wyld Points 2091

Le GCM documentation cette situation s'explique par ici:

http://developer.android.com/guide/google/gcm/adv.html#unreg

"Une application peut être automatiquement effacé après il est désinstallé à partir de l'appareil. Toutefois, ce processus n'est pas arrive tout de suite, qu'Android ne fournit pas une désinstallation de rappel."

Fondamentalement, quand GCM essaie d'envoyer la prochaine notification push, l'appareil va dire GCM la réception de la demande a été désinstallé.

Comme pour la notification d'amis que leurs amis ne sont pas à utiliser l'application plus, GCM enverra un NotRegistered d'erreur de votre serveur de notification lorsque cette erreur se produit, il ne sera pas immédiate, mais pourriez-vous l'utiliser?

25voto

MattC Points 8392

Malheureusement, le ACTION_PACKAGE_REMOVED intention sera envoyé à tous les récepteurs sauf pour votre propre. Ceci est confirmé ici. Notez que "installé", à dire "retiré" et est une faute de leur part.

Quelques questions pour votre C2DM plan, puisque je ne suis pas très familier avec elle. Si l'utilisateur laisse tout leur appareil hors tension pendant une longue période de temps, qui déclenchent la condition d'erreur que vous utilisez? Comment C2DM fait état d'une "inaccessible" de l'appareil? Est une condition qui se produit seulement quand il tente d'envoyer la notification push et échoue ou est-il lorsqu'il détermine en quelque sorte ce qu'il atteigne l'appareil, mais ne parvient pas à être traités correctement? Bien évidemment, dans le deuxième cas, votre plan de travail, mais je peux voir que certains "faux positifs" se produire autrement.

Ancienne question de référence: android ne reçoit pas l'Intention ACTION_PACKAGE_REMOVED dans le paquet supprimé

7voto

Zamel Points 491

Google C2DM service fonctionne en mode passif lorsqu'il s'agit de la détection des applications désinstallées.

Première notification push d'après la désinstallation de votre application (sans annulation de l'enregistrement de C2DM!!!) ne retourne PAS d'erreur dans la réponse. Cependant, la deuxième notification push sera de retour invalide "enregistrement" ou "non enregistré" codes d'erreur lorsque vous pouvez vous rendre compte de l'application a été désinstallé.

La raison en est que C2DM les serveurs renvoient le code de réponse immédiatement, et seulement alors, essaie de pousser le client. Lorsque le client de répondre, qu'une demande a été désinstallé, il est supprimé de C2DM serveurs. Ensuite pressez la tentative de retourner un code d'erreur immédiatement.

5voto

Zubair Points 161

J'ai quelques points pour vous dire ,

  1. Android communauté vous recommande d'utiliser GCM au lieu de C2DM comme il n'est plus disponible.
  2. Dans android, il n'existe aucun moyen pour les applications à obtenir lui-même informé que l'application est prise en désinstallé.
  3. dans la GCM, si vous voulez arrêter l'envoi de messages à désinstallé des applications que vous pouvez consulter ce

Lorsque vous envoyez des messages à GCM à partir de votre serveur, vous obtiendrez la réponse de la chaîne.Si vous obtenez le message d'erreur "NotRegistered, vous devez supprimer l'enregistrement de l'ID de votre serveur de base de données parce que la demande a été désinstallé de l'appareil ou s'il ne dispose pas d'un récepteur de radiodiffusion configuré pour recevoir com.google.android.c2dm.l'intention.RECEVEZ les intentions."

3voto

androidev Alex Points 803

Je sais que d'une seule façon, avec la réponse du serveur 200 avec "NotRegistered" message dans le corps.

NotRegistered - Le registration_id n'est plus valide, par exemple l'utilisateur a désinstallé l'application ou de désactiver les notifications. L'expéditeur doit cesser d'envoyer des messages à ce dispositif.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X