GCM: Gestion de l’ancien RegistrationId lorsque l’utilisateur désinstalle l’application

Voici le scénario du problème auquel je suis confronté en ce moment. J’ai une application Web qui contient tous les registration id des périphériques connectés à mon serveur. Sur mon application Android. Chaque fois que l’utilisateur se connecte, j’envoie une demande registration id à google, puis je l’envoie à mon serveur, puis le serveur l’enregistre et le lie à l’utilisateur. Lorsqu’un utilisateur se déconnecte de mon application. Mon application envoie une requête au serveur pour détruire le authentication code et l’ registration id . Le problème était que, lorsque l’utilisateur désinstalle l’application et le réinstalle, son ancien registration id rest sur mon serveur. Alors, quand il s’est connecté sur son même téléphone. l’application enregistre le nouvel registration id sur mon serveur, lorsque le serveur envoie une notification, cet utilisateur reçoit plusieurs notifications en fonction du nombre de fois où il a désinstallé l’application. Quel est votre travail sur celui-ci?

Cela peut être fait sur le code côté serveur.

En insérant les données demandées dans votre table GCM, vérifiez si votre ID utilisateur est déjà dans la table? Si oui, remplacez simplement la ligne entière par de nouvelles données. Sinon, insérez de nouvelles données dans le tableau.

Note: il est préférable de vérifier également l’identifiant d’enregistrement GCM en double. car google rafraîchit fréquemment tous les identifiants GCM.

J’espère que cela aidera.

MODIFIER

comme @Haunter a suggéré,

et si les utilisateurs ont plusieurs appareils?

Eh bien, dans ce cas, utilisez le numéro de magasin IMEI sur votre firebase database et vérifiez-le à la place de l’ID utilisateur.

comment obtenir le numéro IMEI

 TelephonyManager tel = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); Ssortingng IMEI = tel.getDeviceId().toSsortingng(); 

De la documentation officielle :

Une application client peut être automatiquement désinscrite après sa désinstallation. Cependant, ce processus ne se produit pas immédiatement. Ce qui se passe dans ce scénario est:

  • L’utilisateur final désinstalle l’application cliente.
  • Le serveur d’applications envoie un message au serveur de connexion GCM.
  • Le serveur de connexion GCM envoie le message au client GCM sur le périphérique.
  • Le client GCM sur le périphérique reçoit le message et détecte que l’application cliente a été désinstallée. les détails de détection dépendent de la plate-forme sur laquelle l’application client est exécutée.
  • Le client GCM sur le périphérique informe le serveur de connexion GCM que l’application cliente a été désinstallée.
  • Le serveur de connexion GCM marque le jeton d’enregistrement pour suppression.
  • Le serveur d’applications envoie un message à GCM. Le GCM renvoie un message d’erreur NotRegistered au serveur d’applications.
  • Le serveur d’applications doit supprimer le jeton d’enregistrement.

Notez que cela peut prendre un certain temps pour que le jeton d’enregistrement soit complètement supprimé de GCM. Il est donc possible que les messages envoyés à l’étape 7 ci-dessus obtiennent un ID de message valide en réponse, même si le message ne sera pas remis à l’application cliente. Finalement, le jeton d’inscription sera supprimé et le serveur recevra une erreur NotRegistered, sans qu’aucune autre action ne soit requirejse du serveur d’applications.

Cochez ceci: Codes de réponse des messages en aval

Périphérique non enregistré

200 + erreur: non enregistré

Un jeton d’enregistrement existant peut cesser d’être valide dans un certain nombre de scénarios, notamment:

  • Si l’application client est désenregistrée avec FCM.
  • Si l’application client est automatiquement désinscrite, cela peut se produire si l’utilisateur désinstalle l’application. Par exemple, sur iOS, si le service de commentaires APNS a signalé que le jeton APNS était invalide.
  • Si le jeton d’enregistrement expire (par exemple, Google peut décider d’actualiser les jetons d’enregistrement ou le jeton APNS a expiré pour les périphériques iOS).
  • Si l’application cliente est mise à jour mais que la nouvelle version n’est pas configurée pour recevoir des messages.

Pour tous ces cas, supprimez ce jeton d’inscription du serveur d’applications et arrêtez de l’utiliser pour envoyer des messages.

Voir document officiel .

Vous devez vérifier cela sur votre serveur. Vous ne pouvez pas le faire à partir du code de l’application car il n’y a aucun moyen de savoir quand l’utilisateur désinstalle l’application.

Lorsque vous envoyez une notification push, GCM vérifie si l’utilisateur a votre application, si l’utilisateur a désinstallé l’application, GCM le notera et vous informera dans le cadre de la réponse à l’envoi.

EDIT – De documents GCM

Comment fonctionne la désinscription de l’application client désinstallée

Une application client peut être automatiquement désinscrite après sa désinstallation. Cependant, ce processus ne se produit pas immédiatement. Ce qui se passe dans ce scénario est:

  1. L’utilisateur final désinstalle l’application cliente.
  2. Le serveur d’applications envoie un message au serveur de connexion GCM.
  3. Le serveur de connexion GCM envoie le message au client GCM sur le périphérique.
  4. Le client GCM sur le périphérique reçoit le message et détecte que l’application cliente a été désinstallée. les détails de détection dépendent de la plate-forme sur laquelle l’application client est exécutée.
  5. Le client GCM sur le périphérique informe le serveur de connexion GCM que l’application cliente a été désinstallée.
  6. Le serveur de connexion GCM marque le jeton d’enregistrement pour suppression.
  7. Le serveur d’applications envoie un message à GCM.
  8. Le GCM renvoie un message d’erreur NotRegistered au serveur d’applications.
  9. Le serveur d’applications doit supprimer le jeton d’enregistrement.

Notez que cela peut prendre un certain temps pour que le jeton d’enregistrement soit complètement supprimé de GCM. Il est donc possible que les messages envoyés à l’étape 7 ci-dessus obtiennent un ID de message valide en réponse, même si le message ne sera pas remis à l’application cliente. Finalement, le jeton d’inscription sera supprimé et le serveur recevra une erreur NotRegistered, sans qu’aucune autre action ne soit requirejse du serveur d’applications.

Quelques modifications sur mon code: (Peut-être aider quelqu’un)

J’ai supprimé IMEI pour éviter les problèmes. Pour que le serveur valide tous les identifiants d’ registration utilisateurs, même s’il réinstalle l’application. Lorsqu’un appareil Android enregistre un nouvel identifiant sur le serveur. Après avoir enregistré le nouvel identifiant d’enregistrement, le serveur exécutera un agent, commencera à rassembler tous les identifiants d’enregistrement de l’utilisateur actuel, puis enverra une notification factice (chaîne vide) sur chaque identifiant, lorsque gcm répondra par un identifiant canonique comme NotRegistered, je supprime ensuite l’identifiant d’enregistrement,