使用 Microsoft.AppCenter 在 Xamarin Forms 中推送通知

PUSH Notifications in Xamarin Forms with Microsoft.AppCenter

问:我在 Microsoft.AppCenter 中使用 XAMARIN Forms。如何使用 AppCenter API 获取 firebase 设备 ID,以便从我的后端向我的移动客户端 (Android/IOS) 发送推送通知?

前端(要求) 1.XAMARIN 表格 2. Microsoft.AppCenter 3. Microsoft.AppCenter.推 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。

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

已更新

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

应用端:

正在设置 Firebase 客户端for iOS and for Android

我的一些技巧:

Android:
您必须监听 FirebaseMessagingService 的后代中的 Firebase InstanceID 更改并将其存储以备后用。它不像 AppCenter 那样在您需要时可用。

我的 activity 有 LaunchMode = LaunchMode.SingleTop,我重写了两种方法来处理推送,具体取决于到达时的应用程序状态:void OnNewIntent(Intent intent)void OnPostCreate(Bundle savedInstanceState)。这可能不是你的情况,因为我也处理静默推送。检查意图是否包含来自 Firebase 的推送 运行 intent?.GetStringExtra("google.message_id") != null.

iOS:
推送通知在 iOS 模拟器上不起作用,当在模拟器上 运行 时,初始化步骤可能会使您的应用程序崩溃。我在 csproj 文件的 Debug|iPhoneSimulator 配置下的 __IOS__DEBUG 旁边创建了 __IOS_SIMULATOR__ 常量。并像这样在 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. Explore documentation.

如何authorize send request

如何compose push content