消息通知

SDK消息通知说明

从安卓sdkv5.1.8之后,sdk消息通知分由以下3种途径进行下发(优先级为a>b>c)。简单介绍如下图所示:
a,b,c三种方式详细解释如下:
        
a、直接通过设置的回调接口(OnChatReceiveListener)将消息推送给应用进行处理。参考文档:设置通知回调监听
b、如果应用没有设置回调接口则采用(BroadcastReceiver)广播通知(从v5.1.8版本以后)此时如果应用处于未运行状态,则会唤醒应用app进程。集成广播参考文档:广播集成
c、如果应用未处于运行状态并且不想被唤醒应用运行则采用状态栏通知处理(通过SDK直提醒,不会通知应用),比如调用ECDevice#logout(ECDevice.NotifyMode,  ECDevice.OnLogoutListener)SDK退出登录并且传入后台设置接收消息才会有提醒。参考文档:登出
注意:
1、以上在a和b的场景下,SDK都会将消息直接给应用处理,只有在c的情况SDK才会直接处理消息提醒,所以应用需要处理a和b两种情况。
2、app进程应该在广播处通过调用ECDevice.isInitialized()去判断是否初始化,如果没有请调用重新初始化接口,完成sdk进程与app进程的绑定。
3、在我们的SDK推送服务(ECClientService)不存活的情况下,推送服务器会通过华为、小米推送将消息推送到客户端来实现消息通知,因此需要集成华为和小米的sdk来处理华为小米推送。具体集成方式参考华为推送文档小米推送文档
4、部分手机需要将应用进程设置为开机自启动,参考Android收不到推送解决方案

广播集成

注册到应用的 AndroidManifest.xml 里面:
  • // 声明自定义通知的广播接收器(需要替换包名,详见注意事项)
  • <receiver
  •     android:name=".service.YuntxNotifyReceiver"
  •     android:exported="false">
  •     <intent-filter>
  •         // 接收push消息
  •         // action匹配规则{packageName + ".action" + "功能"}
  •         <action android:name="com.yuntongxun.ecdemo.action.VOIP_CALL" />
  •         <action android:name="com.yuntongxun.ecdemo.action.MESSAGE" />
  •         <action android:name="com.yuntongxun.ecdemo.action.NOTIFICATION_CLICK" />
  •         <action android:name="com.yuntongxun.ecdemo.action.PERSON_VERSION" />
  •     </intent-filter>
  • </receiver>
注意:
声明自定义通知的广播接收器,开发自有项目APP时,action 中的 com.yuntongxun.ecdemo 请替换为自有项目APP的包名。
YuntxNotifyReceiver类中的主要方法介绍如下(详细参数请参考Android api文档)
  • public class YuntxNotifyReceiver extends ECNotifyReceiver {
  •     @Override
  •     public void onReceivedMessage(Context context, ECMessage msg){
  •     
  •     }
  •     @Override
  •     public void onCallArrived(Context context, Intent intent){

  •     }
  •     @Override
  •     public void onReceiveGroupNoticeMessage(Context context, ECGroupNoticeMessage notice){

  •     }
  •     @Override
  •     public void onReceiveMessageNotify(Context context, ECMessageNotify notify){

  •     }
  • }
        
1)、收到im消息推送
  • public void onReceivedMessage(Context context, ECMessage msg)
        
2)、收到呼叫请求(intent封装了呼叫者信息)
  • public void onCallArrived(Context context, Intent intent)
        
3)、收到群组相关通知
  • public void onReceiveGroupNoticeMessage(Context context, ECGroupNoticeMessage notice)
        
4)、收到im相关通知(比如有人将消息撤回、已读、删除)
  • public void onReceiveMessageNotify(Context context, ECMessageNotify notify)