本文仅用于使用旧版推送集成方案的客户。不适用于使用融云 Push 2.0 集成方案的客户。
同时集成融云和友盟的推送,配置会有冲突,主要解决思路,暂时将融云配置相关位置去掉。
本文标注了gradle 和AndroidManifest.xml 中需要合并修改的位置
华为推送
-
登录华为开发者后台,在我的应用->开发->概览->下载 agconnect-servics.json 文件,如下图
-
将下载好的 agconnect-servics.json 文件放到 app 模块下的根目录,如下图
-
在 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/' } } }
-
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'
-
在 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>