didReceiveRemoteNotification: fetchCompletionHandler: ouvert à partir de l'icône vs push notification
Je suis en train de mettre en œuvre le fond de notification push de la manipulation, mais je vais avoir des problèmes avec déterminer si l'utilisateur ouvre l'application à partir de la notification qui vous a été envoyé par opposition à l'ouverture de l'icône.
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
//************************************************************
//I only want this called if the user opened from swiping the push notification.
//Otherwise I just want to update the local model
//************************************************************
if(applicationState != UIApplicationStateActive) {
MPOOpenViewController *openVc = [[MPOOpenViewController alloc] init];
[self.navigationController pushViewController:openVc animated:NO];
} else {
///Update local model
}
completionHandler(UIBackgroundFetchResultNewData);
}
Avec ce code, l'application est en cours d'ouverture à la MPOOpenViewController indépendamment de la façon dont l'utilisateur ouvre l'application. Comment puis-je faire en sorte que le point de vue contrôleur est seulement poussé si elles ouvrez l'application à partir d'un balayage de la notification?
Avec le même code, il a travaillé sur iOS 6, mais avec le nouvel iOS 7 méthode, il n'est pas se comporter de la façon dont je le veux.
Edit: je suis en train de lancer l'application sur iOS 7 maintenant, et nous ne sommes pas de soutenir toute version antérieure à la version iOS 7. J'ai utilisé ce même code dans l'iOS 6 version de la méthode (sans le gestionnaire d'achèvement) et il s'est comporté de la manière que je l'avais prévu. Vous auriez glisser la notification et ce serait appelée. Si vous avez ouvert à partir de l'icône, la méthode ne sera jamais appelé.
- C'est semble bien. Lorsque vous avez ouvert l'application à partir de l'icône de cette méthode ne jamais être appelé. Donc exactement ce qui est le problème auquel vous êtes confronté, ou ce que vous voulez réaliser ?
- ce n'est pas vrai. Depuis l'application prend en charge de fond à distance des notifications, cette méthode est appelée lorsque l'application est toujours en arrière-plan. Par exemple, si j'ai mis un point de rupture de l'ici et de fermer l'application. Alors quand je reçois le pousser, il touche le point d'arrêt avec l'app encore fermé. Ce n'est pas arrivé dans iOS6
- Dans votre Question en ligne "Avec le même code, il a travaillé sur iOS 6, mais avec le nouvel iOS 7 méthode, il n'est pas se comporter de la façon dont je le veux.". Spécifier dans quel iOS il est en cours d'exécution ?
- Vous ne pouvez pas le faire dans iOS 6. stackoverflow.com/questions/20487890/...
- Je suis sur ce sur iOS 7. Nous ne sommes pas soutenir quoi que ce soit avant iOS 7
- Je pense que vous devriez vérifier la marque de la notification push mode d'arrière-plan pour l'activer. OU Entrer dans Plist pour activer le mode d'arrière-plan pour le push notification. Je pense que vous conscient à ce sujet.
- Vous êtes manquant à ma question entièrement. Cette méthode est appelée à chaque fois que je reçois un push, comme il se doit. Le problème est que dans le fond, une nouvelle vue est poussé sur la pile de navigation. J'avais comme qui de se produire si l'utilisateur effectue à partir de la notification (ils s'attendent à voir le contenu du droit de suite). Si ils ont frappé l'icône, elles devraient être prises à l'écran d'accueil, où nous avons un badge indiquant à l'utilisateur qu'il y a du nouveau contenu pour eux dans leur alimentation.
- Même question est d'entrer en ios 10 ,en 9.3 il travaille très bien et ci-dessous des solutions sont à défaut dans ios 10
Vous devez vous connecter pour publier un commentaire.
Ok j'ai tout compris. La méthode est en fait appelé deux fois (une fois quand il reçoit la poussée, et une fois lorsque l'utilisateur interagit avec l'icône ou de la notification).
Merci Tim Castelijns pour l'ajout des points suivants:
UIApplicationStateInactive
de l'état, c'est qu'il ne se fait pas seulement si l'application est en train d'être ouvert par l'utilisateur de l'interaction avec la notification, mais aussi lorsque l'application est enInactive
etat, par exemple: lorsqu'un sms/appel est reçu, le Centre de Notification est affichée ou Centre de Contrôle. Par conséquent, il en résulte faux positifs, où il navigue à vue, dans les cas mentionnés ci-dessus.content_available=true
. Si vous l'enlever ou le mettre à false, il ne sera exécuté qu'une fois. Cela ne résoudra pas le problème de chacun, puisque certaines personnes ont besoin de cette clé pour être vraiUIApplicationStateInactive
...OK. Compris. Mais je ne comprends pas pourquoi à ce moment, vous recevez un rappel de votredidReceiveRemoteNotification
méthode!? Je veux dire que vous n'êtes pas à la réception d'une notification à cet instant. Je ne comprends pas le flux, vous êtes en train de parler.@MikeV une solution de Swift 3 (mais avec l'instruction switch):
@MikeV une solution de Swift 2: