====== 安卓端保障新消息及时通知的常见实践 ======
当app在后台运行时,环信IM SDK默认通过一个后台服务保持一条连接环信服务器的长连接。但Android为了解决系统待机性能差的问题,随着Android版本的升级逐渐禁止了app级别的后台服务的运行。所以在一些版本比较高的Android系统上会有APP进入后台后接收不到消息的情况。
目前常见的解决方法如下:
===== 集成厂家推送 =====
集成尽可能多的厂家推送。环信支持了所有主流的第三方厂家推送服务,包括小米推送,华为推送,OPPO推送,魅族推送,VIVO推送,Google FCM推送。详情请见:[[http://docs-im.easemob.com/im/android/push/thirdpartypush
|第三方推送集成]]
===== 手机上开启APP的“自启动模式”、“非省电模式” =====
针对没有厂家推送的手机型号,可以采取的优化措施包括:
告知APP使用者去开启该APP的“自启动模式”、“非省电模式”,从而可以让App活得更久。常见的实践是在APP的设置页面,通过提供文档说明的方式告知APP使用者如何开启APP的“自启动模式”、“非省电模式“。也可以在APP的设置页面,设置链接,让用户点击链接后就跳转到该型号手机的相应的系统设置位置。举例如下:
{{ :im:other:图片_1.png?200 |}}
===== 通过短信通知用户重要新消息 =====
针对没有厂家推送的手机型号,可以采取的优化措施包括:
通过短信告知。方法如下:开通消息回执;如果在规定时间内(例如1分钟)没有返回值“已读”,环信将信息转给业务系统;业务系统发现时间到期后(例如超过3分钟),业务系统服务器去环信服务器查询,如果没有下发,然后出发短信系统发送信息。获取离线消息的方法:
[[http://docs-im.easemob.com/im/server/ready/user?s%5B%5D=status#%E8%8E%B7%E5%8F%96%E6%9F%90%E6%9D%A1%E7%A6%BB%E7%BA%BF%E6%B6%88%E6%81%AF%E7%8A%B6%E6%80%81|点击查看]]
===== 自定义推送铃声 =====
在音视频通话的场景下,还可以使用自定义推送铃声,让推送的铃声提醒更明显持续时间更长。请注意,自定义铃声,目前只支持华为。关于自定义铃声支持,请详见文档:
如果想在android端的app上收到推送时播放自定义的铃声,需要在消息的扩展中增加如下的字段:
"ext":{
"em_apns_ext":{
//对于华为EMUI 10以上系统需要设置以下参数,否则容易被华为通知智能分类分到营销通知渠道,
//从而不能播放自定义铃声
"em_push_name":"标题",
"em_push_content":"内容",
},
"em_push_ext":{
"type":"call"
},
"em_android_push_ext":{
//指定自定义渠道
"em_push_channel_id":"Channel id",
"em_push_sound":"/raw/appsound"
}
}
其中声音文件(em_push_sound key的值)都存放在Android设备上应用的“/res/raw/**”目录下。
''注意事项:\\
(1)目前只支持华为EMUI 10以上的系统。\\
(2)华为EMUI 10以上自定义推送铃声,需要设置channel_id,通过em_push_channel_id进行设置。''\\
需要注意的是,即使指定了渠道标识(channel id),消息最终能否展示在应用渠道上,受用户终端上该渠道是否创建以及渠道的开关策略控制。\\
a、如果本地已经创建该渠道,且已设置了对应的自定义铃声,收到推送消息时会播放自定义铃声。\\
b、如果本地没有创建指定的渠道,则华为会对消息进行智能分类,根据消息设置的级别及智能分类的结果,两者取低,根据级别下发到服务提醒,普通通知与营销通知三个中的一个通知渠道,如果该通知渠道之前没有创建且不是营销通知,则设置自定义铃声有效。\\
(3)对于华为EMUI 10以上系统,需要添加em_push_name和em_push_content参数,否则容易被华为通知智能分类分到营销通知渠道,从而不能播放自定义铃声。参考: [[https://developer.huawei.com/consumer/cn/doc/development/HMS-Guides/push-intelligent-classify|通知消息智能分类]]\\
(4)由于铃声是通知渠道的属性,因此铃声仅在渠道创建时有效,渠道创建后,即使设置自定义铃声也不会播放,而使用创建渠道时设置的铃声。\\
如果需要兼容ios端,需要在消息的扩展中额外增加如下字段:
"ext":{
"em_apns_ext":{
//设置ios端自定义铃声文件
"em_push_sound": "custom.caf",
//保证 APNs 通知扩展
"em_push_mutable_content":true
},
......
}
===== 自定义推送扩展 =====
在音视频通话的场景下,还可以通过自定义推送扩展可以做到点击推送提醒,既可以打开接听页面。请详见文档:[[http://docs-im.easemob.com/im/android/push/thirdpartypush#自定义推送提示
|自定义推送提示]]