2017-10-18 7 views
0

Il semble que toutes les autres informations que j'ai trouvées étaient obsolètes. Considérons un utilisateur qui a iPhone et iPad et la même application est installée sur chaque appareil. Lorsque vous vous connectez pour la première fois à partir de chaque périphérique, le jeton de périphérique unique sera placé dans la base de données pour être utilisé pour les notifications futures. Voici la méthode que j'utilise pour obtenir jeton dispositif AppDelegate:Mise à jour du jeton de périphérique APN lors de l'utilisation de plusieurs périphériques par le même utilisateur

- (void)application:(UIApplication*)application 
didRegisterForRemoteNotificationsWithDeviceToken(NSData*)deviceToken 
    { 
    [[NSUserDefaults standardUserDefaults] setValue:deviceToken forKey:@"token"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
    } 

... afin que plus tard, je peux l'utiliser au processus de connexion.

Maintenant, si pour une raison quelconque l'application est désinstallée et réinstallée, ou après la mise à jour iOS, le jeton d'appareil sera différent et je dois mettre à jour les enregistrements dans la base de données.

Si je devais traiter avec un seul périphérique par utilisateur, alors j'irais par identifiant utilisateur, en supprimant l'enregistrement précédent et en insérant le nouveau. Mais dans le cas de plusieurs périphériques ... comment identifier quel enregistrement de base de données mettre à jour, quel jeton n'est plus utilisé?

Y a-t-il un ID de périphérique unique qui ne change JAMAIS ???

Répondre

0

Chaque fois que l'application est lancée, le jeton de périphérique mis à jour viendra dans la même méthode que vous utilisez pour stocker le jeton de périphérique. Vous pouvez donc utiliser une logique uniquement pour enregistrer et mettre à jour le jeton.

Vous avez stocké le jeton actuel dans UserDefaults, il vous suffit donc de supprimer ce jeton de la base de données, puis de mettre à jour le nouveau jeton. Vous pouvez le faire dans la même méthode que celle dans laquelle vous enregistrez le jeton. Pour cela chaque fois que vous devez vérifier si le jeton d'appareil actuel est dans la base de données? Si oui, supprimez-le et mettez-le à jour pour l'ID utilisateur. Si non, sauvegardez simplement celui-ci dans la base de données pour l'ID utilisateur.

+0

Non. Cela ne fonctionne pas si je désinstalle puis réinstalle l'application. UserDefaults sera vide. Mais le jeton le plus ancien est toujours dans la base de données. – ekashking

+0

Vous pouvez essayer de supprimer tous les jetons lorsque l'utilisateur est connecté pour la première fois, et le jeton de l'autre périphérique doit être mis à jour chaque fois que l'application est lancée. Bien qu'il y ait un problème, pendant la courte période pendant laquelle les jetons de l'appareil seront supprimés et l'appareil est toujours actif, vous ne pourrez pas envoyer les notifications dans ce court laps de temps. –