腾讯云IM,消息推送插件(中国大陆版)。支持通过厂商渠道进行离线消息推。
More...
支持通过厂商渠道进行离线消息推送,及在线后台创建消息通知。不支持FirebaseCloudMessaging。
本中国大陆版消息推送插件,不包含GoogleFirebaseCloudMessaging(FCM)渠道的支持,离线推送部分仅支持苹果iOS及国内安卓厂商(华米OV等)。
如果您的应用需要面向中国大陆以外的市场,建议您使用我们的国际版离线推送插件,使用GoogleFirebaseCloudMessaging(FCM)渠道向Android设备推送离线消息。
ThispackagedoesnotsupportGoogleFirebaseCloudMessaging(FCM)channel,whiletheofflinepushpartonlyincludesthesupportsofAppleiOSandChineseAndroidmanufacturers(HuaWei/Mi/Oppo/vivo,etc.).
IfyourappneedstotargetmarketsoutsidemainlandChina,werecommendthatyouuseourinternationaleditionofthispackagetopushofflinemessagestoAndroiddevicesusingtheGoogleFirebaseCloudMessaging(FCM)channel.
腾讯云即时通信IM的终端用户需要随时都能够得知最新的消息,而由于移动端设备的性能与电量有限,当APP处于后台时,为了避免维持长连接而导致的过多资源消耗,腾讯云即时通信IM推荐您使用各厂商提供的系统级推送通道来进行消息通知,系统级的推送通道相比第三方推送拥有更稳定的系统级长连接,可以做到随时接受推送消息,且资源消耗大幅降低。
使用腾讯云IM厂商推送Flutter集成插件的离线推送能力,可快速接入主流厂商(苹果iOS/OPPO/VIVO/华为/小米/魅族/荣耀)的离线推送。
本教程含接入腾讯云即时通信IM离线推送全流程。插件已封装上述厂商的SDK,使用时仅需简单改造调用即可。
以下API若无特殊说明,均可自动兼容Android/iOS平台及支持厂商,插件内部进行平台及厂商判断,您直接调用即可。
需要完成厂商开发者账号申请(一般需要企业认证),创建应用,申请PUSH权限,拿到key信息。
按照OPPO官网要求,在OPPOAndroid8.0及以上系统版本必须配置ChannelID,否则推送消息无法展示。您需要先在App中创建对应的ChannelID(例如tuikit)。
请在配置管理-新建通道内,创建一个新通道。通道ID即为ChannelID。
小米推送服务应用创建完成后,在应用详情中,您可以查看详细的应用信息。
如果您的应用需要经过流水线编译发布,每次编译在不同的构建机上进行,可在本地创建keystore.jks密钥文件,得到该keystore的SHA256值,填入华为推送平台中。
在流水线的构建脚本中,对完成构建后的产物进行归档对齐,及使用刚才的keystore签名。此时该最终产物签名SHA256值即可保持一致。代码如下:
记录下图中圈出的信息,后续需要使用。
在您的项目中安装IMFlutter离线推送插件:
//app其他gradle插件applyplugin:'com.huawei.agconnect'//HMSSDKgradle插件android{//app配置内容}推送角标权限打开android/app/src/main/AndroidManifest.xml文件,如下添加uses-permission。
打开android/app/build.gradle文件,如下配置vivo的APPID和AppKey。
android:{defaultConfig{manifestPlaceholders=[....vivo_APPID:"填入您申请的vivoAppKey"vivo_APPKEY:"填入您申请的vivoAppID",.....]}}打开android/app/src/main/AndroidManifest.xml文件,在
插件支持自动在appInfo内找到当前厂商的证书ID,并自动完成Token上报。
若为前台在线状态,则收到新消息不触发notification推送,反之则会进行推送。
建议:在应用切换到inactive/paused状态前,使用插件中setBadgeNum(intbadgeNum)方法,将最新未读数同步至桌面角标。此处本插件支持配置iOS,XIAOMI(MIUI6-MIUI11机型),HUAWEI,HONOR,vivo及OPPO设备角标。
OPPO角标属于OPPO侧高级权益,不默认开放。如需使用,请自行联系OPPO应用推送权益对接人。
如您自行接入腾讯云IMSDK,请在发消息时配置OfflinePushInfoofflinePushInfo字段。
建议在跳转成功后,及时清除通知栏中其他本应用的通知,避免太多IM消息堆积其中。调用插件中clearAllNotification()方法即可。
finaluser=awaitsdkInstance.getLoginUser();finalmyId=user.data;OfflinePushInfoofflinePush=OfflinePushInfo(title:"",desc:"邀请您语音通话",ext:"{\"conversationID\":\"c2c_$myId\"}",disablePush:false,ignoreIOSBadge:false,androidOPPOChannelID:PushConfig.OPPOChannelID);_calling.call(widget.selectedConversation.userID!,CallingScenes.Audio,offlinePush);通话群邀请暂不支持离线推送。
本部分在使用插件跑通离线推送(Android)完成的基础上,补充对应步骤iOS端需要做的事情。
该部分没有提到过的步骤,和Android端一致。
if(@available(iOS10.0,*)){[UNUserNotificationCentercurrentNotificationCenter].delegate=(id
OfflinePushInfo({//..其他配置this.iOSSound="",//iOS离线推送声音设置,当iOSSound=kIOSOfflinePushNoSound,表示接收时不会播放声音。当iOSSound=kIOSOfflinePushDefaultSound,表示接收时播放系统声音。如果要自定义iOSSound,需要先把语音文件链接进Xcode工程,然后把语音文件名(带后缀)设置给iOSSound。this.ignoreIOSBadge=false,});接入TUIKit如果您使用我们的FlutterTUIKit组件库,可直接在TIMUIKitChat组件TIMUIKitChatConfig中,使用notificationTitle/notificationOPPOChannelID/notificationBody/notificationExt/notificationIOSSound定义自定义推送。详情如下:
TIMUIKitChat(config:TIMUIKitChatConfig(//..其他配置notificationIOSSound:"",//iOS离线推送声音设置,当iOSSound=kIOSOfflinePushNoSound,表示接收时不会播放声音。当iOSSound=kIOSOfflinePushDefaultSound,表示接收时播放系统声音。如果要自定义iOSSound,需要先把语音文件链接进Xcode工程,然后把语音文件名(带后缀)设置给iOSSound。))
本步骤整体方案与Android的步骤5一致,此处不再重复提及。
TencentImSDKPlugin.v2TIMManager.callExperimentalAPI(api:'disableBadgeNumber',param:true);本代码仅需在程序启动后,执行一次即可。
如果您的业务中,有其他运营通知/订单通知等消息,需要推送,您可以参考本部分,使用服务端推送能力。
如果您在项目中,使用了其他推送SDK,如TPNS,会导致多个厂商底层SDK冲突,使得编译不通过。因此建议仅安装我们的推送插件即可,使用我们的服务端推送能力,下发IM消息和您的其他推送消息。
此处实际是向用户们发送了一条消息,消息内容不重要,如果您不希望这条消息呈现给用户,可在渲染会话列表的时候,过滤掉同此管理员账号的会话,仅使用其推送和跳转能力。
以全员推送的JSON包体举例:
OPPO手机收不到推送一般有以下几种情况:
自定义消息的离线推送和普通消息不太一样,自定义消息的内容我们无法解析,不能确定推送的内容,所以默认不推送,如果您有推送需求,需要您在sendMessage的时候设置offlinePushInfo的desc字段,推送的时候会默认展示desc信息。
本文以上部分介绍了,如何使用本插件,结合腾讯云IM后端的推送服务,实现通过厂商通道的离线推送。
但是,在某些情况下,厂商离线推送并不适用。如,您的目标客户端机型非我们兼容的厂商,使用华强北定制的Android设备等。
此时,您只得通过在线监听收到新消息回调,在客户端上,手动触发创建通知。这仅适用于,应用未被kill掉,还处于前后台状态,能正常与IM服务端通信。
为此种情况,本插件在0.3版本中,新增两个本地创建消息的方法,displayNotification自定义通知,及displayDefaultNotificationForMessage根据消息生成默认通知,您可按需使用。
在您的项目中安装IMFlutter推送插件:
Objective-C:
if(@available(iOS10.0,*)){[UNUserNotificationCentercurrentNotificationCenter].delegate=(id
代码如下:
finaladvancedMsgListener=V2TimAdvancedMsgListener(onRecvNewMessage:(V2TimMessagenewMsg){//这里完成监听回调触发事件//请在这里调用下一步提及的触发本地消息通知API},});TencentImSDKPlugin.v2TIMManager.getMessageManager().addAdvancedMsgListener(listener:advancedMsgListener);触发本地消息通知请从我们提供的两个API中,displayNotification自定义通知,及displayDefaultNotificationForMessage根据消息生成默认通知,选一个合适的API。
cPush.createNotificationChannel(channelId:"new_message",channelName:"消息推送",channelDescription:"推送新聊天消息");displayNotification本API需要您提供title,body,及ext用于点击跳转信息,三个参数。您可以根据需要自行解析收到的V2TimMessage,生成这三个字段。
为便于跳转,此处ext的生成规则可查看displayDefaultNotificationForMessage的代码。
cPush.displayNotification(channelID:"new_message",channelName:"消息推送",title:"",body:"",ext:"");displayDefaultNotificationForMessage为了方便,推荐您使用此API,自动根据V2TimMessage,生成通知。
您只需传入一个V2TimMessage即可。
如果您在上一步使用displayDefaultNotificationForMessage,或在displayNotification中使用与default相同的ext生成函数,此时的ext结构为:"conversationID":"对应的conversation"。
此时,填上初始化时,为pushClickAction埋的坑。
初始化时,注册该回调方法,可拿到含推送本体及ext信息在内的Map。
在后台跳转情况下,此时Flutter首页可能已经unmounted,无法为跳转提供context,因此建议启动时缓存一个context,保证跳转成功。
建议跳转成功后,清除通知栏中其他通知消息,避免太多IM消息堆积在通知栏中。调用插件中clearAllNotification()方法即可。
BuildContext_cachedContext;finalTimUiKitPushPlugincPush=TimUiKitPushPlugin();@overridevoidinitState(){super.initState();_cachedContext=context;}voidonClickNotification(Map
此时,您已完成在线推送的接入。测试通过后,您可以在onRecvNewMessage内定义,触发推送通知的时机及场景。