Je développe une application avec les notifications Push. Pour vérifier toutes les possibilités d'interaction de l'utilisateur, j'aimerais tester mon application lorsqu'un utilisateur refuse d'activer les notifications Push pour mon application lors du premier démarrage.
La boîte de dialogue (initiée par registerForRemoteNotificationTypes
) ne s'affiche toutefois qu'une fois par application. Comment réinitialiser la mémoire de l'iPhone OS de mon application. Supprimer l'application et réinstaller n'aide pas.
Note technique TN2265: Résolution des problèmes liés aux notifications push
La première fois une application compatible Push s'enregistre pour les notifications Push, iOS demande à l'utilisateur s'il souhaite recevoir notifications pour cette application. Une fois la l’utilisateur a répondu à cette alerte c’est non présenté à nouveau à moins que l'appareil est restauré ou l'application a été désinstallé pendant au moins une journée.
Si vous voulez simuler une première fois lancez votre application, vous pouvez la quitter désinstallé pendant un jour. Vous pouvez atteindre ce dernier sans réellement attendre un jour en réglant l'horloge système transmettre un jour ou plus, en tournant le éteignez complètement l'appareil, puis tournez l'appareil en marche.
Mise à jour: Comme indiqué dans les commentaires ci-dessous, cette solution a cessé de fonctionner depuis iOS 5.1. J'encourage le dépôt d'un bogue avec Apple afin qu'ils puissent mettre à jour leur documentation. La solution actuelle semble réinitialiser le contenu et les paramètres de l'appareil.
Mise à jour: La note technique a été mise à jour avec de nouvelles étapes qui fonctionnent correctement à partir d’iOS 7.
- Supprimer votre application de l'appareil.
- Éteignez complètement l'appareil, puis rallumez-le.
- Allez dans Paramètres> Général> Date et heure et définissez la date d'un jour ou plus.
- Éteignez complètement l'appareil, puis rallumez-le.
UPDATE à partir de iOS 9
Si vous supprimez et réinstallez simplement l'application, l'état de la notification sera réinitialisé à notDetermined
(ce qui signifie que des invites apparaîtront).
Merci à la réponse de Gomfucius ci-dessous: https://stackoverflow.com/a/33247900/704803
Une autre solution juste pour tester consiste à changer votre identifiant de paquet. N'oubliez pas de le changer une fois que vous avez terminé!
Sur iOS 9.0.2, je reçois l '"alerte de notification Push Push" à chaque fois que je supprime l'application et la réinstalle. Cela est vrai pour les téléchargements de production AppStore et le mode ad hoc.
UPDATE: Il est confirmé que cela fonctionne pour iOS 9.x
Comme indiqué précédemment, l'approche utilisée pour réinitialiser l'état de notification d'une application sur un périphérique est modifiée pour iOS5 et pour une version plus récente.
Cela fonctionne pour moi sur iOS6:
Cependant, cela ne fera que faire réapparaître l'invite initiale - cela ne supprimera aucun autre élément lié à l'état Push.
La plist: /Private/var/mobile/Library/RemoteNotification/Clients.plist
... contient les clients enregistrés pour les notifications Push. Si vous supprimez l'entrée de votre application, l'invite réapparaîtra.
Le faire par programmation semble fonctionner pour moi à chaque fois . J'ai une construction avec la ligne suivante non commentée:
[[UIApplication sharedApplication] unregisterForRemoteNotifications];
Je le lance chaque fois que je veux me désinscrire de PN. Vous devrez peut-être fermer l'application explicitement à partir de la liste des articles récents et vous amuser avec l'application Notification Center dans Paramètres pour obtenir les bons résultats.
De plus, l'invite d'interface utilisateur demandant à l'utilisateur de s'inscrire pour le PN peut ne pas s'afficher. Pas sûr si a été désactivé dans l'une des versions récentes iOS.
Je suis d'accord avec micmdk .. J'avais une configuration d'environnement de développement avec notifications push et j'avais besoin d'un moyen de réinitialiser mon téléphone pour qu'il ressemble à une installation initiale… et seules ces étapes précises ont fonctionné pour moi… nécessitent deux redémarrages de l'appareil
De Apple TECH DOC:
Réinitialisation de l'alerte d'autorisations de notifications Push sur iOS La première fois qu'une application activée par Push s'enregistre pour les notifications Push, iOS demande à l'utilisateur s'il souhaite recevoir des notifications pour cette application. Une fois que l'utilisateur a répondu à cette alerte, il n'est plus présenté à moins que le périphérique ne soit restauré ou que l'application ne soit désinstallée depuis au moins un jour.
Si vous souhaitez simuler une première exécution de votre application, vous pouvez la laisser désinstallée pendant un jour. Vous pouvez atteindre ce dernier sans attendre un jour en suivant ces étapes:
Supprimer votre application de l'appareil.
Éteignez complètement l'appareil, puis rallumez-le.
Allez dans Paramètres> Général> Date et heure et définissez la date d'un jour ou plus.
Éteignez complètement l'appareil, puis rallumez-le.
Comme le disait ianolito, fixer la date devrait fonctionner:
Vous pouvez atteindre ce dernier sans attendre un jour en réglant l'horloge système d'un jour ou plus, en éteignant complètement l'appareil, puis en le rallumant.
J'ai remarqué sur mon appareil (iPhone 4, iOS 6.1.2) que le réglage de l'horloge système un jour ou même quelques jours ne fonctionnait pas pour moi. Donc, j'ai reporté la date un mois, puis cela a fonctionné et mon application a de nouveau affiché l'invite de notification.
J'espère que ça aide pour tout le monde, ça peut être un peu douloureux à la tête!
Je me suis déjà posé cette question par le passé et suis parvenu à la conclusion que ce n'était pas réellement un test élémentaire valable pour mon code. Je ne pense pas que votre code d'application puisse réellement faire la différence entre une personne refusant des notifications la première fois ou une désactivation ultérieure des paramètres de notification de l'iPhone. Il est vrai que l'expérience utilisateur est différente mais elle est cachée dans l'appel à registerForRemoteNotificationTypes.
L'appel de unregisterForRemoteNotifications ne supprime pas complètement l'application des paramètres de notification, bien qu'il supprime le contenu des paramètres de cette application. Cela n'entraînera donc toujours pas une deuxième présentation de la boîte de dialogue à l'utilisateur lors de la prochaine exécution de l'application (du moins pas avec la v3.1.3 avec laquelle je teste actuellement). Mais comme je le dis plus haut, vous ne devriez probablement pas vous inquiéter de cela.
La même note technique que celle mentionnée dans la réponse acceptée ( TN2265 - Dépannage des notifications Push) a depuis été mise à jour avec une solution pour iOS 5 et versions ultérieures.
En bref: créez une sauvegarde et restaurez-la à chaque fois.
Sur iOS 5 et versions ultérieures, réinitialisez l'alerte des autorisations de notifications Push en restaurant le périphérique à partir d'une sauvegarde (r. 11450187). Voici les étapes pour le faire efficacement:
- Utilisez l'organisateur Xcode pour installer votre application sur l'appareil. La clé est d'installer l'application pour la première fois sans l'exécuter.
- Utilisez iTunes pour sauvegarder l'appareil.
- Lancer l'application. L'alerte des autorisations de notifications Push sera présentée.
- Lorsque vous souhaitez réinitialiser l'alerte d'autorisations de notifications Push, restaurez le périphérique à partir de la sauvegarde créée à la première étape.
La note technique Apple a également décrit la possibilité de restaurer le périphérique pour réinitialiser la boîte de dialogue Notification push.
Cela ne dit pas que vous pouvez également utiliser l'option "Général -> Réinitialiser -> Effacer tout le contenu et tous les paramètres" sur l'appareil lui-même (iOS 5.x).
En plus de la réponse de ianolito.
Avait le même problème avec une application que j'ai téléchargée il y a un an et refusant initialement la notification Push. Désirant maintenant récupérer les notifications Push, ces étapes ont fonctionné pour moi sur iOS 7 bêta. Je ne sais pas quel (s) point (s) l’a déclenchée exactement.
Dieu merci, je n'ai pas eu à "effacer tout le contenu et les paramètres". Cela aidera peut-être quelqu'un.
Après des heures de recherche et aucune chance des suggestions ci-dessus, cela a fonctionné comme un charme pour 3.x +
override func viewDidLoad() {
super.viewDidLoad()
requestAuthorization()
}
func requestAuthorization() {
if #available(iOS 10.0, *) {
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { (granted, error) in
print("Access granted: \(granted.description)")
}
} else {
// Fallback on earlier versions
}
}