这个问题之前已被多次询问和回答,但我无法弄清楚我做错了什么 . 从Firebase控制台向整个应用程序发送通知有效,但是如果我发送到单个令牌,我在firebase控制台中收到错误:“Firebase无效注册令牌 . 检查令牌格式”
我在Iphone设备上测试应用程序 .
-
在https://developer.apple.com/account/ios/authkey/创建了新密钥,下载了p8文件
-
在设置/ Cloud 消息传递下的firebase控制台中上传了.p8文件
在目标/功能/推送通知下的.xcworspace中的 -
:ON
-
myproject.entitlements文件包含APS环境字符串开发 .
注意:在developer.apple.com中,在APP ID下,如果单击myApp id并向下滚动,推送通知可配置和开发将显示为黄色而不是绿色 .
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
1 回答
当我在Firebase控制台中创建应用程序时,我在填写Bundle ID时输错了一个字母 .
我从未想过要检查它,因为我一直在使用Firebase数据库服务,并且所有CRUD操作都按预期工作,但Xcworkspace中的Bundle ID和firebase应用程序的BundleID是 not exactly 相同 .
如果来自Google的任何人都能说出客户端应用程序的读/写工作按预期工作的原因,即使在Firebase控制台中bundleID不正确,也会很棒 .
我是怎么知道错字的?
最初我在Firebase控制台上传了从developer.apple.com下载的p8文件,没有显示错误 .
后来,我决定使用证书(旧的方式),当我尝试上传
Apple Push Notification service SSL (Sandbox) - Development
时出现错误 The certificate bundleId did not match that of your app