我有两个Firebase项目(在同一个帐户上,也可以是两个不同的帐户),每个项目都注册了一个相同Bundle ID的iOS应用程序(因此每个.plist文件都具有不同的Sender ID和Project ID,但Bundle ID相同)。
当我单独为每个应用程序使用FirebaseApp.configure()和该应用程序的firebase配置.plist文件配置Firebase消息时,它可以工作。我可以发送FCM消息并且应用程序接收到通知。(这意味着Firebase控制台上两个应用程序的配置以及苹果APNs密钥、plist文件均有效)。
但是,如果我想要注册两个应用程序以启用多个发送者向我的应用程序发送消息,则只有被注册为__FIRAPP_DEFAULT的应用程序会接收消息。
我的配置代码如下:
当我单独为每个应用程序使用FirebaseApp.configure()和该应用程序的firebase配置.plist文件配置Firebase消息时,它可以工作。我可以发送FCM消息并且应用程序接收到通知。(这意味着Firebase控制台上两个应用程序的配置以及苹果APNs密钥、plist文件均有效)。
但是,如果我想要注册两个应用程序以启用多个发送者向我的应用程序发送消息,则只有被注册为__FIRAPP_DEFAULT的应用程序会接收消息。
我的配置代码如下:
// this is configuration for the default "__FIRAPP_DEFAULT" using the base GoogleService-Info.plist file
FirebaseApp.configure()
// This is the second app configuration
let bundle = Bundle(for: type(of: self))
let path = bundle.path(forResource: "GoogleService-Info-second-app", ofType: "plist")
let options = FirebaseOptions.init(contentsOfFile: path!)
if options != nil {
FirebaseApp.configure(name: "app2", options: options!)
}
我可以确认这两个应用程序都已经配置完好:
let apps = FirebaseApp.allApps
debugPrint(apps!)
输出:
["app2": <FIRApp: 0x1704585a0>, "__FIRAPP_DEFAULT": <FIRApp: 0x17044a9b0>]
然后,当我使用以下函数从我的AppDelegate获取令牌时:
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let d = NSData(data: deviceToken)
print(d)
Messaging.messaging().retrieveFCMToken(forSenderID: firstAppSenderIdString) { (message, error) in
print("FCM token for app1: \(message!)")
}
Messaging.messaging().retrieveFCMToken(forSenderID: secondAppSenderIdString) { (message, error) in
print("FCM token for app2: \(message!)")
}
}
我获得了两个有效的令牌:
FCM token for app1: fwjJVG2-T9Q:APA91bG8xVN9S-F4aERzh0GtcLWAqOy3dBPed0vPUE4AS_Jt4rau1bmmhvGPjfQgwBt9krdI9e91GaA04x4PXm4eW9PsG52P-Vt8yeo2woWGl3CP6zE09cT8ouRmOoWBhFfZkLbzbGul
FCM token for app2: fwjJVG2-T9Q:APA91bGggGD0YBZO5tpDqwdYKEbGX4vTSXnhwFoc_lrHbLIIWg1WE4RjTS8NYZ--TX-GkoypuEM4Plb4h41mVcP0uYjvo2dGDO3SNyuo3GrsBRb4ISzoieC_bcJZs5MibLKrET97f49j
如果我将两个应用程序都配置为自定义应用程序名称,并且没有一个应用程序使用"__FIRAPP_DEFAULT",那么即使是第一个应用程序也不会收到任何消息。
我猜想只有 "__FIRAPP_DEFAULT" 应用程序才能接收 FCM 消息。你能否确认或告诉我我的错误之处? 如果只有默认应用程序可以处理通知,那么在同一 iOS 应用程序中配置多个 Firebase 应用程序有什么用处?