您无法使用 AppCenter 获取 Firebase id。
您有两种方法可以解决此问题:
1. 在您的应用程序中跳过使用 AppCenter 进行推送。您必须根据文档在您支持的每个平台上实现与 Firebase 的交互。如果您选择此选项,我可以分享更多提示。
2. 说服后端团队使用 AppCenter API 发送个人推送通知https://openapi.appcenter.ms/#/push/Push_Send
我知道这些解决方案中的每一个都与您的要求相矛盾。但是您必须为您的项目只选择一种推送服务,AppCenter 或 Firebase 并坚持下去。就我个人而言,我投票支持 Firebase,这是一个艰难的过程。
更新
大多数时候,Firebase 文档是您切换到 FCM 时最好的朋友。
在应用程序方面:
为 iOS和Android设置 Firebase 客户端。
根据我的经验,一些技巧:
Android:
您必须监听 Firebase InstanceID 的后代变化FirebaseMessagingService
并将其存储以备后用。与 AppCenter 一样,它在您需要时不可用。
我的活动有LaunchMode = LaunchMode.SingleTop
并且我重写了两种方法来根据应用程序到达时的状态来处理推送:void OnNewIntent(Intent intent)
和void OnPostCreate(Bundle savedInstanceState)
. 这可能不是你的情况,因为我也处理无声推送。要检查意图是否包含来自 Firebase 的推送,请运行intent?.GetStringExtra("google.message_id") != null
。
iOS:
推送通知在 iOS 模拟器上不起作用,并且在模拟器上运行时初始化步骤可能会使您的应用程序崩溃。我在 csproj 文件的配置__IOS_SIMULATOR__
旁边__IOS__
和DEBUG
下创建了常量。Debug|iPhoneSimulator
并像这样在 AppDelegate.cs 中使用它:
#if !__IOS_SIMULATOR__
new FirebaseCloudMessagingInitializer().Init();
#endif
AppDelegate
提供了两种方法来覆盖void ReceivedRemoteNotification(UIApplication application, NSDictionary userInfo)
和void DidReceiveRemoteNotification(UIApplication application, NSDictionary userInfo, Action<UIBackgroundFetchResult> completionHandler)
. 我在开始时使用了第一个,并且在没有调用它时遇到了边缘情况。所以我不得不切换到覆盖后一个。但是不要盲目地遵循这个建议,检查最适合你需要的东西。
另外,请注意https://github.com/firebase/firebase-ios-sdk/issues/2438,我不确定它是否已经修复,因为我必须处理它。如果它仍然存在,请从https://github.com/firebase/firebase-ios-sdk/issues/2438#issuecomment-469472087应用修复
在后端:
https://fcm.googleapis.com/fcm/send是所谓的遗留协议,使用 HTTP v1 代替
POST https://fcm.googleapis.com/v1/projects/project_name/messages:send。探索文档。
如何授权发送请求
如何撰写推送内容