Est-il possible de détecter une désinstallation d’une application Android?

Mon application utilise C2DM (notification push) de Google pour informer les utilisateurs de la nouvelle activité de leurs amis. Une fois l’application installée, j’enregistre l’appareil auprès des serveurs C2DM et stocke le numéro de téléphone de l’utilisateur. Donc, je sais que l’utilisateur utilise mon application et je peux lui envoyer les notifications push. Mais que se passe-t-il si les utilisateurs désinstalle mon application, y a-t-il un moyen de l’attraper dans mon application? Ou le seul moyen consiste à détecter une erreur sur mon serveur lorsque j’envoie un C2DM et qu’il est inaccessible, puis marque un utilisateur comme inactif?

J’aimerais informer les utilisateurs lorsque leurs amis utilisent une application et quand ils ne le font plus.

Quelle est la meilleure solution pour ce scénario?

Malheureusement, l’intention ACTION_PACKAGE_REMOVED sera envoyée à tous les destinataires, sauf le vôtre. Ceci est confirmé ici .

Quelques questions pour votre plan C2DM, car je ne le connais pas très bien. Si l’utilisateur laisse simplement son appareil éteint pendant une longue période, cela déclenchera-t-il la condition d’erreur que vous utilisez? Comment C2DM signale-t-il réellement un périphérique “inaccessible”? Est-ce une condition qui ne se produit que lorsqu’elle tente d’envoyer la notification push et échoue ou est-ce qu’elle détermine, d’une manière ou d’une autre, qu’elle atteint le périphérique mais n’est pas correctement traitée? Évidemment, dans le deuxième scénario, votre plan fonctionnerait, mais je peux voir des “faux positifs” se produire autrement.

Question SO plus ancienne pour référence: Android ne recevant pas Intention ACTION_PACKAGE_REMOVED dans le package supprimé

La documentation GCM explique cette situation ici:

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

“Une application peut être automatiquement désinscrite après sa désinstallation du périphérique. Toutefois, ce processus ne se produit pas immédiatement, car Android ne fournit pas de rappel de désinstallation.”

Fondamentalement, lorsque GCM tente d’envoyer la notification push suivante, le périphérique indiquera à GCM que l’application récepsortingce a été désinstallée.

Pour avertir vos amis que leurs amis n’utilisent plus l’application, GCM envoie une erreur NotRegistered à votre serveur de notification lorsque cette défaillance se produit; ce ne sera pas immédiat, mais pourriez-vous l’utiliser?

Le service Google C2DM fonctionne en mode passif lorsqu’il s’agit de détecter des applications désinstallées.

La première notification push après la désinstallation de votre application (sans désinscription de C2DM !!!) ne renverra aucune erreur en réponse. Cependant, la deuxième notification push renverra des codes d’erreur “enregistrement non valide” ou “non enregistré” où vous pouvez vous rendre compte que l’application a été désinstallée.

La raison en est que les serveurs C2DM renvoient le code de réponse immédiatement et essaient alors seulement de pousser le client. Lorsque le client répond qu’une application a été désinstallée, elle est supprimée des serveurs C2DM. La prochaine tentative d’envoi renverra immédiatement un code d’erreur.

Oui, mais c’est assez pirate. La méthode est basée sur le fait que la première chose que fait Android lors de la désinstallation de votre application est la suppression de votre fichier de données. Vous pouvez donc utiliser un observateur de fichiers pour détecter la suppression. Aussi, vous devez écrire ceci en code natif. Si vous écrivez votre code dans Java, votre application sera désinstallée avant de pouvoir exécuter du code. S’il vous plaît voir cette démo: https://github.com/sevenler/Uninstall_Statics

Je ne connais qu’un moyen avec la réponse du serveur 200 avec le message “NotRegistered” dans le corps.

NotRegistered – L’identifiant registration_id n’est plus valide, par exemple l’utilisateur a désinstallé l’application ou désactivé les notifications. L’expéditeur doit cesser d’envoyer des messages à cet appareil.

J’ai quelques points à vous dire,

  1. La communauté Android vous recommande d’utiliser GCM au lieu de C2DM car il n’est plus disponible.
  2. Dans Android, il n’y a aucun moyen pour les applications de se faire notifier que l’application est désinstallée.
  3. dans GCM si vous souhaitez arrêter d’envoyer des messages aux applications désinstallées, vous pouvez vous y référer

Lorsque vous envoyez des messages à GCM à partir de votre serveur, vous obtiendrez une chaîne de réponse. Si vous obtenez une erreur “NotRegistered”, vous devez supprimer l’ID d’enregistrement de la firebase database du serveur car l’application a été désinstallée récepteur de diffusion configuré pour recevoir les intentions com.google.android.c2dm.intent.RECEIVE. ”

Regardez dans ce document GCM : Désinscription GCM

Vous ne devez jamais désenregistrer votre application. Ceci est pris en charge du côté serveur.