Vit*_*nko 13 android amazon-sns firebase-cloud-messaging notification-channel
我们的应用程序现在有targetSdkVersion 26(Android 8),该应用程序使用FCM推送通知.
由于FCM文档规定我将FCM客户端库更新为版本11.2.0:
dependencies {
compile 'com.google.firebase:firebase-messaging:11.2.0'
}
Run Code Online (Sandbox Code Playgroud)
通过此FCM客户端库更新,FCM通知开始出现在Android设备上.很好,但是当应用程序处于后台时,它是处理FCM消息的系统,因此它使用名为"Miscellaneous"的默认Android通知通道,这不是我们想要的(我们在该列表中有其他通知通道和"其他"声音混乱) ).
正如FCM文档所述,有一种方法可以为FCM消息指定默认通知通道:
(可选)在应用程序组件中,元数据元素用于设置通知的默认图标,颜色和通知通道(Android O中的新增功能).只要传入的消息没有明确设置图标,颜色或notification_channel,Android就会使用这些值.
但是没有显示代码示例(样本仅显示图标和颜色).所以我只是通过在github上使用Firebase云消息传递快速入门中的一个示例来搜索:
<meta-data
android:name="com.google.firebase.messaging.default_notification_channel"
android:value="@string/default_notification_channel_id"/>
Run Code Online (Sandbox Code Playgroud)
但它不起作用 - FCM通知仍然出现在"杂项"频道中.我在日志中看到:
W/FirebaseMessaging:AndroidManifest中缺少默认通知通道元数据.将使用默认值.
当然,我试图重新安装该应用程序.还有问题.
好吧,理想情况下,应该有一些方法在发送消息时在后端指定通知通道.允许测试发送的FCM开发控制台现在在UI中有这样的选项:
它工作正常.然而,我们的后端使用Java Amazon SNS API,我不知道该API是否允许在发送消息时指定Android通知通道(因为它是一个新的Android功能,亚马逊需要时间来采用它).因此,设置默认通知通道AndroidManifest.xml现在是一种有效的解决方法,但它不起作用.
Abd*_*san 11
依赖于此资源:https://firebase.google.com/docs/cloud-messaging/http-server-ref
这里的有效负载看起来像:
{
"to":"$device_token"
"notification":{
"title":"Title",
"body":"Here Body",
"android_channel_id":"$channel_id", // For Android >= 8
"channel_id":"$channel_id", // For Android Version < 8
"image": "https://xxxxx.com/xxxxx.jpeg"
},
"data":{},
"priority":"normal"
}
Run Code Online (Sandbox Code Playgroud)
li2*_*li2 10
FCM 已迁移到HTTP v1 API:
https://fcm.googleapis.com/v1/projects/{{projectId}}/messages:send
Run Code Online (Sandbox Code Playgroud)
android_channel_id 会导致错误的请求:
"@type": "type.googleapis.com/google.rpc.BadRequest",
"fieldViolations": [
{
"field": "message.notification",
"description": "Invalid JSON payload received. Unknown name \"android_channel_id\" at 'message.notification': Cannot find field."
}
Run Code Online (Sandbox Code Playgroud)
正确的有效载荷应该是:
{
"message": {
"token": "{{deviceToken}}",
"notification": {
"body": "This is an FCM notification message hello 23",
"title": "FCM Message",
"image": "https://lumiere-a.akamaihd.net/v1/images/au_moviesshowcase_mulan_poster_r_2_54011055.jpeg?region=0,0,960,1420"
},
"android": {
"notification": {
"channel_id": "channel_id_1"
}
},
"data": {
"key1": "42",
"key2": "sent by 21"
}
}
}
Run Code Online (Sandbox Code Playgroud)
请参阅https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#resource:-message
查看文档:https://firebase.google.com/docs/cloud-messaging/http-server-ref
android_channel_id通知的频道ID(Android O中的新增功能).
在收到使用此密钥的任何通知之前,应用必须创建具有此ID的频道.
如果您未在请求中发送此密钥,或者您的应用尚未创建提供的频道ID,则FCM会使用您的应用清单中指定的频道ID.
尝试android_channel_id在json中包含你即将发布到fcm.我不知道为什么显性价值不适合你.尝试只为您的请求添加频道,您应该获得与Firebase控制台相同的效果.
编辑:我刚刚意识到你要求亚马逊客户端集成.也许你能够手动构建json请求(我不太了解亚马逊服务,对不起).
| 归档时间: |
|
| 查看次数: |
27994 次 |
| 最近记录: |