react notification apple ios objective-c apple-push-notifications

apple - push notifications ios react native



didRegisterForRemoteNotificationsWithDeviceToken no se llamó en ios8, pero didRegister... La configuración es (11)

¡¡Me avergüenza!! O olvidé el paso más básico:

Después de seguir todas las instrucciones de procesamiento de certificados desde aquí: https://www.pluralsight.com/guides/swift/creating-ios-rich-push-notifications

La herramienta para enviar notificaciones push fue: https://github.com/noodlewerk/NWPusher

¡Que la fuerza esté con usted!

Seguí este hilo , pero el método didRegisterForRemoteNotificationsWithDeviceToken todavía no se llama:

la documentación dice:

Después de llamar al método registerForRemoteNotifications del objeto UIApplication, la aplicación llama a este método cuando el registro del dispositivo se completa con éxito

didRegisterUser aparece bien, pero no se did register notif .

Aquí está mi código en AppDelegate (la versión de la aplicación es 8.1):

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //register notif UIUserNotificationType userNotificationTypes = (UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound); UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:userNotificationTypes categories:nil]; [application registerUserNotificationSettings:settings]; return YES; } - (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings { //register to receive notifications [application registerForRemoteNotifications]; NSLog(@"didRegisterUser"); } -(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { NSLog(@"error here : %@", error);//not called } - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { /* // Store the deviceToken in the current installation and save it to Parse. PFInstallation *currentInstallation = [PFInstallation currentInstallation]; [currentInstallation setDeviceTokenFromData:deviceToken]; currentInstallation.channels = @[ @"global" ]; [currentInstallation saveInBackground]; */ NSLog(@"did register notif");//not called }

También tengo modo de fondo -> notificación remota en la lista de información.


Después de una larga excavación, descubrí que el 19 de julio de 2016 debido a algún error o actualización al final de Apple, el método didRegisterForRemoteNotificationsWithDeviceToken no se llamaría incluso si todas las condiciones como la conexión a Internet, el dispositivo y los métodos utilizados son perfectos.

Consulte este enlace para obtener la confirmación https://forums.developer.apple.com/thread/52224

Para verificar, por favor, eche un vistazo también a sus otras aplicaciones. Había desperdiciado mis varias horas, pero espero que ayude a alguien. Gracias.


En mi caso, después de iOS 9.3, creo. Si utilicé Localytics, no se llamará didRegisterForRemoteNotificationsWithDeviceToken. Tengo que eliminar esto de mi código (en ApplicationDidFinishLaunchingWithOption) [Localytics autoIntegrate: @ "xxxxx" launchOptions: launchOptions];


En mi caso, esto estaba sucediendo porque estaba representando todo el tráfico del dispositivo a través de Charles. Quitar eso lo arregló y me dio la devolución de llamada didRegister.


Ok, muchachos, acabo de pasar 11 horas seguidas depurando esto, así que espero que esta respuesta ayude a alguien.

Si tiene TODO lo dicho en hilos similares configurados correctamente y tiene el análisis de Google Firebase integrado, y didRegisterForRemoteNotificationsWithDeviceToken todavía no se llama, esto podría deberse a que está configurado de forma predeterminada en Google Firebase. Por alguna extraña razón, FIR no vuelve al método original después de enviar su token a Google. Para arreglarlo establece

FirebaseAppDelegateProxyEnabled to NO (BOOL)

en tu Info.plist.


Para mí, estaba ejecutando la aplicación en el simulador. El token de inserción no se genera para los simuladores y, por lo tanto, estaba ingresando didFailToRegisterForRemoteNotificationsWithError lugar de didRegisterForRemoteNotificationsWithDeviceToken


Por favor agregue el siguiente código, funciona para mí,

#ifdef __IPHONE_8_0 - (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings { //register to receive notifications [application registerForRemoteNotifications]; } - (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void(^)())completionHandler { //handle the actions if ([identifier isEqualToString:@"declineAction"]){ } else if ([identifier isEqualToString:@"answerAction"]){ } } #endif

Obtendrá Token del dispositivo en el siguiente método,

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

para más detalles, consulte Detalles Respuesta

Espero que esto sea de ayuda para alguien.


Tu código parece ser correcto. Como una mejora menor, podría escribir su método didRegisterUserNotificationSettings de esta manera:

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings { if (notificationSettings.types != UIUserNotificationTypeNone) { NSLog(@"didRegisterUser"); [application registerForRemoteNotifications]; } }

Puede haber un problema de configuración que causa un registro APN fallido.

  1. Asegúrese de que su perfil de aprovisionamiento contenga la entrada aps-environment

  2. Asegúrese de tener un identificador de aplicación único (una cadena sin ningún "*") establecido en su perfil de aprovisionamiento. También debe usar este identificador exacto como "Identificador de paquete" en su lista de información.

  3. Tal vez haya rechazado la función Push después de la instalación inicial; en este caso, nunca volverá a ver la alerta push en la aplicación y tendrá que volver a habilitar Push en la aplicación de configuración.

  4. Prueba con otro dispositivo.


Tuve este problema y finalmente encontré la nota en el sitio web de Apple Developer y resolví este problema:

Registro, programación y manejo de notificaciones de usuario

Nota de iOS en la sección: "Registrarse para notificaciones remotas:

Nota de iOS: si no hay disponible una conexión celular o Wi-Fi, no se llama a la aplicación: didRegisterForRemoteNotificationsWithDeviceToken: ni a la aplicación: didFailToRegisterForRemoteNotificationsWithError: método. Para las conexiones Wi-Fi, esto a veces ocurre cuando el dispositivo no puede conectarse con APN a través del puerto 5223. Si esto sucede, el usuario puede pasar a otra red Wi-Fi que no esté bloqueando este puerto o, en un iPhone o iPad, esperar hasta que el servicio de datos móviles esté disponible. En cualquier caso, el dispositivo debería poder realizar la conexión, y luego se llama a uno de los métodos de delegación.

Mi iPhone solo se conectó con Wifi, reiniciar el iPhone y volver a conectarme a WiFi AP resolvió este problema.


Para el 19 de julio de 2016: -

Según https://forums.developer.apple.com/thread/52224 , hay un problema con respecto a Sandbox APNS ... por lo que puede haber un problema desde el lado de Apple, por eso a los delegados les gusta la application:didRegisterForRemoteNotificationsWithDeviceToken: y application:didFailToRegisterForRemoteNotificationsWithError: no se llama ...

Para verificar el estado actual de APNS Sandbox este enlace ... Por ahora, de acuerdo con el estado, APNS Sandbox funciona bien y es normal ... por lo que puede haber algún otro error del lado de Apple

Así que no se preocupe si sus métodos son perfectos y los certificados son válidos. Esto es solo un problema del lado de Apple ... tan pronto como se resuelva el problema, sus métodos funcionan perfectamente (si todo está bien de su lado).

Tenga en cuenta que la producción funciona bien ... por lo que el problema se refiere solo a Sandbox APNS.


XCode 8.3.1 en adelante

Después de probar todas las opciones anteriores, si todavía no se llama al método delegado, asegúrese de que en el proyecto,

under ''Capabilities'', (next to General), - Push Notifications option is turned ON` - and under Background Modes, Remote Notifications is turned ON