
IM即时通讯
安全可靠、全球互通

实时音视频
流畅稳定、省钱省力
回答:
同时集成融云和友盟的推送,配置会有冲突,主要解决思路,暂时将融云配置相关位置去掉。
本文标注了gradle 和AndroidManifest.xml 中需要合并修改的位置
实现本文相关配置前需要配合融云推送文档,集成融云推送。具体启用推送服务,请参考融云推送文档。
https://docs.rongcloud.cn/v4/5X/views/im/ui/guide/notify/push/android.html
华为推送
登录华为开发者后台,在我的应用->开发->概览->下载 agconnect-servics.json 文件,如下图
2.配置
将下载好的 agconnect-servics.json 文件放到 app 模块下的根目录,如下图
3,在 project 的 build.gradle 添加 如下配置
buildscript { repositories { google() maven { url 'http://developer.huawei.com/repo/'} } dependencies { classpath "com.android.tools.build:gradle:4.1.2" classpath 'com.huawei.agconnect:agcp:1.4.1.300' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { google() mavenCentral() maven {url "http://maven.rongcloud.cn/repository/maven-releases/"} maven {url 'http://developer.huawei.com/repo/'} maven { url 'https://repo1.maven.org/maven2/' } } }
4,app 目录下添加友盟 华为相关依赖
dependencies { //友盟基础库依赖(必须) api 'com.umeng.umsdk:common:9.4.2' api 'com.umeng.umsdk:asms:1.4.0' //友盟Push依赖 api 'com.umeng.umsdk:push:6.4.0' // 华为 api 'com.umeng.umsdk:huawei-umengaccs:1.3.4' api 'com.huawei.hms:push:5.3.0.301' } apply plugin: 'com.huawei.agconnect'
5,在 AndroidManifest.xml 添加如下配置信息
<service android:name="io.rong.push.platform.hms.HMSPushService" android:exported="false"> <intent-filter> <action android:name="com.huawei.push.action.MESSAGING_EVENT" /> </intent-filter> </service> <meta-data android:name="com.huawei.hms.client.appid" android:value="appid=xxx" />
小米推送
1,app 目录下 builg.gradle
添加友盟中小米依赖
dependencies { // 小米 api 'com.umeng.umsdk:xiaomi-umengaccs:1.2.4' api 'com.umeng.umsdk:xiaomi-push:4.0.2' }
注:您如果已经集成融云中的小米推送,在主工程中的 AndroidManifest.xml
文件下小米推送下面配置注释
<!-- 小米 配置开始 < --> <!-- <permission --> <!-- android:name="cn.rongcloud.um.permission.MIPUSH_RECEIVE" --> <!-- android:protectionLevel="signature" /> --> <!-- <uses-permission android:name="cn.rongcloud.um.permission.MIPUSH_RECEIVE" /> <!– 小米 配置结束 < –> -->
2,在主工程中的 AndroidManifest.xml
文件中增加小米推送配置
<!-- 小米 配置开始 < --> <service android:name="com.xiaomi.push.service.XMPushService" android:enabled="true" /> <service android:name="com.xiaomi.mipush.sdk.PushMessageHandler" android:enabled="true" android:exported="true" /> <service android:name="com.xiaomi.mipush.sdk.MessageHandleService" android:enabled="true" /> <!-- 注:此service必须在2.2.5版本以后(包括2.2.5版本)加入 --> <service android:name="com.xiaomi.push.service.XMJobService" android:enabled="true" android:exported="false" android:permission="android.permission.BIND_JOB_SERVICE" /> <!-- 注:此service必须在3.0.1版本以后(包括3.0.1版本)加入 --> <receiver android:name="com.xiaomi.push.service.receivers.NetworkStatusReceiver" android:exported="true"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> <receiver android:name="com.xiaomi.push.service.receivers.PingReceiver" android:exported="false"> <intent-filter> <action android:name="com.xiaomi.push.PING_TIMER" /> </intent-filter> </receiver> <!-- 小米 配置结束 < -->
3.友盟与融云小米广播接收器的冲突解决
自定义MiMessageReceiver 继承自小米包下的PushMessageReceiver,将融云定义的MiMessageReceiver中的代码全部复制,然后将onReceiveRegisterResult中小米返回的推送token 传给友盟方,最后AndroidManifest.xml中注册自定义的MiMessageReceiver
public class MiMessageReceiver extends PushMessageReceiver { private static final String TAG = io.rong.push.platform.mi.MiMessageReceiver.class.getSimpleName(); public MiMessageReceiver() { } @Override public void onReceivePassThroughMessage(Context context, MiPushMessage message) { RLog.v(TAG, "onReceivePassThroughMessage is called. " + message.toString()); } @Override public void onNotificationMessageClicked(Context context, MiPushMessage message) { RLog.v(TAG, "onNotificationMessageClicked is called. " + message.toString()); PushNotificationMessage pushNotificationMessage = PushUtils.transformToPushMessage(message.getContent()); PushManager.getInstance().onNotificationMessageClicked(context, PushType.XIAOMI, pushNotificationMessage); } @Override public void onNotificationMessageArrived(Context context, MiPushMessage message) { RLog.v(TAG, "onNotificationMessageArrived is called. " + message.toString()); PushNotificationMessage pushNotificationMessage = PushUtils.transformToPushMessage(message.getContent()); if (pushNotificationMessage != null) { PushManager.getInstance().onNotificationMessageArrived(context, PushType.XIAOMI, pushNotificationMessage); } } @Override public void onCommandResult(Context context, MiPushCommandMessage message) { RLog.v(TAG, "onCommandResult is called. " + message.toString()); } @Override public void onReceiveRegisterResult(Context context, MiPushCommandMessage message) { String command = message.getCommand(); List<String> arguments = message.getCommandArguments(); String cmdArg1 = arguments != null && arguments.size() > 0 ? (String) arguments.get(0) : null; String cmdArg2 = arguments != null && arguments.size() > 1 ? (String) arguments.get(1) : null; RLog.d(TAG, "onReceiveRegisterResult. cmdArg1: " + cmdArg1 + "; cmdArg2:" + cmdArg2); if ("register".equals(command)) { if (message.getResultCode() == 0L) { PushManager.getInstance().onReceiveToken(context, PushType.XIAOMI, cmdArg1); //将token 上送给友盟 NotifManager notifManager=new NotifManager(); notifManager.init(context.getApplicationContext()); notifManager.reportThirdPushToken(cmdArg1,"MI_TOKEN"); } else { PushManager.getInstance().onErrorResponse(context, PushType.XIAOMI, "request_token", message.getResultCode()); } } } }
AndroidManifest.xml中注册自定义的MiMessageReceiver
<receiver android:name=".自定义MiMessageReceiver路径.MiMessageReceiver" android:exported="true"> <intent-filter> <action android:name="com.xiaomi.mipush.RECEIVE_MESSAGE" /> </intent-filter> <intent-filter> <action android:name="com.xiaomi.mipush.MESSAGE_ARRIVED" /> </intent-filter> <intent-filter> <action android:name="com.xiaomi.mipush.ERROR" /> </intent-filter> </receiver>
魅族推送
1,app 目录下 builg.gradle
中添加如下依赖
dependencies { // 魅族 api 'com.umeng.umsdk:meizu-umengaccs:1.1.4' api 'com.umeng.umsdk:meizu-push:4.0.7' }
2,在主工程中的 AndroidManifest.xml
里增加如下配置
<!-- MeiZu 配置开始 < --><!-- 兼容 flyme5.0 以下版本,魅族内部集成 pushSDK 必填,不然无法收到 消息--> <uses-permission android:name="com.meizu.flyme.push.permission.RECEIVE"/> <permission android:name="您的包名.push.permission.MESSAGE" android:protectionLevel="signature"/> <uses-permission android:name="您的包名.push.permission.MESSAGE"/> <!-- 兼容 flyme3.0 配置权限--> <uses-permission android:name="com.meizu.c2dm.permission.RECEIVE" /> <!-- MeiZu 配置结束 < --> <application <!-- MeiZu 配置开始 < --> <receiver android:name="io.rong.push.platform.meizu.MeiZuReceiver"> <intent-filter> <!-- 接收 push 消息 --> <action android:name="com.meizu.flyme.push.intent.MESSAGE"/> <!-- 接收 register 消息 --> <action android:name="com.meizu.flyme.push.intent.REGISTER.FEEDBACK" /> <!-- 接收 unregister 消息--> <action android:name="com.meizu.flyme.push.intent.UNREGISTER.FEEDBACK"/> /> <!-- 兼容低版本 Flyme3 推送服务配置 --> <action android:name="com.meizu.c2dm.intent.REGISTRATION"/> <action android:name="com.meizu.c2dm.intent.RECEIVE" /> <category android:name="您的包名"/> </intent-filter> </receiver> <!-- MeiZu 配置结束 < --> </application>
3,如已经注册友盟中所需魅族配置MfrMzMessageReceiver 将这个位置注释
<!-- 友盟中魅族--> <!-- <receiver android:name=".umeng.MfrMzMessageReceiver">--> <!-- <intent-filter>--> <!-- <action android:name="com.meizu.flyme.push.intent.MESSAGE" />--> <!-- <action android:name="com.meizu.flyme.push.intent.REGISTER.FEEDBACK" />--> <!-- <action android:name="com.meizu.flyme.push.intent.UNREGISTER.FEEDBACK" />--> <!-- <action android:name="com.meizu.c2dm.intent.REGISTRATION" />--> <!-- <action android:name="com.meizu.c2dm.intent.RECEIVE" />--> <!-- <category android:name="${applicationId}"/>--> <!-- </intent-filter>--> <!-- </receiver>-->
oppo推送
app 目录下 builg.gradle
中添加如下依赖
dependencies { // oppo api 'com.umeng.umsdk:oppo-umengaccs:1.0.7-fix' implementation 'com.umeng.umsdk:oppo-push:2.1.0' }
vivo推送
1,app 目录下 builg.gradle
中添加如下依赖
dependencies { // vivo api 'com.umeng.umsdk:vivo-umengaccs:1.1.4' implementation 'com.umeng.umsdk:vivo-push:3.0.0' }
2,在主工程中的 AndroidManifest.xml
文件下增加如下配置
<!-- 推送需要的权限列表 --> <uses-permission android:name="android.permission.INTERNET"/> <!-- vivo 推送服务需要配置的 service、activity --> <service android:name="com.vivo.push.sdk.service.CommandClientService" android:exported="true"/> <activity android:name="com.vivo.push.sdk.LinkProxyClientActivity" android:exported="false" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar"/> <!-- vivo push 推送 receiver 声明 --> <receiver android:name="io.rong.push.platform.vivo.VivoPushMessageReceiver" > <intent-filter> <!-- 接收 vivo push 消息 --> <action android:name="com.vivo.pushclient.action.RECEIVE" /> </intent-filter> </receiver>
3,在 AndroidManifest.xml
文件中配置 vivo 推送平台生成的 AppID、AppKey
<!-- vivo 推送配置项 --> <meta-data android:name="com.vivo.push.api_key" android:value="您的 vivo 推送平台生成 AppKey"/> <meta-data android:name="com.vivo.push.app_id" android:value="您的 vivo 推送平台生成 AppID"/>
关于推送点击打开app,AndroidManife.xml 注册融云定义的PushMessageReceiver,这里有对点击推送通知打开app做操作
<receiver android:name="io.rong.push.notification.PushMessageReceiver" android:exported="false"> <intent-filter> <action android:name="io.rong.push.intent.MESSAGE_ARRIVED" /> <action android:name="io.rong.push.intent.MESSAGE_CLICKED" /> <action android:name="io.rong.push.intent.THIRD_PARTY_PUSH_STATE" /> </intent-filter> </receiver>