我正在使用Firebase Cloud Messaging将推送消息传递给我的iOS应用程序。 我的FCM设置包括一个Firebase项目和多个Firebase应用程序:
FB Project
App1 Android
App1 iOS
App2 Android
App2 iOS
...
现在的问题是,发送到我的一个iOS应用程序的FCM消息最终被另一个iOS应用程序接收(发送到App1 iOS - App2 iOS接收消息)。
为了调试此问题,我遵循了这个出色的调试指南:https://firebase.googleblog.com/2017/01/debugging-firebase-cloud-messaging-on.html。
我发现:
1. 直接通过APNS传递消息正常工作(请参见第4节); 2. 通过cURL传递消息的FCM会将消息发送到随机应用程序(请参见第5节)。
然后我意识到,我设备上的两个客户端应用程序具有相同的Firebase设备令牌。因此,Firebase似乎不能在令牌级别上区分应用程序。 尽管如此,我仍然期望消息将被所有iOS应用程序接收而不是随机的一个。
问题1:这是Firebase的预期行为吗?
现在,在真实的应用程序中,我通过注册不同的通道来针对不同的应用程序,添加应用程序标识符前缀,如下所示:
- (void)application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
[[FIRMessaging messaging] subscribeToTopic:@"/topics/app1-news"]];
}
向该频道发送信息会产生随机结果,包括:
- 信息被目标应用(App1)收到
- 信息被其他应用(例如App2)收到
- 信息被多个应用(App1、App2等)收到
- 一个应用(如App2)收到多次信息
- 信息根本没有被接收
问题2:我该如何做才能做对?