0

Nous avons configuré SNS pour envoyer des notifications push pour notre application Android. Le processus étape par étape est la suivante:Gestion de la désinstallation de l'application Android avec Amazon SNS

  1. Chaque fois que l'application arrive, il génère l'enregistrement GCM en faisant un appel register. L'extrait de code est ci-dessous:

    private String registerOnGCM(){ try { GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(getBaseContext()); String token = gcm.register(Globals.GCM_TOKEN); return token; } catch (IOException e) { Log.e(TAG, "failed to complete token refresh process"); } return null; }

    où Globals.GCM_TOKEN est l'ID d'application obtenue en faisant l'enregistrement FCM pour l'application.

  2. App appelle le serveur principal et transmet cet identifiant d'enregistrement.

  3. Le serveur principal vérifie si cet ID d'enregistrement est nouveau ou non. S'il est nouveau, il crée un nouveau point de terminaison SNS à l'aide de cet ID d'enregistrement, puis souscrit le nouveau point de terminaison à la rubrique créée pour l'utilisateur. Et il persiste toutes ces données dans notre base de données pour référence future.

Lors de l'envoi d'une notification push à tous les dispositifs pour l'utilisateur, nous diffusons simplement le message au sujet créé pour cet utilisateur et le message est envoyé à tous les appareils appartenant à l'utilisateur. Cela fonctionne très bien impliquant le cas de plusieurs appareils avec notre application installée sur chacun d'eux. Le problème survient lors de la désinstallation et de la réinstallation. Après la réinstallation, l'appel d'enregistrement GCM renvoie un ID d'enregistrement distinct et l'envoie au serveur principal. Le backend le détecte comme un nouveau périphérique et l'enregistre pour SNS et l'utilisateur finit avec plusieurs points de terminaison SNS même si le périphérique est le même. Lorsque vous envoyez une notification au sujet pour cet utilisateur, le même appareil reçoit deux notifications push. Probablement parce que l'ancien point de terminaison est toujours en vie, il aurait dû être désactivé.

Donc, ma question: Comment faire pour que dans le cas de test mentionné, une seule notification push est envoyée à l'appareil Android.

Répondre

1

Voici donc la solution que j'ai trouvée pour mon problème.

En cas de réinstallation, l'identifiant d'enregistrement changeait et le même identifiant d'enregistrement était utilisé par la suite pour détecter si le périphérique avait déjà été enregistré pour des poussées SNS. Mais il y a une entité de plus qui est unique à l'appareil et qui ne change pas en cas de réinstallation, c'est-à-dire l'ID de l'appareil.

J'ai modifié l'appel backend à notre serveur et ajouté un paramètre de plus, l'ID de l'appareil. Cet identifiant est maintenant utilisé pour détecter les enregistrements SNS déjà existants. Dans le cas où l'identifiant est déjà existant et que l'identifiant d'enregistrement est nouveau, je supprime l'ancien point de terminaison avec son abonnement au sujet pour cet utilisateur, puis je poursuis avec le reste du processus d'enregistrement. Cela permettra de garder les données sur SNS ainsi que nos propres données propres.