Ne pas obtenir de jeton de périphérique APNS sur iOS 13

14

J'ai un problème lié au jeton d'appareil APNS. Avant d'utiliser Xcode 10.2 et iOS 12.1. À ce moment, j'obtenais le jeton d'appareil dans la méthode déléguée

-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

Je m'inscris à APNS comme ceci et cela fonctionnait bien.

UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    center.delegate = self;
    [center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error){
                if(!error){
                    [[UIApplication sharedApplication] registerForRemoteNotifications];
                }
    }];

Désormais, une fois iOS 13 installé sur mon appareil iPhone et en utilisant Xcode 11, la méthode déléguée didRegisterForRemoteNotificationsWithDeviceToken n'est plus appelée. Impossible de comprendre ce problème. J'ai déjà fait des recherches à ce sujet, je sais qu'il y a des changements dans l'obtention du jeton à partir de la méthode déléguée mais dans mon cas, la méthode déléguée n'est même pas appelée. Encore une fois, cela fonctionne bien pour iOS 12.

IOS Dev
la source
C'est résolu maintenant. J'ai dû créer tous les certificats pour Xcode 11 à partir du portail des développeurs et cela a fonctionné.
Dev IOS
@IOSDev Veuillez documenter ce que vous avez fait. Je rencontre la même chose maintenant; il y a du bon karma ici je pense.
Darren Black
1
Avez-vous trouvé une solution à cela? je cours avec le même problème.
Aman.Samghani
1
@ Aman.Samghani: OUI, ce n'est pas la première fois qu'une alerte est générée pour la notification push. J'ai dû à nouveau appeler le même code de registre de notification push, puis j'ai reçu un jeton d'appareil. Donc, en deux ou trois essais, j'ai obtenu un jeton.
Dev IOS

Réponses:

15

Redémarrez simplement votre iPhone. C'est aussi simple que cela et dans 90% des cas, cela résoudra votre problème.

Aleksandr Honcharov
la source
1
J'aimerais avoir lu ce commentaire plus tôt. A été gaspillé 5 heures ++ pour déboguer et regarder follement sur le profil, etc.
zuyao88
1
Travaille pour moi, iOS 13.3.1
Jhonattan
c'est une chose bizarre de se produire, j'ai passé 3 heures à comprendre ce qui ne va pas,
fakiho
2

Connectez-vous sur https://appleid.apple.com/ , puis ouvrez l'url " https://developer.apple.com/account/ios/identifier/bundle " ou " https://developer.apple.com/account/resources / certificats / liste ".

Tout d'abord, créez deux nouveaux certificats: (1) Versions de développement Apple Development Sign de vos applications iOS, macOS, tvOS et watchOS. Pour une utilisation dans Xcode 11 ou version ultérieure. (2) Apple Distribution Signez vos applications pour les soumettre à l'App Store ou pour une distribution Ad Hoc. Pour une utilisation avec Xcode 11 ou version ultérieure.

Recherchez ensuite le menu "Identifiants" via l'url " https://developer.apple.com/account/resources/identifiers/list ". Modifiez vos identifiants de votre application, assurez-vous que le certificat SSL de développement et le certificat SSL de production sont ajoutés aux notifications push.

Ensuite, ouvrez le menu "Profils" via l'url " https://developer.apple.com/account/resources/profiles/list ". Assurez-vous que les certificats en tant que type de DistributionFor qui seront utilisés dans Xcode 11 ou tard, et enregistrez

Enfin, téléchargez le fichier de profil d'approvisionnement et les fichiers de certificats CA créés sur votre MAC, qui seront ajoutés à XCode et à l'application de porte-clés en double-cliquant séparément sur les fichiers.

De plus, n'oubliez pas de redémarrer votre téléphone portable et assurez-vous d'avoir correctement configuré la notification à distance.

Dengshan Tian
la source
1

J'ai également rencontré le même problème. J'ai essayé de nombreux scénarios. J'ai réussi après avoir effectué les étapes ci-dessous:

  1. Appareil redémarré
  2. Appelé la registerForRemoteNotifications méthode dans le thread principal.

Dans mon cas, j'obtenais un jeton d'appareil, mais il y a un retard dans la réponse (je pense en raison de l'enregistrement des notifications à distance dans un fil d'arrière-plan). Mais après avoir bougé [[UIApplication sharedApplication] registerForRemoteNotifications]dans le fil principal, tout fonctionne bien.

Voici mon code:

    [UIApplication sharedApplication].applicationIconBadgeNumber = 0;
    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    center.delegate = delegate;
    [center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error){
        if(!error){
            dispatch_async(dispatch_get_main_queue(), ^{
                [[UIApplication sharedApplication] registerForRemoteNotifications];
                [self callCompletion:TRUE completion:completion];
            });
        }
    }];

J'espère que cela vous aidera.

Kirti Nikam
la source
ne fonctionne pas du tout
Vyachaslav Gerchicov
0

Je viens de résoudre ce problème de cette façon en suivant les étapes ci-dessous.

Ajoutez un peu d'impression dans la méthode didRegisterForRemoteNotificationsWithDeviceToken et maintenez les périphériques connectés.

  1. Je suis allé aux capacités cibles.
  2. Désactiver la notification push
  3. Créez et exécutez l'application sur l'appareil et attendez.
  4. Vérifiez ensuite la console sur laquelle vous avez reçu le message d'erreur de notification push d'échec.
  5. Arrêtez d'exécuter l'application.
  6. Rétablissez la notification push.
  7. Allez à https://developer.apple.com/ Choisissez Compte -> Certificats, Identifiants & Sélectionnez votre projetProfils provisoires -> Clés -> cliquez sur éditer et enregistrer après ce téléchargement le profil provisonal et double-cliquez dessus.
  8. Créez et exécutez l'application sur l'appareil.
  9. Ensuite, cela fonctionne bien.

    J'espère que cela aide quelqu'un.

Gangireddy Rami Reddy
la source
-2

Il est lié à DeviceSupport manquant dans votre installation XCode, pour la version de plate-forme utilisée par votre appareil de déploiement.

Dans mon cas, la plate-forme 13.1 était manquante. Pour résoudre, ajoutez simplement le DeviceSupports dans le dossier

Xcode.app/Contents/Develper/Platforms/iPhoneOS.platform/DeviceSupport

Vous pouvez télécharger DeviceSupport manquant à partir de: https://github.com/iGhibli/iOS-DeviceSupport/tree/master/DeviceSupport

Giuseppe
la source
Pas de chance @Giuseppe, même ne fonctionne pas pour 12.4.2
IOS Dev
C'est résolu maintenant. J'ai dû créer tous les certificats pour Xcode 11 et cela a fonctionné.
Dev IOS
J'ai créé les deux certificats mais cela ne fonctionne toujours pas. J'ai également vérifié DeviceSupports et le 13.1 est là. J'utilise xcode 11.1 et teste sur l'iphone 7 avec iOS 13.1. Aucune suggestion?
Ugo Chirico
1
J'ai ajouté des modes d'arrière-plan: récupération, traitement et notification à distance, j'ai redémarré mon iPhone et puis cela a fonctionné. Vraiment, je ne comprends pas pourquoi mais maintenant ça marche
Ugo Chirico
comment la prise en charge des appareils pour le simulateur appartient à un problème lié à un appareil réel?
Vyachaslav Gerchicov
-2

Essaye ça.

  1. Supprimez votre application.
  2. Redémarrez votre téléphone.
  3. Créez et exécutez (réinstallez votre application) sur votre appareil.

Ça a marché pour moi.

kylie kim
la source