No se ha podido get la notificación APNS Firebase

Para Swift3 / iOS10, vea este enlace:

ios10, Swift 3 y Firebase Push Notifications (FCM)

Estoy intentando usar la Firebase para notifications y la he integrado exactamente como se describe en los documentos. Pero no entiendo por qué no funciona. Cuando construyo mi proyecto veo esta línea:

2016-05-25 16:09:34.987: <FIRInstanceID/WARNING> Failed to fetch default token Error Domain=com.firebase.iid Code=0 "(null)" 

Esta mi AppDelegate:

  func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { FIRApp.configure() FIRDatabase.database().persistenceEnabled = true var service: DataService = DataService() service.start() registerForPushNotifications(application) application.registerForRemoteNotifications() return true } func registerForPushNotifications(application: UIApplication) { let notificationSettings = UIUserNotificationSettings( forTypes: [.Badge, .Sound, .Alert], categories: nil) application.registerUserNotificationSettings(notificationSettings) } func application(application: UIApplication, didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings) { if notificationSettings.types != .None { application.registerForRemoteNotifications() } } func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { let tokenChars = UnsafePointer<CChar>(deviceToken.bytes) var tokenString = "" for i in 0..<deviceToken.length { tokenString += String(format: "%02.2hhx", arguments: [tokenChars[i]]) } FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: FIRInstanceIDAPNSTokenType.Unknown) print("Device Token:", tokenString) } func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) { // Print message ID. print("Message ID: \(userInfo["gcm.message_id"]!)") // Print full message. print("%@", userInfo) } 

1.Set Observer de notificación en el método didFinishLaunchingWithOptions

2.Y Establezca el método tokenRefreshNotification y obtenga Token en este método.

Vea abajo el Código

 import Firebase import FirebaseMessaging override func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { FIRApp.configure() NotificationCenter.default.addObserver(self, selector: #selector(self.tokenRefreshNotification(notification:)), name: NSNotification.Name.firInstanceIDTokenRefresh, object: nil) } // NOTE: Need to use this when swizzling is disabled public func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: FIRInstanceIDAPNSTokenType.Sandbox) } func tokenRefreshNotification(notification: NSNotification) { // NOTE: It can be nil here let refreshedToken = FIRInstanceID.instanceID().token() print("InstanceID token: \(refreshedToken)") connectToFcm() } func connectToFcm() { FIRMessaging.messaging().connectWithCompletion { (error) in if (error != nil) { print("Unable to connect with FCM. \(error)") } else { print("Connected to FCM.") } } } public func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) { print(userInfo) } 

Yo también tuve el mismo problema y nada funcionó para mí. Pero todo lo que tienes que hacer es ir a tu console de firebase y luego encontrar tu proyecto y pasar a su configuration, allí verifica su pestaña de postría en la nube y carga tu certificate .p12 en eso.

¡Eso es! feliz encoding 🙂

1 – ¿Ha configurado correctamente sus certificates como se especifica en la documentation de Google (no recordaré el process aquí, es bastante largo …)? ( https://firebase.google.com/docs/cloud-messaging/ios/certs#configure_an_app_id_for_push_notifications )

2 – He tenido algunas dificultades al configurar FCM. Una vez que pensé que todo estaba bien, pero las notifications aún no funcionaban, decidí eliminar completamente la aplicación del teléfono, limpiar mi carpeta de compilation y volver a instalar todo. Después de eso, estaba funcionando.

3 – La aplicación estaba recibiendo notifications, pero todavía estaba recibiendo el post "Failed to get token default …". Desapareció después de un time. ¡No me preguntes por qué!

Esta no es realmente una respuesta adecuada, solo comparto mi experiencia porque sé que configurar notifications no es fácil y cada pista es bienvenida. Entonces, tal vez esta puede ayudar. Saludos

Después de probar todo lo anterior (y cualquier cosa que pudiera encontrar en otro lado), lo que resuelve el problema para mí es moverme

 let token = FIRInstanceID.instanceID().token() 

Se llama al presionar un button y no al cargar la aplicación.

Sé que probablemente no sea la solución más elegante, pero es lo suficientemente buena como para depurarla. Estoy adivinando que el token no está disponible de inmediato por el server, y lleva time generar.

Las respuestas anteriores cubren la mayor parte del problema, pero tuve el mismo problema y encontré la siguiente información útil:

  1. Firebase puede 'rotar' (cambiar) el token de FCM de un usuario en cualquier momento. Esta es la ID de 128 caracteres que su server usará para enviar la notificación push al dispositivo.

  2. Los documentos de Firebase dicen que la mejor práctica es usar un delegado para supervisar los cambios con el método de callback de delegado:

     - (void)messaging:(nonnull FIRMessaging *)messaging didRefreshRegistrationToken:(nonnull NSString *)fcmToken 

[Obj – C]

 func messaging(_ messaging: Messaging, didRefreshRegistrationToken fcmToken: String) 

[Rápido]

El método delegado debe invocarse en cada cambio, en ese momento puede actualizar el logging en su server.

  1. Lamentablemente, eso no funcionaba para mí, tenía un delegado pero no se invocaba la callback. Así que tuve que recurrir a la actualización manual del token en cada lanzamiento de la aplicación (sugerido por @micheal chein arriba) de la siguiente manera:

     NSString *deviceToken = [FIRInstanceID instanceID].token; // Send this to your server 

    [Obj-C]

     let token = FIRInstanceID.instanceID().token() // Send this to your server 

    [Rápido]

** Importante: actualice el token después de un retraso (20-25 s), ya que la rotation a veces solo puede reflejar después de algún time. Puede usar un timer para esto.

  1. Después de esto, sigo recibiendo el post de advertencia / error de APNS:

     2017-06-06 09:21:49.520: <FIRInstanceID/WARNING> Failed to fetch APNS token Error Domain=com.firebase.iid Code=1001 "(null)" 

PERO , las notifications push funcionan todas las veces sin falta. Entonces, creo que ese post de logging está un poco apagado (posiblemente equivocado). Si puede get la opción 2 para que trabaje para usted, ¡definitivamente haga eso!

FCM estaba trabajando para mí y luego se detuvo. Hice lo que sugirió Rabs G. y eliminé la aplicación e instalé de nuevo y las notifications comenzaron a funcionar de nuevo.