didRegisterForRemoteNotificationsWithDeviceToken no se invocó en ios8, pero didRegister … Settings is

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 finaliza correctamente

didRegisterUser aparece bien, pero no 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 el modo de fondo -> notificación remota en el info.plist.

Tu código parece ser correcto. Como una mejora menor, podrías escribir tu método didRegisterUserNotificationSettings de la siguiente 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úrate de que tu perfil de aprovisionamiento contenga la entrada aps-environment

  2. Asegúrese de que tiene 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 Info.plist

  3. Tal vez hayas rechazado la función Push después de la instalación inicial; en este caso, nunca más volverás a ver la alerta push en la aplicación y tendrás que habilitar Push in the settings app nuevamente.

  4. Prueba con otro dispositivo.

Después de una larga excavación encontré 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 invocaría aunque todas las condiciones, como la conexión a Internet, el Dispositivo y los métodos utilizados fueran perfectos.

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

Para verificar, echa un vistazo a tus otras aplicaciones también. Había desperdiciado mis muchas horas pero espero que ayude a alguien. Gracias.

Para el 19 de julio de 2016: –

Según el formulario de Apple Developer , hay un problema con respecto a Sandbox APNS … así que puede haber un problema del lado de la manzana, por eso los delegates application:didRegisterForRemoteNotificationsWithDeviceToken: y la application:didFailToRegisterForRemoteNotificationsWithError: no se llama …

Para verificar el estado actual de APNS Sandbox, este enlace … Por ahora, de acuerdo con el estado APNS Sandbox está funcionando bien y es normal … por lo que puede haber algún otro error del lado de la manzana

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 solucione el problema, tus métodos funcionarán perfectamente (si todo está bien por tu parte).

Tenga en cuenta que Production está funcionando bien … por lo que el problema está relacionado solo con Sandbox APNS.

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

Registro, progtwigción y manejo de notificaciones de usuario

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

iOS Nota: si una conexión celular o Wi-Fi no está disponible, ni la aplicación: didRegisterForRemoteNotificationsWithDeviceToken: method ni la aplicación: didFailToRegisterForRemoteNotificationsWithError: se llama al método. En el caso de las conexiones Wi-Fi, esto ocurre cuando el dispositivo no se puede conectar con APN a través del puerto 5223. Si esto sucede, el usuario puede moverse 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 hacer la conexión, y luego se llama a uno de los métodos de delegación.

Mi iPhone solo se conectó a Wifi, reinicié iPhone y me conecté de nuevo a WiFi AP resolvió este problema.

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

XCode 8.3.1 en adelante

Después de probar todas las opciones anteriores, si aún no se llama al método de 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 

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

enter image description here

Después de seguir todos los certificados, procese las instrucciones 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!

Por favor agregue el código a continuación, 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ás 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.

Ok, muchachos, acabo de pasar 11 horas seguidas depurando esto, así que con suerte, esta respuesta ayudará a alguien.

Si tienes TODO lo dicho en subprocesos similares configurados correctamente y tienes integrado el análisis de Firebase de Google, y el método didRegisterForRemoteNotificationsWithDeviceToken aún no se llama, esto podría deberse a que se ha creado automáticamente en Firebase de Google. Por alguna extraña razón, FIR no regresa al método original después de que envía su token a Google. Para arreglarlo

  FirebaseAppDelegateProxyEnabled to NO (BOOL) 

en su Info.plist.