sonidos pantalla notificaciones historial centro bloqueada activar ios push-notification ios10

pantalla - Problema de notificación push con iOS 10



notificaciones push iphone instagram (6)

En iOS, la aplicación se acerca al cliente para obtener autorización para recibir advertencias UIApplication llamando a registerUserNotificationSettings: estrategia para la aplicación UIApplication .

La aplicación llama a registerForRemoteNotifications: técnica para UIApplication (iOS) o la estrategia registerForRemoteNotificationTypes: de NSApplication (OS X).

La aplicación ejecuta la application:didRegisterForRemoteNotificationsWithDeviceToken: técnica para UIApplicationDelegate (iOS) o NSApplicationDelegate (OS X) para obtener el token de dispositivo único producido por el beneficio push.

La aplicación ejecuta la application:didFailToRegisterForRemoteNotificationsWithError: técnica para UIApplicationDelegate (iOS) o NSApplicationDelegate (OS X) para obtener un error si la inscripción fracasó.

Desarrollé una aplicación en la que implementé la notificación push. Actualmente es en vivo en la tienda de Apple. Hasta iOS 9 push funciona bien, pero después de iOS 10 no funciona.

¿Cuál es el problema con el código?


La versión rápida 3 del código @Ashish Shah es:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { //notifications if #available(iOS 10.0, *) { let center = UNUserNotificationCenter.current() center.delegate = self center.requestAuthorization(options: [.sound, .alert, .badge]) { (granted, error) in if error == nil{ UIApplication.shared.registerForRemoteNotifications() } } } else { // Fallback on earlier versions } return true } @available(iOS 10.0, *) func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { } @available(iOS 10.0, *) func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { }


No olvide que, cuando realice la prueba, debe usar la dirección de sandbox para que sus notificaciones funcionen.


Para iOS 10 con xCode 8 GM.

He resuelto mi problema con los siguientes pasos con xCode 8 GM para iOS 10:

1) En los objetivos, en Capacidades, habilite las notificaciones automáticas para agregar derechos de notificaciones automáticas.

2) Implemente UserNotifications.framework en su aplicación. Importe UserNotifications.framework en su AppDelegate.

#import <UserNotifications/UserNotifications.h> @interface AppDelegate : UIResponder <UIApplicationDelegate,UNUserNotificationCenterDelegate> @end

3) En el método didFinishLaunchingWithOptions, asigne UIUserNotificationSettings e implemente UNUserNotificationCenter delegado.

#define SYSTEM_VERSION_GRATERTHAN_OR_EQUALTO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ if(SYSTEM_VERSION_GRATERTHAN_OR_EQUALTO(@"10.0")){ UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; center.delegate = self; [center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error){ if( !error ){ [[UIApplication sharedApplication] registerForRemoteNotifications]; } }]; } return YES; }

4) Ahora finalmente implemente estos dos métodos de delegado.

// ============ Para iOS 10 =============

-(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler{ //Called when a notification is delivered to a foreground app. NSLog(@"Userinfo %@",notification.request.content.userInfo); completionHandler(UNNotificationPresentationOptionAlert); } -(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler{ //Called to let your app know which action was selected by the user for a given notification. NSLog(@"Userinfo %@",response.notification.request.content.userInfo); }

Mantenga el código tal como lo está utilizando para iOS 9, solo agregue líneas de código para admitir la notificación Push para iOS 10 utilizando UserNotifications.framework.


Todo funcionaba bien antes de iOS 10, en mi caso, solo la configuración de capacidades causa este problema.

Debe estar activado para la notificación push.


Tuve un problema con las notificaciones push silenciosas de iOS 10. En iOS9 y versiones anteriores, el envío de una notificación push que tenía campos de datos adicionales pero tenía un atributo aps vacío en los datos funcionó bien. Pero en iOS10, una notificación push con un atributo aps vacío no alcanza el método delegado de la aplicación didReceiveRemoteNotification, lo que significa que todas mis notificaciones push silenciosas (notificaciones que solo utilizamos internamente para activar acciones mientras la aplicación está abierta) dejaron de funcionar en iOS10.

Pude solucionar esto sin enviar una actualización a mi aplicación agregando al menos un atributo a la parte aps de la notificación push, en mi caso, simplemente agregué la badge: 0 y mis notificaciones push silenciosas comenzaron a funcionar nuevamente en iOS 10. I ¡Espero que esto ayude a alguien más!