2012-10-09 6 views
5

L'une des fonctionnalités de mon application est de désenregistrer l'utilisateur de la pushnotification distante lorsque l'utilisateur se déconnecte de l'application. Est-il possible de désinscrire l'application de la notification push lorsque l'utilisateur se déconnecte alors que l'appareil est en mode avion (hors ligne)?IOS unregisterForRemoteNotifications ne fonctionne pas en mode avion

J'ai essayé ce code mais je reçois toujours des notifications lorsque je reviens en ligne, [[UIApplication sharedApplication] unregisterForRemoteNotifications];

Quelqu'un peut-il aider à supprimer l'application du centre de notifications lorsque l'appareil est en mode avion?

+1

Vous n'avez pas besoin d'être connecté à Internet pour vous désinscrire? – DGund

+0

@DGund J'étais sous la même idée fausse, mais en réalité, vous devez être en ligne pour vous désinscrire pour la notification avec succès. Vous recevez toujours des notifications si vous n'êtes pas enregistré alors que vous n'avez pas de connectivité. – user1732255

Répondre

0

Ajouter un drapeau ou quelque chose de similaire (appeler ce que vous voulez, comme ShouldRecallUnregister), lorsque vous appelez

[[UIApplication sharedApplication] unregisterForRemoteNotifications];

que vous avez défini sur OUI s'il n'y a pas de connexion Internet, et le laisser à NO si le désenregistrement fonctionne.

magasin dans les UserDefaults ([[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"ShouldRecallUnregister"];) et vérifiez sa valeur en applicationDidBecomeActive: par exemple (ou partout où il convient le mieux à votre application).

Si c'est OUI, appelez à nouveau [[UIApplication sharedApplication] unregisterForRemoteNotifications];.

+0

De cette manière, vous obtiendrez d'autres notifications dans le délai de l'arrêt du mode de fonctionnement et de l'activation de l'application. – ilmiacs

+0

Merci pour la solution. UnregisterForRemoteNotifications n'a pas d'appel d'événement à suivre si l'annulation a échoué ou non. Y a-t-il un moyen de le suivre? – user1732255

+0

@rdurand cette solution pourrait ne pas répondre à mes exigences car je ne devrais pas recevoir de notifications une fois que l'utilisateur s'est déconnecté de l'application.Dans cette solution, l'annulation de l'inscription se termine uniquement lorsque l'utilisateur redémarre ou met l'application au premier plan. Jusque-là, nous recevons toujours des notifications. Y a-t-il un meilleur weay? – user1732255

2

Apple contrôle les notifications push à distance. Si vous êtes hors ligne, vous ne pouvez pas le désactiver de manière logique. Quand Apple vous voit pour la première fois en ligne et que les poussées ne sont pas désactivées, il vous envoie des push. Il n'y a aucun moyen d'empêcher l'iDevice d'afficher les poussées que Apple envoie à l'utilisateur, car ce n'est pas entre les mains de l'application.

Il n'y a donc qu'une seule possibilité: Vous devez désactiver IMMÉDIATEMENT les poussées après la remise en service de l'appareil. Et encore c'est une question de chance, quel message Apple obtient d'abord, que vous êtes en ligne ou que vous désactivez la poussée. Et il y a aussi la question, qu'adviendra-t-il des notifications que Apple voulait envoyer à l'appareil alors qu'il était hors ligne. Va-t-il les renvoyer de toute façon lorsqu'ils sont en ligne ou les rejeter lorsqu'ils désactivent en premier? Je ne sais pas. Vous devrez faire la recherche.

Donc, la seule chance que vous avez est si votre application est en arrière-plan pendant que l'utilisateur se connecte. Vous devez empêcher votre application d'être suspendue (here's pour y parvenir) afin de pouvoir répondre aux notifications du système. La notification dont vous avez besoin est celle du changement de statut en ligne, je sais seulement qu'elle existe. This resource peut être utile. Lorsque l'appareil est en ligne, il informe votre application qui attend en arrière-plan (pas suspendu). Ensuite, vous pouvez réagir en désenregistrant immédiatement les poussées à distance.

C'est le meilleur que vous pourriez réaliser dans cette direction. J'espère que cela t'aides.

+0

Upvote, votre solution semble légitime. – rdurand

Questions connexes