我收到来自firebase的消息,要求通知苹果推送通知。在firebase中,我有苹果推送通知密钥的证书,与Firebase中的Xcode项目中从Apple Developer中提取的ID相同。
但我不知道为什么会发生这种情况,我收到了此错误,它在消息传递扩展中注册了两个令牌:
extension AppDelegate : MessagingDelegate {
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {}}
撷取寄件者识别码'########'的FCM Token之前,未设定APNS装置Token。将不会透过APNS传送此FCM Token的通知。请务必在设定APNS装置Token之后,重新撷取FCM Token。
添加了AppDelegate中的内容
import Firebase
import MasivPushIosSdk
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate{
var firebaseToken: String = ""
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
FirebaseApp.configure()
self.registerForFirebaseNotification(application: application)
Messaging.messaging().delegate = self
return true
}
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
Messaging.messaging().apnsToken = deviceToken
}
func registerForFirebaseNotification(application: UIApplication) {
if #available(iOS 10.0, *) {
// For iOS 10 display notification (sent via APNS)
UNUserNotificationCenter.current().delegate = self
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
options: authOptions,
completionHandler: {_, _ in })
} else {
let settings: UIUserNotificationSettings =
UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
application.registerUserNotificationSettings(settings)
}
application.registerForRemoteNotifications()
}
}
extension AppDelegate: MessagingDelegate, UNUserNotificationCenterDelegate {
//MessagingDelegate
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {
self.firebaseToken = fcmToken!
print("Firebase token: \(fcmToken)")
}
//UNUserNotificationCenterDelegate
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
print("APNs received with: \(userInfo)")
}
}
5条答案
按热度按时间j2cgzkjk1#
这是一个仅用于模拟器的日志。您可以安全地忽略它。您得到此日志的原因是Firebase尝试创建从FCM令牌到APNS令牌的Map,以便将APNS消息发送到iOS设备。但是,模拟器上没有APNS令牌,因此Map失败。
尝试在实际设备上测试它,看看是否仍然会出现错误。
webghufk2#
我在这个问题上花了很长时间。我终于让它与远程消息一起工作了。
它可以由几个主要原因引起。
1.(如果您使用的是React Native)确保GoogleService-Info.plist信息指向Javascript代码所拥有的同一Firebase项目。
1.(如果您使用的是React Native)将其放入componentDidMount()中
1.最后,确保你的设备可以正常连接到互联网。我被困在这里,我的iPhone X有2个3酒吧,但没有连接到互联网,而使用相同的wifi作为我的开发笔记本电脑。我的笔记本电脑没有问题,所以我认为我的手机连接也可以。一天多的时间浪费了,因为我的假设。所以,只要仔细检查你的手机的连接工作。
如需更多信息:A)如果在本机工作:https://firebase.google.com/docs/cloud-messaging/ios/client B)如果使用React原生:https://rnfirebase.io/messaging/usage/ios-setup
注:不要混合A和B。一个用于本机IOS,另一个用于本机React。
我添加了React Native,因为我遇到了你的问题,在我的搜索,而使用它。
dm7nw8vv3#
请确保未重命名身份验证密钥文件
在我的例子中,我已经将auth密钥文件重命名为其他文件,这就导致了这个问题。我尝试将它重命名为默认格式
AuthKey_<KeyID>.p8
,一切都开始工作了。htrmnn0y4#
在我们的例子中,我们注意到它上面有一根圆木:
项目的捆绑包ID与“GoogleService-Info. plist”中的捆绑包ID不一致
于是,情况就这样了:我们的应用程序的捆绑包标识符与我们用于为Firebase项目创建iOS应用程序的捆绑包标识符不同。
使它们相同,解决了问题。
gijlo24d5#
这可能是迟到了,但错误
撷取寄件者识别码'########'的FCM Token之前,未设定APNS装置Token。将不会透过APNS传送此FCM Token的通知。请务必在设定APNS装置Token之后,重新撷取FCM Token。
为我整理了一下