2

问:我正在将 XAMARIN 表单与 Microsoft.AppCenter 一起使用。如何使用 AppCenter API 获取 Firebase 设备 ID,以便从我的后端向我的移动客户端 (Android/IOS) 发送推送通知?

前端(要求) 1. XAMARIN Forms 2. Microsoft.AppCenter 3. Microsoft.AppCenter.Push 4. 必须使用 AppCenter 来获取 FireBase 设备 ID。5. AppCenter.GetInstallIdAsync() 不适用于我的后端。我需要 FireBaseDeviceID 6。

后端(要求) 1. 我必须使用 FireBase 的https://fcm.googleapis.com/fcm/send POST 请求进行调用。

我有一个后端服务器需要将推送直接发送到 firebase。不通过 AppCenter。对于要发送到的每个设备,我都需要 firebase 的 DeviceID。我让它为我的应用推送到所有设备。但我还需要访问通过 AppCenter 注册的特定设备。这就是为什么我需要我的前端应用程序来获取 PUSH 的 FireBase DeviceID。

4

1 回答 1

3

您无法使用 AppCenter 获取 Firebase id。
您有两种方法可以解决此问题:
1. 在您的应用程序中跳过使用 AppCenter 进行推送。您必须根据文档在您支持的每个平台上实现与 Firebase 的交互。如果您选择此选项,我可以分享更多提示。
2. 说服后端团队使用 AppCenter API 发送个人推送通知https://openapi.appcenter.ms/#/push/Push_Send
我知道这些解决方案中的每一个都与您的要求相矛盾。但是您必须为您的项目只选择一种推送服务,AppCenter 或 Firebase 并坚持下去。就我个人而言,我投票支持 Firebase,这是一个艰难的过程。

更新

大多数时候,Firebase 文档是您切换到 FCM 时最好的朋友。

在应用程序方面:

为 iOSAndroid设置 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。探索文档

如何授权发送请求

如何撰写推送内容

于 2020-02-07T21:01:53.727 回答