簡體   English   中英

在 iOS (swift) 應用程序中,注冊第二個 Firebase 應用程序無法接收遠程通知

[英]In iOS (swift) app, registration of a second Firebase app can't receive remote notifications

我有兩個 Firebase 項目(在同一個帳戶上,但可能是兩個不同的帳戶)並且每個項目都有一個 iOS 應用程序注冊了相同的包 ID(因此每個.plist 文件具有不同的發件人 ID 和項目 ID,但 Bindle ID是相同的)。

當我使用FirebaseApp.configure()和應用程序的 firebase configuration.plist 文件分別為每個應用程序配置 Firebase 消息傳遞時,它有效,我可以發送 FCM 消息並且應用程序獲取它。 (這意味着 Firebase 控制台上的應用程序配置和 Apple 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>]

然后,當我使用以下 function 從我的 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 有什么用?

如果兩個 firebase 應用程序具有相同的 bunder id 和推送認證,則可以通過推送通知獲得 FCM 令牌。 因為 retrieveFCMToken 不起作用,我想你忘記在調用 retrieveFCMToken 之前為 FIRMessaging 設置 APNSToken

[FIRMessaging messaging].APNSToken = deviceToken;
[[FIRMessaging messaging] retrieveFCMTokenForSenderID:self.firstAppSenderIdString completion:^(NSString * _Nullable FCMToken, NSError * _Nullable error) {
    NSLog(@"FCM token for app1: %@ - error: %@", FCMToken, error);
}];

此外,如果默認應用未配置,FIRMessaging 將為 nil,讓第二個應用工作,您可以使用tokenWithAuthorizedEntity function。

[[FIRInstanceID instanceID] tokenWithAuthorizedEntity:self.secondAppSenderIdString scope:kFIRInstanceIDScopeFirebaseMessaging options:@{@"apns_token": deviceToken} handler:^(NSString * _Nullable token, NSError * _Nullable error) {
    NSLog(@"FCM token for app2: %@ - error: %@", token, error);
}];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM