重新提交这个问题是因为我们已经取得了相当大的进展,但还没有完全解决。自 2021 年以来一直在我的 Android 应用程序中成功使用此库和功能
com.microsoft.azure:notification-hubs-android-sdk-fcm:1.1.4
registerTemplate创建GcmTemplateRegistrationDescription和GcmRegistrationIdfine
需要创建 FcmV1TemplateRegistration 和 FcmV1RegistrationId 因此更新至 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 Id 和 PnsHandle 都匹配并识别 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 不需要应用程序本身或服务器进程中的模板。
问题:我通过通知中心发送的模板出了什么问题..?
尝试将有效负载更改为
data
位于 android
字段之外的位置。您想要发送到手机进行处理的任何变量都需要位于 data
字段内。我也会放弃fcm_options
。我们的有效负载结构如下:
{
"message": {
"android":{
"priority":"high"
},
"data": {
“message”:””,
“title”:””,
“datafield”:””,
}
}
}