Firebase FCM Instance ID равен нулю (работает приложение quickstart на реальном устройстве)

запуск демонстрационного приложения FCM на моем iPhone не работает-идентификатор Firebase Нил.

воспроизведение:

  1. pod try Firebase, и run 10: quickstart-ios/messaging/FCM.xcodeproj
  2. скопировать GoogleService-Info.plist файл в проект
  3. запустите приложение на iPhone 5s (iOS 9.3.2)
  4. принять диалоговое окно с запросом разрешения на отправку уведомлений
  5. нажмите кнопки
  6. маркер идентификатора экземпляра Нил

мой Mac имеет соответствующие сертификаты для разработки и развертывания приложений:

  1. у меня есть как дистрибутив iOS, так и подготовка к разработке iOS профили, выбранные с помощью "автоматических" настроек.
  2. у меня установлены сертификаты распространения и разработки iOS, подписанные кодом с помощью опции "автоматически: разработчик iPhone"
  3. у меня установлен сертификат SSL "Production": "Apple Push Уведомление сервис SSL (Sandbox & Production)"

Я вижу много шума в журналах, но самая значительная ошибка заключается в следующем:

Failed to fetch default token Error Domain=com.firebase.iid Code=0 "(null)"

вот полный вывод консоли:

2016-06-25 16:15:08.339 FCM[7398:4128979] Configuring the default app.
2016-06-25 16:15:08.383 FCM[7398:] <FIRAnalytics/INFO> Firebase Analytics v.3200000 started
2016-06-25 16:15:08.396: <FIRInstanceID/WARNING> FIRInstanceID AppDelegate proxy enabled, will swizzle app delegate remote notification handlers. To disable add "FirebaseAppDelegateProxyEnabled" to your Info.plist and set it to NO
2016-06-25 16:15:08.397: <FIRInstanceID/WARNING> Failed to fetch APNS token Error Domain=com.firebase.iid Code=1001 "(null)"
2016-06-25 16:15:08.403: <FIRMessaging/INFO> FIRMessaging library version 1.1.0
2016-06-25 16:15:08.413: <FIRMessaging/WARNING> FIRMessaging AppDelegate proxy enabled, will swizzle app delegate remote notification receiver handlers. Add "FirebaseAppDelegateProxyEnabled" to your Info.plist and set it to NO
2016-06-25 16:15:08.443 FCM[7398:] <FIRAnalytics/INFO> Successfully created Firebase Analytics App Delegate Proxy automatically. To disable the proxy, set the flag FirebaseAppDelegateProxyEnabled to NO in the Info.plist
2016-06-25 16:15:08.508 FCM[7398:] <FIRAnalytics/INFO> Firebase Analytics enabled
2016-06-25 16:15:08.538: <FIRInstanceID/WARNING> APNS Environment in profile: development
2016-06-25 16:15:08.848 FCM[7398:4128979] Connected to FCM.
2016-06-25 16:15:08.893: <FIRInstanceID/WARNING> Failed to fetch default token Error Domain=com.firebase.iid Code=0 "(null)"
2016-06-25 16:15:22.311: <FIRInstanceID/WARNING> Failed to fetch default token Error Domain=com.firebase.iid Code=0 "(null)"
2016-06-25 16:15:36.774 FCM[7398:4128979] Unable to connect to FCM. Error Domain=com.google.fcm Code=2001 "(null)"
2016-06-25 16:15:40.552 FCM[7398:4128979] Subscribed to news topic
2016-06-25 16:15:43.100 FCM[7398:4128979] InstanceID token: (null)
2016-06-25 16:15:49.036: <FIRInstanceID/WARNING> Failed to fetch default token Error Domain=com.firebase.iid Code=0 "(null)"
2016-06-25 16:16:31.022: <FIRInstanceID/WARNING> Failed to fetch default token Error Domain=com.firebase.iid Code=0 "(null)"
2016-06-25 16:17:32.976: <FIRInstanceID/WARNING> Failed to fetch default token Error Domain=com.firebase.iid Code=0 "(null)"
2016-06-25 16:17:32.976: <FIRInstanceID/WARNING> Failed to retrieve the default GCM token after 5 retries
2016-06-25 16:19:10.662 FCM[7398:4128979] InstanceID token: (null)
2016-06-25 16:19:10.980: <FIRInstanceID/WARNING> Failed to fetch default token Error Domain=com.firebase.iid Code=0 "(null)"
2016-06-25 16:19:10.981: <FIRInstanceID/WARNING> Failed to retrieve the default GCM token after 5 retries

7 ответов


попробуйте обновить Firebase / Core до v3.4.4, он исправил непредвиденные ошибки для меня. В противном случае типичные исправления:

  • включение Push Notifications согласно приложения Capabilities
  • избежать вызова unregisterForRemoteNotifications. После этого вызова, вы больше не можете зарегистрировать устройства для push-уведомлений.
  • задание FirebaseAppDelegateProxyEnabled to NO в вашей информации.plist файл. Я думаю, что есть ошибки с их методом swizzling.
  • вызов [[FIRMessaging messaging] setAPNSToken:deviceToken type:FIRInstanceIDAPNSTokenTypeUnknown] в методе didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

Я просто запустил тот же код на симуляторе (iPhone 5, iOS 9.3), и я получаю токен без каких-либо проблем.

Я вижу много одинаковых предупреждений, хотя...

2016-06-25 16:38:31.353 FCM[2546:42455] Configuring the default app.
2016-06-25 16:38:32.561 FCM[2546:] <FIRAnalytics/INFO> Firebase Analytics v.3200000 started
2016-06-25 16:38:32.833 FCM[2546:] <FIRAnalytics/INFO> Successfully created Firebase Analytics App Delegate Proxy automatically. To disable the proxy, set the flag FirebaseAppDelegateProxyEnabled to NO in the Info.plist
2016-06-25 16:38:32.901: <FIRInstanceID/WARNING> FIRInstanceID AppDelegate proxy enabled, will swizzle app delegate remote notification handlers. To disable add "FirebaseAppDelegateProxyEnabled" to your Info.plist and set it to NO
2016-06-25 16:38:32.928: <FIRInstanceID/WARNING> Failed to fetch APNS token Error Domain=com.firebase.iid Code=1001 "(null)"
2016-06-25 16:38:32.971: <FIRMessaging/INFO> FIRMessaging library version 1.1.0
2016-06-25 16:38:33.189: <FIRMessaging/WARNING> FIRMessaging AppDelegate proxy enabled, will swizzle app delegate remote notification receiver handlers. Add "FirebaseAppDelegateProxyEnabled" to your Info.plist and set it to NO
2016-06-25 16:38:51.094: <FIRInstanceID/WARNING> Failed to fetch APNS token Error Domain=NSCocoaErrorDomain Code=3010 "REMOTE_NOTIFICATION_SIMULATOR_NOT_SUPPORTED_NSERROR_DESCRIPTION" UserInfo={NSLocalizedDescription=REMOTE_NOTIFICATION_SIMULATOR_NOT_SUPPORTED_NSERROR_DESCRIPTION}
2016-06-25 16:38:51.096: <FIRInstanceID/WARNING> Failed to fetch APNS token Error Domain=NSCocoaErrorDomain Code=3010 "REMOTE_NOTIFICATION_SIMULATOR_NOT_SUPPORTED_NSERROR_DESCRIPTION" UserInfo={NSLocalizedDescription=REMOTE_NOTIFICATION_SIMULATOR_NOT_SUPPORTED_NSERROR_DESCRIPTION}
2016-06-25 16:38:51.140 FCM[2546:42883] CFNetwork SSLHandshake failed (-9806)
2016-06-25 16:38:51.141 FCM[2546:42883] NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9806)
2016-06-25 16:38:51.460 FCM[2546:42455] Connected to FCM.
2016-06-25 16:38:56.709 FCM[2546:42455] InstanceID token: fgbPv5tnsPk:APA91bHUWOmuLmd4UkLXcp3Lysp92fH6bOb7tfmbjHehFOt_NPnc6tnMk-7YT51VASkk-dyHZAl01QRcedwqGUhHMiIXeV_xknBXppncu0WyjKLYhaVQ08bYKNZ5M1CuSjtk9l0HPyJX
2016-06-25 16:38:56.711 FCM[2546:42455] Unable to connect to FCM. Error Domain=com.google.fcm Code=2001 "(null)"
2016-06-25 16:38:57.505 FCM[2546:] <FIRAnalytics/INFO> Firebase Analytics enabled
2016-06-25 16:40:03.845 FCM[2546:42455] Unable to connect to FCM. Error Domain=com.google.fcm Code=2001 "(null)"
2016-06-25 16:40:06.534 FCM[2546:42455] InstanceID token: fgbPv5tns9......

а также установка сертификатов APNS SSL на вашем компьютере dev, вам также необходимо загрузить их в консоль Firebase!

https://console.firebase.google.com/project/your-project-name-here/settings/cloudmessaging


проблема была связана с моим использованием сертификата SSL "Production" вместо сертификата "Development". Установка, казалось, все исправила.

Я ошибочно предположил, что обе версии разработки и производства будут обрабатываться сертификатом "Apple Push Notification service SSL (Sandbox & Production)". Это может быть так для родных APNs, но это не работает для Firebase.


Если вам когда-либо приходилось запускать эту команду:

[[UIApplication sharedApplication] unregisterForRemoteNotifications],

ваше приложение не сможет зарегистрироваться для удаленных уведомлений.

registerusernotificationsettings не работают после использования unregisterForRemoteNotifications

вам нужно удалить приложение, чтобы заставить его работать снова...


для меня, если это произошло, когда я не использую FIRAuth до получения значений из Firebase.

FIRAuth.auth()?.signIn(withEmail: "test1@gmail.com", password: "123456", completion: { (user, error) in
if(error != nil){
    print(error)
    return
}


let ref = FIRDatabase.database().reference(fromURL: "https://firdemo-84b6b.firebaseio.com/").child("users")

ref.observe(.value, with: { (snapshot) in
    print(snapshot.key)
    print(snapshot.value)
    }, withCancel: { (error) in
        if(error != nil){
            print(error)
            return
        }
    })

})

пожалуйста, попробуйте его. И дайте мне знать, если это не сработает.


добавить APNS.p12 в Firebase на вкладке облачных сообщений

https://console.firebase.google.com/project/VBTechlabsApp(YOUR_APP_NAME)/settings/cloudmessaging