Azure 通知中心 Android FCMv1 客户端 SDK - FcmV1TemplateRegistration - 无负载

问题描述 投票:0回答:1

重新提交这个问题是因为我们已经取得了相当大的进展,但还没有完全解决。自 2021 年以来一直在我的 Android 应用程序中成功使用此库和功能

com.microsoft.azure:notification-hubs-android-sdk-fcm:1.1.4

registerTemplate创建GcmTemplateRegistrationDescriptionGcmRegistrationIdfine

需要创建 FcmV1TemplateRegistrationFcmV1RegistrationId 因此更新至 2.0.0

com.microsoft.azure:notification-hubs-android-sdk:2.0.0

在设备上调用 registerTemplate 现在会在 Azure Hub 中创建 FcmV1TemplateRegistration

(首先使用 FirebaseMessaging.getInstance().getToken() 函数获取 Android 设备注册码)

   String messageTemplate = "{\"message\":{\"android\":{\"data\":{\"msgtext\":\"$(msgtext)\",\"msgsndr\":\"$(msgsndr)\"}}}}";
   String RegistrationTagTopic = "5050";
   mobile_RegistrationId = hub.registerTemplate(regid, "CAREV1", messageTemplate, RegistrationTagTopic).getRegistrationId();

注册示例:上面返回的mobile_RegistrationId是通知中心RegistrationId

<ETag>5</ETag>
<ExpirationTime>2124-06-12T05:55:24.1941413Z</ExpirationTime>
<RegistrationId>2837404...516-2</RegistrationId>
<Tags>5050</Tags>
<FcmV1RegistrationId>eZMPxd2pQBi...Uh</FcmV1RegistrationId>
<BodyTemplate><![CDATA[{"message":{"android":{"data":{"msgtext":"$(msgtext)","msgsndr":"$(msgsndr)"}}}}]]></BodyTemplate>
<TemplateName>CAREV1</TemplateName>
</FcmV1TemplateRegistrationDescription>

FCMv1 应用程序中的模板格式似乎绝对重要,因为我的应用程序在使用 {"message":{"android":{"data":{...}} 以外的任何其他格式注册时抛出异常}}

使用 Azure 通知中心 REST API 方法发送到设备标签 5050,这是我们自 2015 年以来成功使用的相同 API 调用(假设您知道如何生成授权令牌):发送模板通知,其中包含以下参数:

   ServiceBusNotification-Format = "template"
   ServiceBusNotification-Tags = "5050"
   ContentType = "application/json;charset=utf-8."
   Method = "POST"
   URI = "https://{namespace}.servicebus.windows.net/{NotificationHub}/messages/?api-version=2015-01"

通话中发布的 JSON 示例

{"message":{"android":{"data":{"msgtext":"My short message","msgsndr":"ADMIN"}}}}

设备可以正常收到通知,但没有有效负载

使用 REST API 的 &test 模式进行记录,一切看起来都正常,Reg IdPnsHandle 都匹配并识别 fcmV1Template

address    : 5050
Success : 1
Failure : 0
Appform : fcmV1Template
Reg  Id : 2837404...516-2
PnsHandle : eZMPxd2pQBi...Uh
Outcome : The Notification was successfully sent to the Push Notification System

通过 FCM/JWT 例程直接发送 (POST) 相同消息到 5050,JSON 格式略有不同;

{"message":{"topic":"5050","data":{"msgtext":"My short message","msgsndr":"ADMIN"},"android":{"priority":"high"},"fcm_options":{"analytics_label":"xyz"}}}

通知和消息有效负载是完美的(注意额外的FCM参数)并且每次都有效。当然,FCM 不需要应用程序本身或服务器进程中的模板。

问题:我通过通知中心发送的模板出了什么问题..?

android azure azure-notificationhub
1个回答
0
投票

尝试将有效负载更改为

data
位于
android
字段之外的位置。您想要发送到手机进行处理的任何变量都需要位于
data
字段内。我也会放弃
fcm_options
。我们的有效负载结构如下:

{
 "message": {
  "android":{
   "priority":"high"
  },
  "data": {
   “message”:””,
   “title”:””,
   “datafield”:””,
  }
 }
}
© www.soinside.com 2019 - 2024. All rights reserved.