Firebase 注册令牌无效。检查令牌格式
Firebase Invalid registration token. Check the token format
这个问题已经被问过和回答过很多次了,但我还是不知道我做错了什么。从 Firebase 控制台向整个应用程序发送通知是可行的,但是如果我发送到单个令牌,我会在 firebase 控制台中收到错误消息:"Firebase Invalid registration token. Check the token format"
我正在 Iphone 设备上测试该应用程序。
- 在 https://developer.apple.com/account/ios/authkey/ 创建了新密钥
下载了 p8 文件
- 从 https://developer.apple.com/account/#/membership/
获得团队 ID
- 在 Settings/cloud 消息
下的 firebase 控制台中上传了 .p8 文件
- 在 Targets/Capabilities/Push 下的 .xcworspace 中 通知:开启
- myproject.entitlements 文件包含 APS 环境字符串开发。
注意:在 developer.apple.com 中,在 APP ID 下,如果我单击 myApp id 并向下滚动,Push Notifications Configurable & Development 显示为黄色而不是绿色。
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
当我在 Firebase 控制台中创建应用程序时,我在填写 Bundle ID 时输错了一个字母。
我从来没有想过要检查它,因为我一直在使用 Firebase 数据库服务并且所有 CRUD 操作都按预期工作,但是 Xcworkspace 中的 Bundle ID 和 firebase 应用程序的 BundleID 不完全相同.
如果来自 Google 的任何人都可以说出客户端应用程序中的 reading/writing 能够按预期工作的原因,即使 Firebase 控制台中的 bundleID 不正确,那就太好了。
我是怎么发现打字错误的?
最初我在 Firebase 控制台上传了从 developer.apple.com 下载的 p8 文件,没有显示错误。
后来,我决定使用证书(旧方法),当我尝试上传时 Apple Push Notification service SSL (Sandbox) - Development
我收到一个错误 The certificate bundleId did not match that of your app
这个问题已经被问过和回答过很多次了,但我还是不知道我做错了什么。从 Firebase 控制台向整个应用程序发送通知是可行的,但是如果我发送到单个令牌,我会在 firebase 控制台中收到错误消息:"Firebase Invalid registration token. Check the token format"
我正在 Iphone 设备上测试该应用程序。
- 在 https://developer.apple.com/account/ios/authkey/ 创建了新密钥 下载了 p8 文件
- 从 https://developer.apple.com/account/#/membership/ 获得团队 ID
- 在 Settings/cloud 消息 下的 firebase 控制台中上传了 .p8 文件
- 在 Targets/Capabilities/Push 下的 .xcworspace 中 通知:开启
- myproject.entitlements 文件包含 APS 环境字符串开发。
注意:在 developer.apple.com 中,在 APP ID 下,如果我单击 myApp id 并向下滚动,Push Notifications Configurable & Development 显示为黄色而不是绿色。
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
当我在 Firebase 控制台中创建应用程序时,我在填写 Bundle ID 时输错了一个字母。
我从来没有想过要检查它,因为我一直在使用 Firebase 数据库服务并且所有 CRUD 操作都按预期工作,但是 Xcworkspace 中的 Bundle ID 和 firebase 应用程序的 BundleID 不完全相同.
如果来自 Google 的任何人都可以说出客户端应用程序中的 reading/writing 能够按预期工作的原因,即使 Firebase 控制台中的 bundleID 不正确,那就太好了。
我是怎么发现打字错误的?
最初我在 Firebase 控制台上传了从 developer.apple.com 下载的 p8 文件,没有显示错误。
后来,我决定使用证书(旧方法),当我尝试上传时 Apple Push Notification service SSL (Sandbox) - Development
我收到一个错误 The certificate bundleId did not match that of your app