Pourquoi didReceiveRemoteNotification n'est pas appelé mais didReceiveRemoteNotification: fetchCompletionHandler appelé lorsque mon application est au premier plan?
Si je remplace
override func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
println("hey)
}
J'ai réussi à avoir la méthode appelée avec l'application au premier plan, lorsque j'envoie une notification push.
Si je remplace
override func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
println("hey")
}
Je n'ai pas tout appel à la méthode lors de l'envoi d'une notification de l'application au premier plan. Pourquoi le premier travail, mais la seconde n'est pas lorsque l'application est au premier plan?
Remarque que je ne suis que la mise en œuvre de l'un de ces à la fois. Pas les deux en même temps.
source d'informationauteur Adam Johns | 2015-04-28
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser la version de rappel, sauf si vous avez besoin de soutien ios<7 (quand il a été introduit). Comme vous l'utilisation de Swift j'espère que n'est pas le cas.
La méthode plus ancienne remonte à ios3 et est obsolète, mais dans tous les nom:
L'ancienne version sera également donner des résultats différents selon que l'application est active (au premier plan ou arrière-plan) ou lance à partir d'un démarrage à froid. Dans ce dernier cas, il ne sera pas appelé, et vous aurez besoin pour intercepter le
launchOptions
dict surdidFinishLaunchingWithOptions
pour obtenir à la infoDict:Utiliser la fonction de rappel de la version. Il fonctionne pour tous les cas.
Vous n'avez pas à utiliser le gestionnaire d'achèvement/blocauquel cas l'effet est le même (enfin, plus compatible avec la nouvelle méthode).mise à jour
désolé, Apple dit que vous ne appeler l'achèvement bloc "dès que possible" - vous avez 30 secondes pour le faire avant que l'OS donne sur vous. Ce pourrait être la source de votre avertissement.
Donc appeler à la fin du bloc:
J'ai été en utilisant cette méthode sans d'appel que l'achèvement du bloc et n'avons pas rencontré de problèmes, mais je vais ajouter un maintenant, juste pour être sûr. Apple suggère que si vous ne le faites pas, votre application n'obtiendrez pas marqué mais je n'ai pas vu que dans la pratique.
Avez-vous inscrire au moins un
UIUserNotificationType
avecUIApplication:registerUserNotificationSettings:
?Si vous ne vous inscrivez pas de badge, de son ou d'alerte, alors vous pouvez seulement recevoir silencieux notifications, qui sont livrés uniquement avec un FetchCompletionHandler.