web-dev-qa-db-fra.com

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

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.

12
IOS Dev

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

9

Connectez-vous https://appleid.Apple.com/ , puis ouvrez l'url " https://developer.Apple.com/account/ios/identifier/bundle " ou " https://developer.Apple.com/account/resources/certificates/list ".

Créez d'abord 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 comme 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 sur les fichiers séparément.

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

1
Dengshan Tian

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 méthode registerForRemoteNotifications 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 déménagé [[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.

1
Kirti Nikam

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

0
Giuseppe

Essaye ça.

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

Ça a marché pour moi.

0
kylie kim