Problemas para recibir notifications push en iOS10 y iOS9

Tratando de configurar notifications push para iOS10. Lo había hecho anteriormente para versiones inferiores a 10.
Lea a través de algunas guías mi configuration es así:

// Register for the defined notifications if #available(iOS 10.0, *) { let center = UNUserNotificationCenter.current() center.delegate = UIApplication.shanetworking.delegate as! AppDelegate center.requestAuthorization(options: [.alert, .badge, .sound]) { (granted, error) in if error == nil { UIApplication.shanetworking.registerForRemoteNotifications() } } } else { // Fallback on earlier versions let notificationSettings = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: [autoCancelCategory]) UIApplication.shanetworking.registerUserNotificationSettings(notificationSettings) UIApplication.shanetworking.registerForRemoteNotifications() } 

Esto se invoca en login ^ en uno de mis controlleres de vista.

Y ahora en AppDelegate , se ajusta a UNUserNotificationCenterDelegate , tengo estos methods:

 @available(iOS 10.0, *) func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { print("Got a push!") } @available(iOS 10.0, *) func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { print("Got a push!") } 

Y yo también tengo:

  func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { let settings = UserDefaults.standard settings.setValue(deviceToken, forKey: "deviceToken") } 

El token del dispositivo se carga en el server como Data , y esto ha funcionado bien para las versiones anteriores.
He comprobado que el token en el server coincida con el que está en el teléfono.
He habilitado las notifications push para todos los destinos en Capabilities , también he marcado Add the push Notifications entitlement to your entitlements file .
Sin recibir nada en absoluto a la espera.
¿Alguna idea de lo que podría estar haciendo mal aquí? ¡Cualquier puntero sería realmente apreciado!

¡Gracias!

EDIT: También noté que las notifications push no funcionan en iOS9.

¿Ha comprobado que Build Settings> Code Signing Entitlements tiene una reference al file de derechos? [AppName] .entitlements.

Y que el file de derechos contiene la información correcta:

(key: entorno APS, valor: desarrollo)

Aparte de eso, puede intentar regenerar los certificates push. Tuvimos que crear nuevos certificates para que funcionen en producción después de la actualización de iOS 10 (pero no en el entorno de sandbox).

Simplemente se dio count de que está registrando el delegado más tarde que los methods de application(_:willFinishLaunchingWithOptions:) o application(_:didFinishLaunchingWithOptions:) ).

¿Tal vez es por eso que sus methods de delegates no están siendo afectados?

Ver los documentos :

Importante

Debe asignar su object de delegado al object UNUserNotificationCenter no más tarde antes de que la aplicación termine de iniciarse. Por ejemplo, en una aplicación de iOS, debe asignarlo a la aplicación ( : willFinishLaunchingWithOptions 🙂 o a la aplicación ( : didFinishLaunchingWithOptions :).

Para responder a esto, tal vez sea útil para otros. Mi token estaba equivocado. La encoding ha cambiado con las actualizaciones recientes. Realmente busqué en todo el desbordamiento de stack para esto y entendí que tenía que convertir los Data a una String usando la base64string . Sin embargo, noté que esta cadena tenía algunos caracteres extraños como \ . Finalmente terminé haciendo una extensión de Data :

 extension Data { func hexString() -> String { return self.networkinguce("") { string, byte in string + String(format: "%02X", byte) } } } 

Esto convierte los Data al formatting correcto. Entonces, si así es como haces tu conversión, además de que todos los derechos están establecidos, restrings agregar los nuevos methods:

 @available(iOS 10.0, *) func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { print("Got a push!") } @available(iOS 10.0, *) func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { print("Got a push!") } 

y configuró el object de delegado en didFinishLaunchingWithOptions todo debería estar listo.