registerForRemoteNotifications doit il être appelé à  chaque lancement ?

LeChatNoirLeChatNoir Membre, Modérateur

J'implémente les notifications push dans mon app.


Côté serveur, EsayApns fonctionne plutôt bien.


 


Par contre, dans mon code, dans l'app delegate, j'appelle systématiquement registerForRemoteNotifications


 


Je pensais qu'une fois que l'utilisateur avait accepté, cet appel n'aurait plus d'effet.


Or, ça déclenche toujours la méthode :


- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken


 


Et du coup, ça renvoie le token au serveur. Pas gênant en soi (easyApns le gère) mais je me dis qua c'est inutile.


 


La bonne pratique est elle de tracer le premier lancement en enregistrant une pref lorsque l'utilisateur accepte la première fois ? Et comme ça, ne plus appeler le "register" les fois suivantes ?


 


Merci ;)


 


Réponses

  • Oui


  • LeChatNoirLeChatNoir Membre, Modérateur

    Merci :)


  • AliGatorAliGator Membre, Modérateur
    A mon avis il est préférable d'appeler systématiquement "registerForRemoteNotifications", et stocker dans les NSUserDefaults le token retourné. Et de n'envoyer ce token à  ton serveur QUE s'il est différent de celui dans les UserDefaults. Car même si le token est calculé d'après l'identifiant du device + l'identifiant de l'application, et donc que pour un même couple { device, application } il est sensé être unique, je me demande s'il n'y a pas des cas où il peut changer. Genre si tu formates ton iPhone et le restaure, des choses comme ça.

    En tout cas il me semble avoir déjà  lu que ça pouvait arriver (même si c'était dans de rares occasions) et donc que c'était quand même mieux de register à  chaque fois.
  • LeChatNoirLeChatNoir Membre, Modérateur

    ah ok. Pas bête :)


  • Oui le device token peut changer. La solution proposée par Ali est d'ailleurs la bonne. Vérifier si le token est le même systématiquement, si ce n'est plus le cas renvoyer une requête pour sauver le nouveau jeton.


     


    https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/IPhoneOSClientImp.html#//apple_ref/doc/uid/TP40008194-CH103-SW1


  • AliGatorAliGator Membre, Modérateur
    mars 2015 modifié #7
    Effectivement, c'est bien ici que je l'avais lu, et plus précisément dans le paragraphe "Registering for Remote Notifications" où il est bien dit :

    Device tokens can change, so your app needs to reregister every time it is launched.
    [...]
    If a user restores a backup to a device or computer other than the one that the backup was created for (for example, the user migrates data to a new device or computer), the user must launch the app at least once for it to receive notifications again. If the user restores backup data to a new device or computer, or reinstalls the operating system, the device token changes. Moreover, never cache a device token and give that to your provider; always get the token from the system whenever you need it. If your app has previously registered, calling registerForRemoteNotifications results in the operating system passing the device token to the delegate immediately without incurring additional overhead. Also note that the delegate method may be called any time the device token changes, not just in response to your app registering or re-registering.

    Donc en + d'après la doc, appeler "registerForRemoteNotifications" à  chaque fois ne fait *pas forcément* une requête à  l'APNS, c'est déjà  optimisé pour appeler alors directement la méthode de delegate s'il n'a pas besoin d'en redemander un nouveau, t'as même pas à  te poser la question de ton côté.


    En tout cas merci Magiic pour avoir retrouvé la référence :)
  • C'est normal 


Connectez-vous ou Inscrivez-vous pour répondre.