Android实现离线推送(基于即构IMSDK开发实现)

ZEGO即时通讯(ZIM)支持离线推送消息的功能。例如在“单聊”或“群组聊天”时,如果您的程序在后台被冻结、或被系统或用户杀掉,与ZEGO服务后台的长连接超时断开后,此时如果您已接入“离线推送”功能,ZEGO后台会为目标用户发送离线推送的消息。

开发者可以通过集成ZPNsSDK,与ZIMSDK搭配使用,实现离线推送功能。

ZIM实现离线推送的方案如下:

在实现“离线推送”功能之前,请确保:

目前支持华为、小米、OPPO、vivo和Google的推送。

2.1导入ZPNsSDK

方式一:使用MavenCentral自动集成SDK(2.2.0及之后的版本才可使用)

1.进入项目根目录,打开“build.gradle”文件,在“allprojects”中加入如下代码。

...allprojects{repositories{mavenCentral()google()jcenter()}}2.进入“app”目录,打开“build.gradle”文件,在“dependencies”中添加implementation'im.zego:zpns:x.y.z'。“x.y.z”为SDK的版本号。

...dependencies{...//x.y.z请填写具体版本号,如:2.2.0//可通过SDK发布历史取得最新版本号implementation'im.zego:zpns:x.y.z'}方式二:复制SDK文件手动集成

implementationfiles('libs/zpns-release.aar')2.2设置权限

开发者可以根据实际应用需要,设置应用所需权限。

进入“app/src/main”目录,打开“AndroidManifest.xml”文件,添加权限。

3使用ZPNsSDK注册离线推送功能关于各大厂商的回调支持情况:

publicclassMyZPNsReceiverextendsZPNsMessageReceiver{//厂商透传消息回调@OverrideprotectedvoidonThroughMessageReceived(Contextcontext,ZPNsMessagemessage){Log.e("MyZPNsReceiver","onThroughMessageReceivedmessage:"+message.toString());}//厂商通知点击回调@OverrideprotectedvoidonNotificationClicked(Contextcontext,ZPNsMessagemessage){Log.e("MyZPNsReceiver","onNotificationClickedmessage:"+message.toString());}//厂商通知展示回调@OverrideprotectedvoidonNotificationArrived(Contextcontext,ZPNsMessagemessage){Log.e("MyZPNsReceiver","onNotificationArrivedmessage:"+message.toString());}//厂商注册离线推送结果回调,可通过该回调获取到PushID@OverrideprotectedvoidonRegistered(Contextcontext,ZPNsRegisterMessagemessage){Log.e("MyZPNsReceiver","onRegistered:message:"+message.getCommandResult());}}根据离线推送接收端的厂商,开发者应选择不同的payload透传字段获取方式,通过ZPNsMessageReceiver回调方法中的ZPNsMessage对象获取在上述方法触发时将ZPNsMessage对象传给该方法,取出payload字段。

staticpublicStringgetZPNsMessagePayload(ZPNsMessagemessage){Stringpayload="";switch(message.getPushSource()){caseXIAOMI:MiPushMessagemiMsg=(MiPushMessage)message.getExtras();payload=miMsg.getExtra().get("payload");break;caseOPPO:DataMessageoppoMsg=(DataMessage)message.getExtras();StringextraJson=oppoMsg.getDataExtra();//将extra转为map后,取key为"payload"的valuebreak;caseHUAWEI:RemoteMessagehuaweiMsg=(RemoteMessage)message.getExtras();payload=huaweiMsg.getDataOfMap().get("payload");break;caseFCM:com.google.firebase.messaging.RemoteMessageremoteMessage=(com.google.firebase.messaging.RemoteMessage)message.getExtras();payload=remoteMessage.getData().get("payload");break;}returnpayload;}根据前提条件集成的第三方厂商离线推送SDK,调用enableHWPush/enableMiPush/enableOppoPush/enableVivoPush接口,启用各厂商的推送功能,然后调用setPushConfig接口,配置第三方推送通道。

ZPNsConfigzpnsConfig=newZPNsConfig();zpnsConfig.enableFCMPush();//FCMzpnsConfig.enableHWPush("HW_APP_ID");//华为zpnsConfig.enableMiPush("MI_APPID","MI_APPKEY");//小米zpnsConfig.enableOppoPush("OPPO_APP_ID","OPPO_APP_KEY","OPPO_APP_SECRET");//OPPOzpnsConfig.enableVivoPush("VIVO_APP_ID","VIVO_APP_KEY");//vivoZPNsManager.getInstance().setPushConfig(zpnsConfig);ZPNsManager.getInstance().registerPush(this.getApplication());注册离线推送功能后,可以通过继承ZPNsMessageReceiver类中的onRegistered回调,获取到离线推送的pushID,向指定设备推送离线消息。

ZPNsManager.getInstance().unregisterPush();4使用ZIMSDK实现离线推送功能ZIM支持在发送单聊消息、发送群组消息时,使用离线推送消息的功能。

4.1发送单聊消息时使用离线推送功能

1.首先开发者需要通过ZIMPushConfig对象,设置离线推送标题、内容、以及其它自定义属性。

ZIMMessageSendConfigsentConfig=newZIMMessageSendConfig();sentConfig.pushConfig=pushConfig;3.发送方调用sendMessage,传入“sentConfig”,向接收方发送单聊消息。

zim.sendMessage(textMessage,"myUserID",ZIMConversationType.PEER,sentConfig,newZIMMessageSentCallback(){@OverridepublicvoidonMessageSent(ZIMMessagemessage,ZIMErrorerrorInfo){}@OverridepublicvoidonMessageAttached(ZIMMessagemessage){}});4.接收方如果处于离线状态,将会在上线后,接收到发送方之前发送的离线消息。

1.开发者通过ZIMPushConfig对象,设置离线推送标题、内容、以及其它自定义属性。

ZIMMessageSendConfigsentConfig=newZIMMessageSendConfig();sentConfig.pushConfig=pushConfig;3.发送方调用sendMessage,传入“sentConfig”,向群组内的所有用户发送消息。

zim.sendMessage(textMessage,"myGroupID",ZIMConversationType.GROUP,sentConfig,newZIMMessageSentCallback(){@OverridepublicvoidonMessageSent(ZIMMessagemessage,ZIMErrorerrorInfo){}@OverridepublicvoidonMessageAttached(ZIMMessagemessage){}});4.群组内的用户,如果有人处于离线状态,将会在上线后,接收到发送方之前发送的群组离线消息。

THE END
1.断点续传技术,大文件数据传输,稳定发送与接收保存发送端根据这些信息记录已经成功传输的数据,在中断后继续发送剩余数据。实现断点续传时,要求服务器和客户端都支持这一功能。服务器记录已传输的文件片段和状态信息,客户端记录传输中的状态和接收到的文件片段,在重新连接时向服务器发送正确的请求以继续传输。如图2所示,前端和后端分别记录发送和接收的状态。二、上传https://baijiahao.baidu.com/s?id=1817036339552958901&wfr=spider&for=pc
2.为何QQ离线发送要比在线发送快?因为离线发送是发送给QQ服务器的,速度只与当前网络有关,而在线发送需要考虑对方网络,所以速度没有离线https://ask.zol.com.cn/x/7947978.html
3.聊天在线与离线传输文件qq转离线发送和转在线发送有区别吗微信只支持一种文件发送方式,就是发送方把文件发到文件存储服务,然后接收方从文件服务器进行下载。然而,在古老的QQ软件,是支持在线传输和离线传输(微信模式)。 1.离线传输 称之为离线传输,其实是相对与在线传输而言。在qq的概念里,离线传输就是及时对方不在线,仍然可以向其发送文件。 https://blog.csdn.net/littleschemer/article/details/144161451
4.qq离线文件如何接收怎样发送qq离线文件3、选择要发送的文件,点击确定,文件开始传送。 4、传送完成之后,聊天窗口提示离线文件上传成功,此时作为接收方也会收到提示。 QQ离线文件和在线文件有什么区别 1、文件处理方式不同 在线传送:文件是点对点的,就是文件的发收双方。 离线传送:发送方先将文件上传至服务器,待接收方上线后会收到文件接收通知,直接从服https://www.tianqi.com/toutiao/read/103521.html
5.QQ服务器拒绝发送离线文件的解决方法(对方不在线的情况下)QQ技巧经常会使用QQ来接收和发送文件,如果对方不在线,还可以离线发送文件。但今天遇到了这种情况,发送离线文件时,出现了服务器拒绝了发送请求,这是什么原因,有什么解决方法? 服务器拒绝发送离线文件 服务器拒绝了您发送离线文件的原因: 第一种:传输文件容量超过限制;实际上所有的普通QQ用户都可用使用QQ离线文件功能,只不过https://www.jb51.net/qq/249795.html
6.王者荣耀里怎么给好友发消息又如何向不在线的好友发送消息王者荣耀通过数年的运行,游戏内容上已经臻至化境,完全可以媲美端游的各项板块,不过新手玩家在进入游戏后,会遇到一系列问题,比如怎么给在线的微信好友发消息,不在线的好友是不是不能发送离线消息,其实这些当然都是可以的! 王者荣耀给好友发消息玩法: 玩家点击进入王者荣耀主页面,直接点击左下方世界聊天频道,里面有喊话功https://www.qqtn.com/article/article_192864_1.html
7.理解iOS消息推送一文就够:史上最全iOSPush技术详解1)判断app能否在线: 此处可以根据APP自身的后端策略如上一次与后端交互的时间等方法来判断APP能否在线或者者离线。认为在线,会发送在线push,否则,发送离线push。 2)在线push有以下几个特点: 不需要经过苹果APNs; 需要自己实现长链接; 代码在app内部实现。 https://www.songma.com/news/txtlist_i2865v.html
8.redis存储im离线消息mob649e815d65e6的技术博客redis 存储im离线消息,#Redis存储IM离线消息随着即时通讯(IM)应用程序的广泛使用,如何有效地存储和管理离线消息变得尤为重要。用户在不在线时发送的消息如果不能及时接收,将影响用户体验。而使用Redis进行离线消息存储和异步处理,正是一个理想的解决方案。本文将探讨https://blog.51cto.com/u_16175471/12039501
9.IM消息机制(二):保证离线消息的可靠投递腾讯云开发者社区IM消息机制(二):保证离线消息的可靠投递 本文的上篇《IM消息机制(一):保证在线实时消息的可靠投递》中,我们讨论了在线实时消息的投递可以通过应用层的确认、发送方的超时重传、接收方的去重等手段来保证业务层面消息的不丢不重。 但实时在线投递针对的是消息收发双方都在线的情况(如当发送方用户A发送消息给接收方https://cloud.tencent.com/developer/article/1936474
10.移动端使用uniapp,支持私聊群聊离线消息发送图片文件盒子IM是一个仿微信的聊天工具。后端采用springboot+netty实现,web端使用vue,移动端使用uniapp,支持私聊、群聊、离线消息、发送图片、文件、语音、emoji表情、视频聊天等功能。https://gitee.com/wuzhenping/box-im
11.为何QQ服务器会拒绝发送离线文件?可能由于网络连接问题、服务器故障、安全限制、存储空间不足或用户权限设置。建议检查网络环境,清理缓存,重启应用,并确保账户设置允许发送离线文件。如果问题持续,可联系客服寻求帮助。 在数字化时代,即时通讯软件如QQ已成为人们日常生活和工作中不可或缺的工具,用户经常利用QQ发送离线文件,以便在对方不在线时也能传递重要https://www.kdun.com/ask/825613.html
12.揭秘QQ文件传输,是否全经服务器转发及传输速度解析QQ在线发送和离线发送的区别 1、在线发送文件需要双方同时在线,而离线发送文件则不需要接收方在线,离线发送时,发送方只需将文件上传至服务器,接收方上线后会收到文件接收通知,然后从服务器下载文件。 2、在线发送是点对点传输,文件大小没有限制,但不能传送文件夹;离线发送则是将文件上传至服务器,待接收方上线后下载http://www.cloud12.cn/53B2f5776b6a.html
13.如流如果把状态改成“隐身”,您的联系人看到您的状态和“离线”状态是一样的,您可以收到联系人发送给您的即时消息,群消息也同样可以收到,同时您可以发起和一位联系人的会话,也可以参与群内的讨论,不过您的联系人和群成员看到您的状态都是“离线”。 怎样添加表情? 首先,您在聊天的时候看到联系人发了很多好玩的表https://baike.sogou.com/v61825.htm
14.文档中心device_token和alias没有正确绑定、及时更新,导致无法下发 厂商token异常,需要开发者确认divide_token是否与厂商token绑定,确认设备是在线还是离线 消息发送量超过厂商限额 面对很多不同类型的问题,都需要开发者们进行排查,才能知道具体是什么原因导致的消息推送失败。U-Push上线的提效新工具「消息查询」功能就可以帮助开发https://developer.umeng.com/docs/67966/detail/2409275