No obtener el token del dispositivo APNS en ios 13

14

Tengo un problema relacionado con el token del dispositivo APNS. Antes estaba usando Xcode 10.2 e iOS 12.1. En este momento solía obtener el token del dispositivo en el método delegado

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

Me estoy registrando para APNS como este y estaba funcionando bien.

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

Ahora, cuando instalo iOS 13 en mi dispositivo iPhone y uso Xcode 11, no se llama al método delegado didRegisterForRemoteNotificationsWithDeviceToken. Incapaz de entender este problema. Ya he investigado sobre esto, sé que hay algunos cambios en la obtención de tokens del método delegado, pero en mi caso ni siquiera se llama al método delegado. Nuevamente funciona bien para iOS 12.

IOS Dev
fuente
Está resuelto ahora. Tuve que crear todos los certificados para Xcode 11 desde el portal del desarrollador y funcionó.
IOS Dev
@IOSDev Documente lo que hizo. Me encuentro con lo mismo ahora; Hay buen karma para tener aquí, creo.
Darren Black
1
¿Encontraste alguna solución para esto? Estoy corriendo con el mismo problema.
Aman.Samghani
1
@ Aman.Samghani: SÍ, no llega la primera vez cuando se genera una alerta para la Notificación Push. Tuve que volver a llamar al mismo código del registro de notificaciones push y luego obtuve el token del dispositivo. Así que en dos o tres intentos obtuve un token.
IOS Dev

Respuestas:

15

Simplemente reinicie su iPhone. Es tan simple como eso y en el 90% de los casos resolverá su problema.

Aleksandr Honcharov
fuente
1
Deseo leer este comentario antes. Se desperdició 5 horas ++ para depurar y mirar locamente el perfil, etc.
zuyao88
1
Trabaja para mí, iOS 13.3.1
Jhonattan
es algo extraño, pasé 3 horas averiguando qué pasa,
fakiho
2

Inicie sesión en https://appleid.apple.com/ , luego abra la url " https://developer.apple.com/account/ios/identifier/bundle " o " https://developer.apple.com/account/resources / certificados / lista ".

Primero, cree dos nuevos certificados: (1) versiones de desarrollo de Apple Development Sign de sus aplicaciones iOS, macOS, tvOS y watchOS. Para usar en Xcode 11 o posterior. (2) Distribución de Apple Firme sus aplicaciones para enviarlas a la App Store o para su distribución Ad Hoc. Para usar con Xcode 11 o posterior.

Luego busque el menú "Identificadores" a través de la URL " https://developer.apple.com/account/resources/identifiers/list ". Edite los identificadores de su aplicación, asegúrese de que el certificado SSL de desarrollo y el certificado SSL de producción se agreguen a las notificaciones push.

A continuación, abra el menú "Perfiles" a través de la URL " https://developer.apple.com/account/resources/profiles/list ". Asegúrese de que los certificados como tipo de distribución para los que se utilizará en Xcode 11 o posterior, y guarde

Por último, descargue el archivo de perfil de aprovisionamiento y los archivos de certificados de CA creados en su MAC, que se agregarán a XCode y a la aplicación de cadena de claves haciendo doble clic en los archivos por separado.

Además, recuerde reiniciar su teléfono celular y asegúrese de haber configurado correctamente la notificación remota.

Dengshan Tian
fuente
1

También enfrenté el mismo problema. Intenté muchos escenarios. Obtuve el éxito después de hacer los siguientes pasos:

  1. Dispositivo reiniciado
  2. Llamado el registerForRemoteNotifications método en el hilo principal.

En mi caso, estaba obteniendo un token de dispositivo, pero hay un retraso en la respuesta (creo que debido al registro de notificaciones remotas en un hilo de fondo). Pero después de moverse [[UIApplication sharedApplication] registerForRemoteNotifications]en el hilo principal, todo funciona bien.

Aquí está mi código:

    [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];
            });
        }
    }];

Espero que esto ayude.

Kirti Nikam
fuente
no funciona en absoluto
Vyachaslav Gerchicov
0

Acabo de resolver este problema de esta manera siguiendo los pasos a continuación.

Agregue un poco de impresión en el método didRegisterForRemoteNotificationsWithDeviceToken y mantenga los dispositivos conectados.

  1. Fue a las capacidades de destino.
  2. Desactiva la notificación push
  3. Compila y ejecuta la aplicación en el dispositivo y espera.
  4. Luego verifique la consola que recibió el mensaje de error de notificación de inserción fallida.
  5. Deja de ejecutar la aplicación.
  6. Encienda la Notificación Push nuevamente.
  7. Vaya a https://developer.apple.com/ Elija Cuenta -> Certificados, identificadores y seleccione su proyecto ProvisionalProfiles -> Keys -> haga clic en editar y guarde después de descargar el perfil provisional y haga doble clic en él.
  8. Compila y ejecuta la aplicación en el dispositivo.
  9. Entonces está funcionando bien.

    Espero que esto ayude a alguien.

Gangireddy Rami Reddy
fuente
-2

Está relacionado con la falta de DeviceSupport en su instalación de XCode, para la versión de plataforma utilizada por su dispositivo de implementación.

En mi caso, faltaba la plataforma 13.1. Para resolver, simplemente agregue DeviceSupports en la carpeta

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

Puede descargar DeviceSupport faltante desde: https://github.com/iGhibli/iOS-DeviceSupport/tree/master/DeviceSupport

Giuseppe
fuente
Sin suerte @Giuseppe, incluso no funciona para 12.4.2
IOS Dev
Está resuelto ahora. Tuve que crear todos los certificados para Xcode 11 y funcionó.
IOS Dev
Creé ambos certificados pero aún no funciona. También busqué DeviceSupports y el 13.1 está ahí. Estoy usando xcode 11.1 y estoy probando en iPhone 7 con iOS 13.1. ¿Alguna sugerencia?
Ugo Chirico
1
Agregué modos de fondo: búsqueda, procesamiento y notificación remota, reinicié mi iphone y luego funcionó. Realmente no entiendo por qué, pero ahora funciona
Ugo Chirico
¿Cómo el soporte del dispositivo para el simulador pertenece a un problema relacionado con un dispositivo real?
Vyachaslav Gerchicov
-2

Prueba esto.

  1. Elimina tu aplicación.
  2. Reinicia tu teléfono.
  3. Compila y ejecuta (reinstala tu aplicación) en tu dispositivo.

Funcionó para mi.

kylie kim
fuente