Firebase 注册令牌无效.检查令牌格式 [英] Firebase Invalid registration token. Check the token format
问题描述
这个问题已经被问过和回答过很多次了,但我无法弄清楚我做错了什么.从 Firebase 控制台向整个应用程序发送通知有效,但如果我发送到单个令牌,我会在 Firebase 控制台中收到错误消息:Firebase 注册令牌无效.检查令牌格式"
我正在 Iphone 设备上测试该应用.
- 在 解决方案
当我在 Firebase 控制台中创建应用程序时,我在填写 Bundle ID 时输错了一个字母.
我从来没有想过要检查它,因为我一直在使用 Firebase 数据库服务并且所有 CRUD 操作都按预期工作,但是 Xcworkspace 中的 Bundle ID 和 firebase 应用程序的 BundleID 不完全相同.
如果 Google 的任何人都可以说出为什么即使 Firebase 控制台中的 bundleID 不正确,从客户端应用程序读取/写入仍能按预期工作的原因,那就太好了.我是如何发现错别字的?
最初,我在 Firebase 控制台中上传了从 developer.apple.com 下载的 p8 文件,但没有显示任何错误.
后来,我决定使用证书(旧方式),当我尝试上传Apple Push Notification service SSL (Sandbox) - Development
时出现错误 证书 bundleId 与那个不匹配This questions has been asked and answered many times before, yet I can't figure out what I am doing wrong. Sending notifications to the whole app from Firebase console works, but if I send to a single token, I get error in firebase console: "Firebase Invalid registration token. Check the token format"
I am testing the app on an Iphone device.
- created new key at https://developer.apple.com/account/ios/authkey/ downloaded the p8 file
- got the Team ID from https://developer.apple.com/account/#/membership/
- uploaded the .p8 file in firebase console under Settings/cloud messaging
- in .xcworspace under Targets/Capabilities/Push Notifications : ON
- myproject.entitlements file contains APS Environment String development.
NOTE: In developer.apple.com, under APP IDs, if I click on myApp id and scroll down, Push Notifications Configurable & Development show in yellow color and not green.
Xcode version Version 8.3.3 (8E3004b), Swift 3.0 pod file pod 'Firebase', '~> 3.9.0' pod 'Firebase/Auth', '~> 3.9.0' pod 'Firebase/Database', '~> 3.9.0' pod 'Firebase/Storage' pod 'Firebase/Messaging' Using Firebase (3.9.0) Using FirebaseAnalytics (3.5.1) Using FirebaseAuth (3.0.6) Using FirebaseCore (3.4.4) Using FirebaseDatabase (3.1.0) Using FirebaseInstanceID (1.0.9) Using FirebaseMessaging (1.2.1) Using FirebaseStorage (1.0.4) Using GTMSessionFetcher (1.1.12) Using GoogleInterchangeUtilities (1.2.2) Using GoogleSymbolUtilities (1.1.2) Using GoogleToolboxForMac (2.1.3) import UIKit import Firebase import FirebaseCore import FirebaseMessaging import FirebaseInstanceID import UserNotifications @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { FIRApp.configure() NotificationCenter.default.addObserver(self, selector: #selector(self.tokenRefreshNotification(notification:)), name: NSNotification.Name.firInstanceIDTokenRefresh, object: nil) //obtain the user’s permission to show any kind of notification registerForPushNotifications() return true }//end of didFinishLaunchingWithOptions //obtain the user’s permission to show any kind of notification func registerForPushNotifications() { // iOS 10 support if #available(iOS 10, *) { UNUserNotificationCenter.current().requestAuthorization(options:[.badge, .alert, .sound]){ (granted, error) in print("Permission granted: (granted)") guard granted else {return} self.getNotificationSettings() } } // iOS 9 support else if #available(iOS 9, *){UIApplication.shared.registerUserNotificationSettings(UIUserNotificationSettings(types: [.badge, .sound, .alert], categories: nil)) self.getNotificationSettings() } // iOS 8 support else if #available(iOS 8, *) {UIApplication.shared.registerUserNotificationSettings(UIUserNotificationSettings(types: [.badge, .sound, .alert], categories: nil)) self.getNotificationSettings() } // iOS 7 support else { UIApplication.shared.registerForRemoteNotifications(matching: [.badge, .sound, .alert]) } }//end of registerForPushNotifications() //if user decliens permission when we request authorization to show notification func getNotificationSettings() { UNUserNotificationCenter.current().getNotificationSettings { (settings) in print("settings.authorizationStatus is (settings.authorizationStatus)") guard settings.authorizationStatus == .authorized else {return} UIApplication.shared.registerForRemoteNotifications() } } func tokenRefreshNotification(notification: NSNotification) { let refereshToken = FIRInstanceID.instanceID().token() print("instance ID token is (refereshToken)") prints: c-_B0W1AKX0:APA91bHBCtFhGtteH1r2y7c8gpUJpfrgDZYtncFmxZQht_wBDWk9Stdf78aMqUctKYU_OlIkmMNW-KLP68_IhdZCM2WxcN4fU1XkoIVNCGTvBogzSpgt4IkveLbK7rNX7pQTfmP72MfV connectToFcm() } func connectToFcm() { FIRMessaging.messaging().connect { (error) in if error != nil { print("unable to connect to FCM") }else { print("connected to FCM") } } } }//end of AppDelegate
解决方案When I created the app in Firebase console, I mistyped a letter when filling in the Bundle ID.
I never thought about checking it since, I had been using Firebase Database services and all CRUD operations worked as expected, but the Bundle ID in Xcworkspace and BundleID of the firebase app were not exactly the same.
It would be great if anyone from Google could say the reason why reading/writing from the client app worked as expected even though the bundleID was incorrect in Firebase console.How did I find out the typo?
Initially I uploaded in Firebase console the p8 file which was downloaded from developer.apple.com and no error was shown.
Later on, I decided to use certificates (the old way) and when I tried to uploadApple Push Notification service SSL (Sandbox) - Development
I got an error The certificate bundleId did not match that of your app这篇关于Firebase 注册令牌无效.检查令牌格式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!