Question

Je développe une application avec les notifications push. Pour vérifier toutes les possibilités d'interaction de l'utilisateur, je voudrais tester mon application lorsqu'un utilisateur refuse d'avoir des notifications push activées pour mon application lors du premier démarrage.

La boîte de dialogue (initiée par registerForRemoteNotificationTypes), cependant, apparaît une seule fois par application. Comment réinitialiser la mémoire de mon application de l'iPhone OS. Suppression de l'application et la réinstallation ne contribue pas.

Était-ce utile?

La solution

Note technique TN2265: Dépannage Notifications Push

  

La première fois une application push-permis   Les registres pour les notifications push, iOS   demande à l'utilisateur si elles souhaitent recevoir   notifications pour cette application. Une fois la   l'utilisateur a répondu à cette alerte, il est   pas présenté à nouveau à moins que le dispositif   est rétablie ou l'application a été   désinstallés pendant au moins un jour.

     

Si vous souhaitez simuler un premier temps   exécuter de votre application, vous pouvez laisser l'application   désinstallés pour une journée. Vous pouvez obtenir   ce dernier sans attendre en fait une   jour en réglant l'horloge du système   transmettre un jour ou plus, en tournant la   Dispositif complètement, puis en tournant   l'appareil sous tension.

Mise à jour: Comme il est indiqué dans les commentaires ci-dessous, cette solution a cessé de travailler depuis iOS 5.1. J'encourage le dépôt d'un bug avec Apple afin qu'ils puissent mettre à jour leur documentation. La solution actuelle semble être remise à zéro du contenu de l'appareil et des paramètres.

Mise à jour:. La note technique a été mis à jour avec de nouvelles mesures qui fonctionnent correctement comme d'iOS 7

  
      
  1. Supprimer votre application de l'appareil.
  2.   
  3. Mettez l'appareil hors tension complètement et remettez-le.
  4.   
  5. Allez dans Paramètres> Général> Date et heure et fixer la date avant un jour ou plus.
  6.   
  7. Mettez l'appareil hors tension complètement nouveau et rallumez-le.
  8.   

UPDATE à partir de iOS 9

Il suffit de supprimer et de réinstaller l'application permet de réinitialiser l'état de notification à notDetermined (ce qui signifie invites apparaît).

Merci à la réponse par Gomfucius ci-dessous: https://stackoverflow.com/a/33247900/704803

Autres conseils

Une autre juste pour les tests solution à cela est en changeant simplement votre identifiant de groupe. Il suffit de ne pas oublier de le changer une fois que vous avez terminé!

Sur iOS 9.0.2, je reçois le « registre d'alerte de notification push » à chaque fois que je supprime l'application et le réinstaller. Cela est vrai pour les téléchargements de production et le mode AppleStore adhoc.

Mise à jour: Il est confirmé que cela fonctionne pour iOS 9.x

Comme nous l'avons noté l'approche de la réinitialisation de l'état de notification pour une application sur un dispositif est changé pour iOS5 un plus récent.

Cela fonctionne pour moi sur iOS6:

  • Supprimer l'application du dispositif
  • Mettre l'appareil datetime deux jours ou plus avant
  • Redémarrez le périphérique
  • Mettre l'appareil datetime deux jours ou plus avant
  • Redémarrez le périphérique
  • Installez et exécutez l'application à nouveau

Cependant, cela ne fera l'invite initiale apparaît à nouveau - il ne supprime pas d'autres choses liées à l'état push

.

Le plist: /private/var/mobile/Library/RemoteNotification/Clients.plist

... contient les clients enregistrés pour les notifications push. Suppression de l'entrée de votre application entraînera l'invite à ressurgir

Faire il semble programme fonctionner pour moi à chaque fois. J'ai une construction avec la ligne suivante décommentée:

 [[UIApplication sharedApplication] unregisterForRemoteNotifications];

Je lance chaque fois que je veux désenregistrer de PN. Vous pourriez avoir à mettre fin à l'application explicitement dans la liste des recents et jouer avec le centre de notification dans Paramètres application pour obtenir ce droit.

En outre, l'invite de l'interface utilisateur demandant à l'utilisateur d'enregistrer pour PN peut ne pas apparaître. Je ne sais pas si elle a été désactivée dans l'une des versions les plus récentes iOS.

Comme ianolito dit, fixant la date devrait fonctionner:

  

Vous pouvez obtenir ce dernier sans attendre réellement un jour en réglant l'horloge du système avant un jour ou plus, mettre l'appareil complètement, puis mettre l'appareil sous tension.

J'ai remarqué sur mon appareil (iPhone 4, iOS 6.1.2) réglage de l'horloge du système un jour avant ou même quelques jours ne fonctionne pas pour moi. Je me suis donc la date avant un mois , puis il l'a fait le travail et ma demande a montré les notifications redemandera.

Espérons que cela aide à tout le monde, il peut être une sorte de douleurs à la tête!

Je suis d'accord avec micmdk .. J'ai eu une configuration de l'environnement de développement avec les notifications Push et avait besoin d'un moyen de réinitialiser mon téléphone pour ressembler à une installation initiale ... et que ces étapes précises a fonctionné pour moi ... nécessite deux redémarrages de périphérique:

De APPLE TECH DOC:

Remise à zéro Push Notifications des autorisations d'alerte sur iOS La première fois une application push-permis enregistre pour les notifications push, iOS demande à l'utilisateur si elles souhaitent recevoir des notifications pour cette application. Une fois que l'utilisateur a répondu à cette alerte, il ne se présente pas à moins que l'appareil est rétabli ou l'application a été désinstallée pendant au moins un jour.

Si vous souhaitez simuler une course pour la première fois de votre application, vous pouvez laisser l'application désinstallée pour une journée. Vous pouvez obtenir ce dernier sans attendre réellement un jour en suivant ces étapes:

  1. Supprimer votre application à partir du périphérique.

  2. Mettez l'appareil hors tension

    complètement et tournez-le.
  3. Allez dans Paramètres> Général> Date et heure et fixer la date avant un jour ou plus.

  4. Mettre l'appareil hors tension complètement nouveau et rallumez-le.

Je me suis demandé à ce sujet dans le passé et est venu à la conclusion qu'il n'y avait pas en fait un test valable pour mon code. Je ne pense pas que votre code d'application peut réellement faire la différence entre quelqu'un des notifications en baisse pour la première fois ou de désactiver plus tard, à partir des paramètres de notification iPhone. Il est vrai que l'expérience utilisateur est différente, mais qui est caché à l'intérieur de l'appel à registerForRemoteNotificationTypes.

Appel unregisterForRemoteNotifications ne supprime pas complètement l'application des paramètres de notification - si elle ne supprime le contenu des paramètres de cette application. Donc, ce ne sera pas encore faire la boîte de dialogue à présenter une seconde fois à l'utilisateur la prochaine fois que l'application se exécute (au moins pas sur v3.1.3 que je suis en train de tester avec). Mais comme je le dis ci-dessus, vous probablement ne devrait pas être inquiéter à ce sujet.

La même note technique que refered dans la réponse acceptée ( TN2265 -. Dépannage Notifications push) a depuis été mis à jour avec une solution pour iOS 5 et au-dessus

En bref:. Créer une sauvegarde et de restauration de chaque fois

  

Sur iOS 5 et versions ultérieures, réinitialiser les autorisations de notification push d'alerte en rétablissant le dispositif à partir d'une sauvegarde (r. 11450187). Voici les étapes pour le faire efficacement:

     
      
  1. 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.
  2.   
  3. Utilisez iTunes pour sauvegarder le périphérique.
  4.   
  5. Lancez l'application. Les autorisations des notifications push d'alerte seront présentés.
  6.   
  7. Lorsque vous souhaitez réinitialiser les autorisations de notification push d'alerte, restaurer l'appareil à partir de la sauvegarde que vous avez créé dans la première étape.
  8.   

L'Apple Tech note décrit vous pouvez également restaurer l'appareil pour réinitialiser la boîte de dialogue de notification Push.

Il ne dit pas que vous pouvez également utiliser l'option « Général -> Réinitialiser -> Effacer contenu et réglages ». Sur l'appareil lui-même (5.x iOS)

En plus de la réponse ianolito.

eu le même problème avec une application que j'ai téléchargé il y a un an et refuser notification push au départ. Maintenant, vouloir les notifications push back, ces étapes ont travaillé pour moi sur iOS bêta 7. Je ne sais pas quel point (s) a déclenché exactement.

  • Fermer et supprimer l'application.
  • Accédez à vos paramètres de iCloud et supprimer l'application de l'iCloud. Pour ce faire, sur tous les autres appareils où vous avez la sauvegarde iCloud pour les applications activées. Après la désactivation et la suppression de faire une sauvegarde fraîche. L'application ne doit pas être répertorié plus sous les sauvegardes. (Ceci est peut-être pourquoi la note technique d'Apple décrit par ianolito a cessé de travailler dans iOS 5, iCloud depuis a été introduit dans iOS 5 et iCloud sauvegarde beaucoup ont pour les applications activées.)
  • Accédez à vos paramètres de temps et de régler l'heure plus de 1 mois à l'avance.
  • Mettez l'iPhone hors tension (pas remise à zéro).
  • Attendez une minute, allumez-le à nouveau et télécharger l'application à nouveau.
  • Lancez l'application et on m'a présenté la boîte de dialogue.
  • Activer la sauvegarde de l'application, car il est toujours désactivé. Corriger le temps.

Dieu merci, je ne l'ai pas eu à « Effacer contenu et réglages ». Peut-être qu'il va aider quelqu'un.

Après des heures de recherche, et pas de chance avec les 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
        }

    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top