test remote notification enable ios iphone apple-push-notifications appdelegate devicetoken

ios - enable - iPhone registerForRemoteNotificationTypes no genera un error pero no dispara el delegado que da el token del dispositivo



swift 4 enable push notifications (7)

Estoy desarrollando una aplicación para iPhone que necesita notificación push. Seguí las instrucciones para crear las certificaciones y modificar el ID de la aplicación. No estoy totalmente seguro de haberlo hecho correctamente, pero sí seguí las instrucciones. ¿Alguna idea de cómo puedo verificar si esto está bien?

Cuando ejecuté el emulador, recibí un mensaje de error que decía que el emulador no era compatible con las notificaciones push. Esto fue algo esperado.

BTW: me ha parecido esta pregunta por ahí un par de veces. Siempre parece estar con un teléfono roto en la cárcel. Mi teléfono no está en la cárcel roto.

Pero cuando depuro en el iPhone, el método didRegisterForRemoteNotificationsWithDeviceToken nunca se activa. Realmente apreciaré alguna ayuda. Mi código sigue.

-(void)applicationDidFinishLaunching:(UIApplication *)application { rootController.delegate = self; [window addSubview:rootController.view]; [window makeKeyAndVisible]; [[UIApplication sharedApplication] registerForRemoteNotificationTypes: (UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)]; } - (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { NSString *str = [NSString stringWithFormat:@"%@",deviceToken]; NSLog(str); } - (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err { NSString *str = [NSString stringWithFormat: @"Error: %@", err]; NSLog(str); }


Compruebe la configuración de su firewall.

De la respuesta de Scott K :

Si su dispositivo iOS es capaz de usar la red de datos celulares, verifique que tenga un plan de datos celulares activo. Desactive Wi-Fi en Configuración y vea si aún puede navegar por la web con Safari, por ejemplo. Por otro lado, si el servicio push está usando Wi-Fi, cualquier servidor de seguridad entre su dispositivo o computadora e Internet debe permitir el tráfico TCP desde y hacia el puerto 5223.


De acuerdo con la documentación de Apple "Solución de problemas de notificaciones automáticas" "Si no se ha delegado la aplicación de devolución de llamada: didRegisterForRemoteNotificationsWithDeviceToken: ni application: didFailToRegisterForRemoteNotificationsWithError: se llama, eso significa que esta conexión aún no se ha establecido." ... "El sistema puede no tener conexión a Internet. . modo aiplano ".

También veo este comportamiento, pero NO debido a la falta de conectividad a Internet, sino porque, como señaló IrFan, las notificaciones se deshabilitaron para la aplicación, tan pronto como habilitas las notificaciones, el método se activa.

Solución 1) NO confíe en ninguno de estos métodos de delegado que se hayan llamado. 2) Si, y cuándo, recibe una devolución de llamada de delegado, actúe en consecuencia. 3) Falta de conectividad de red, las notificaciones push están deshabilitadas para la aplicación, APS no habilitado o? hará que los delegados NO sean llamados.


Echa un vistazo a TN2265 , que tiene sugerencias para la depuración de problemas de notificación de inserción. Tuve exactamente este problema hoy y resultó que la conexión WiFi estaba apagada en el iPod Touch. Desde que dijiste que estabas trabajando desde un iPhone. Probablemente no sea eso, pero vale la pena revisar la nota técnica para ver otras posibilidades.


Enfrenté el mismo problema en el dispositivo iOS 11.3 donde no se llamaba a ninguno de los métodos de delegado. Entonces, según la documentación de Apple:

TN2265

Cuando se instala la primera aplicación con capacidad de inserción, iOS u OS X intentan establecer una conexión de red persistente con el servicio de inserción que compartirán todas las aplicaciones con capacidad de inserción en el sistema. Si no se llama a la aplicación de devolución de llamada delegada: didRegisterForRemoteNotificationsWithDeviceToken: ni application: didFailToRegisterForRemoteNotificationsWithError: esto significa que esta conexión aún no se ha establecido.

Más allá,

Esto no es necesariamente una condición de error. Es posible que el sistema no tenga conectividad a Internet en absoluto porque está fuera del alcance de las torres de telefonía móvil o puntos de acceso a Wi-Fi, o puede estar en modo avión. En lugar de tratar esto como un error, su aplicación debería continuar normalmente, deshabilitando solo la funcionalidad que se basa en las notificaciones push.

Intenté conectarme a otra red y otra vez comencé a realizar la operación de notificación de registro y ¡Voila! Entonces, supongo que hubo un problema al registrarse para recibir una notificación que no llamaba a ninguno de los métodos de delegado.


Normalmente, si nunca se llama didRegisterForRemoteNotificationsWithDeviceToken , es porque está utilizando un perfil de aprovisionamiento que no tiene APS-entitled . Si su aplicación es una aplicación de producción, debe estar firmada con un perfil de distribución para que los impulsos funcionen. Si es una aplicación de desarrollo, debe firmarla con un perfil de desarrollo.

EDITAR: También vale la pena tener en cuenta que el provisioning profile debe usar un ID de paquete explícito. Los envíos enviados a cualquier elemento firmado con un perfil comodín no se entregarán.


Si está compilando con el SDK de iOS8 + (por ejemplo, xcode 6+), los métodos de API iOS7 obsoletos se ignoran silenciosamente y no obtendrá ningún error.

Necesitas algo como esto si quieres soportar iOS7 y 8:

// Have to explicitly use the iOS8 api as the deprecated API is silently ignored on iOS8, surprisingly. if ([UIDevice currentDevice].systemVersion.intValue >= 8) { // iOS8+ API. UIUserNotificationType types = UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge; UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:types categories:nil]; [[UIApplication sharedApplication] registerUserNotificationSettings:settings]; [[UIApplication sharedApplication] registerForRemoteNotifications]; } else { // iOS7. [[UIApplication sharedApplication] registerForRemoteNotificationTypes: UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound]; }

Si tiene problemas con aps-environment ausencia de aps-environment en su perfil, al menos obtendrá una devolución de llamada de error útil con didFailToRegisterForRemoteNotificationsWithError


Tuve el mismo problema.

Para mí, era la configuración de notificación para la aplicación que tenía todo apagado.

Si en la configuración de iOS las notificaciones de la aplicación están deshabilitadas, ese método no será llamado.

Una vez que encendí un tipo de notificación, comenzó a funcionar.

Settings App->Notification Settings->[My App]