Android 集成华为推送,集成小米推送,集成OPPO推送,集成vivo推送
最近有时间在我们的应用中集成了华为,小米,OPPO,vivo四大平台的推送,一切顺利。
这里做一个记录,
开撸:
一、华为推送
1、下载HMS Agent套件,解压如下:
找到GetHMSAgent_cn.bat 打开如下,按照提示输入包名,appid等信息,按enter键下一项,因为我这里只需要推送功能,所以除了最后的“是否需要推送服务”输入了1外,其他的我都是否。
完成后会在原来的目录下找到一个叫copysrc的文件夹,如下图:
然后打开copysrc-->java 把com整个文件复制到我们的项目工程中,位置:app->java文件中,如出现错误,请检查复制到的目录是否正确如下:
2、build文件配置,在app的build文件中找到allprojedts-->repositories添加:
maven { url 'http://developer.huawei.com/repo/' }
如下图:
同时,在build中dependencies添加依赖:implementation 'com.huawei.android.hms:push:xxxx'
xxxx替换为你下载到的套件的版本号,如我下载的是HMSAgent_2.6.3.306,则是:
implementation 'com.huawei.android.hms:push:2.6.3.306'
3、配置AndroidManifest.xml文件,添加以下内容:
<!--华为推送相关权限-->
<!-- 接收PUSH TOKEN的广播以及PUSH消息需要定义该权限 xxx 要替换上您应用的包名 -->
<permissionandroid:name="xxx .permission.PROCESS_PUSH_MSG"android:protectionLevel="signatureOrSystem" />
<!--接收PUSH TOKEN的广播以及PUSH消息需要定义该权限 xxx 要替换上您应用的包名 -->
<uses-permission android:name="xxx.permission.PROCESS_PUSH_MSG" />
在application的节点下添加以下内容,把以下的“你的appid”替换为你的appid,xxx替换为你的包名
<!--华为推送.......................................开始 ...................................................... -->
<meta-dataandroid:name="com.huawei.hms.client.appid"android:value="appid=你的appid" /><providerandroid:name="com.huawei.hms.update.provider.UpdateProvider"android:authorities="xxx.hms.update.provider"android:exported="false"android:grantUriPermissions="true" /><providerandroid:name="com.huawei.updatesdk.fileprovider.UpdateSdkFileProvider"android:authorities="xxx.updateSdk.fileProvider"android:exported="false"android:grantUriPermissions="true" /><activityandroid:name="com.huawei.android.hms.agent.common.HMSAgentActivity"android:configChanges="orientation|locale|screenSize|layoutDirection|fontScale"android:excludeFromRecents="true"android:exported="false"android:hardwareAccelerated="true"android:theme="@android:style/Theme.Translucent"><meta-dataandroid:name="hwc-theme"android:value="androidhwext:style/Theme.Emui.Translucent" />
</activity>
<activityandroid:name="com.huawei.hms.activity.BridgeActivity"android:configChanges="orientation|locale|screenSize|layoutDirection|fontScale"android:excludeFromRecents="true"android:exported="false"android:hardwareAccelerated="true"android:theme="@android:style/Theme.Translucent"><meta-dataandroid:name="hwc-theme"android:value="androidhwext:style/Theme.Emui.Translucent" />
</activity><activityandroid:name="com.huawei.updatesdk.service.otaupdate.AppUpdateActivity"android:configChanges="orientation|screenSize"android:exported="false"android:theme="@style/upsdkDlDialog"><meta-dataandroid:name="hwc-theme"android:value="androidhwext:style/Theme.Emui.Translucent.NoTitleBar" />
</activity><activityandroid:name="com.huawei.updatesdk.support.pm.PackageInstallerActivity"android:configChanges="orientation|keyboardHidden|screenSize"android:exported="false"android:theme="@style/upsdkDlDialog"><meta-dataandroid:name="hwc-theme"android:value="androidhwext:style/Theme.Emui.Translucent" />
</activity><receiverandroid:name=".server.HuaweiPushRevicer"android:permission="xxx.permission.PROCESS_PUSH_MSG"><intent-filter><!-- 必须,用于接收token --><action android:name="com.huawei.android.push.intent.REGISTRATION" /><!-- 必须, 用于接收透传消息 --><action android:name="com.huawei.android.push.intent.RECEIVE" /><!-- 必须, 用于接收通知栏消息点击事件 此事件不需要开发者处理,只需注册就可以--><action android:name="com.huawei.intent.action.PUSH_DELAY_NOTIFY" /></intent-filter>
</receiver><serviceandroid:name="com.huawei.hms.support.api.push.service.HmsMsgService"android:enabled="true"android:exported="true"android:process=":pushservice"><intent-filter><action android:name="com.huawei.push.msg.NOTIFY_MSG" /><action android:name="com.huawei.push.msg.PASSBY_MSG" /></intent-filter>
</service>
<!--华为推送.......................................结束...................................................... -->
上面的HuaweiPushRevicer为自定义的一个广播接收器,如下:
public class HuaweiPushRevicer extends PushReceiver {public static final String TAG = "HuaweiPushRevicer";public static final String ACTION_UPDATEUI = "action.updateUI";public static final String ACTION_TOKEN = "action.updateToken";private static List<IPushCallback> pushCallbacks = new ArrayList<IPushCallback>();private static final Object CALLBACK_LOCK = new Object();public interface IPushCallback {void onReceive(Intent intent);}public static void registerPushCallback(IPushCallback callback) {synchronized (CALLBACK_LOCK) {pushCallbacks.add(callback);}}public static void unRegisterPushCallback(IPushCallback callback) {synchronized (CALLBACK_LOCK) {pushCallbacks.remove(callback);}}@Overridepublic void onToken(Context context, String tokenIn, Bundle extras) {Log.e("onToken:", tokenIn);String belongId = extras.getString("belongId");Intent intent = new Intent();intent.setAction(ACTION_TOKEN);intent.putExtra(ACTION_TOKEN, tokenIn);callBack(intent);intent = new Intent();intent.setAction(ACTION_UPDATEUI);intent.putExtra("log", "belongId is:" + belongId + " Token is:" + tokenIn);callBack(intent);}@Overridepublic boolean onPushMsg(Context context, byte[] msg, Bundle bundle) {Log.e("onPushMsg:", "接收消息");try {//CP可以自己解析消息内容,然后做相应的处理 | CP can parse message content on its own, and then do the appropriate processingString content = new String(msg, "UTF-8");Intent intent = new Intent();intent.setAction(ACTION_UPDATEUI);intent.putExtra("log", "Receive a push pass message with the message:" + content);callBack(intent);} catch (Exception e) {Intent intent = new Intent();intent.setAction(ACTION_UPDATEUI);intent.putExtra("log", "Receive push pass message, exception:" + e.getMessage());callBack(intent);}return false;}public void onEvent(Context context, Event event, Bundle extras) {Log.e("onEvent:", "事件");Intent intent = new Intent();intent.setAction(ACTION_UPDATEUI);int notifyId = 0;if (Event.NOTIFICATION_OPENED.equals(event) || Event.NOTIFICATION_CLICK_BTN.equals(event)) {notifyId = extras.getInt(BOUND_KEY.pushNotifyId, 0);if (0 != notifyId) {NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);manager.cancel(notifyId);}}String message = extras.getString(BOUND_KEY.pushMsgKey);intent.putExtra("log", "Received event,notifyId:" + notifyId + " msg:" + message);callBack(intent);super.onEvent(context, event, extras);}@Overridepublic void onPushState(Context context, boolean pushState) {Log.e("onPushState:", "接收状态");Intent intent = new Intent();intent.setAction(ACTION_UPDATEUI);intent.putExtra("log", "The Push connection status is:" + pushState);callBack(intent);}private static void callBack(Intent intent) {synchronized (CALLBACK_LOCK) {for (IPushCallback callback : pushCallbacks) {if (callback != null) {callback.onReceive(intent);}}}}
4、在Application的onCreate()方法中初始化:
HMSAgent.init(this);
5、连接华为通道,获取唯一token
在主activity中实现HuaweiPushRevicer.IPushCallback 接口,
同时:在onCreate()方法中
HuaweiPushRevicer.registerPushCallback(this);
HMSAgent.connect(this, new ConnectHandler() {@Overridepublic void onConnect(int rst) {Log.e("HuaWeiRegister:", "HMS connect end:" + rst);}
});
然后我们就可以在实现的onReceive方法中拿到token了...如下:
@Override
public void onReceive(Intent intent) {if (intent != null) {String action = intent.getAction();Bundle b = intent.getExtras();if (b != null && "action.updateToken".equals(action)) {String token = b.getString("action.updateToken");Log.d("HuaWeiRegister", "华为连接成功token:" + token);}}
}
华为推送结束。
二、小米推送
1、下载Android SDK,解压后把sdk文件下的jar包拷贝到项目的libs下。
2、在AndroidManifest文件添加以下内容:
权限:
<uses-permission android:name="android.permission.GET_TASKS" />//好像可以不加
<!--xiaomi推送.....................................开始.......................................................-->
<serviceandroid:name="com.xiaomi.push.service.XMPushService"android:enabled="true"android:process=":pushservice" /><receiverandroid:name=".server.XiaomiPushReceiver"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>
<serviceandroid:name="com.xiaomi.push.service.XMJobService"android:enabled="true"android:exported="false"android:permission="android.permission.BIND_JOB_SERVICE"android:process=":pushservice" /> <!--注:此service必须在3.0.1版本以后(包括3.0.1版本)加入--><serviceandroid:name="com.xiaomi.mipush.sdk.PushMessageHandler"android:enabled="true"android:exported="true" /><serviceandroid:name="com.xiaomi.mipush.sdk.MessageHandleService"android:enabled="true" /> <!--注:此service必须在2.2.5版本以后(包括2.2.5版本)加入-->
<receiverandroid: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>
<receiverandroid:name="com.xiaomi.push.service.receivers.PingReceiver"android:exported="false"android:process=":pushservice"><intent-filter><action android:name="com.xiaomi.push.PING_TIMER" /></intent-filter>
</receiver>
上面的XiaomiPushReceiver为自定义的广播接收器,当我们配置完成后就可以在onCommandResult()方法中拿到token
如下:
public class XiaomiPushReceiver extends PushMessageReceiver {@Overridepublic void onReceivePassThroughMessage(Context context, MiPushMessage message) {}@Overridepublic void onNotificationMessageClicked(Context context, MiPushMessage message) {}@Overridepublic void onNotificationMessageArrived(Context context, MiPushMessage message) {}@Overridepublic void onCommandResult(Context context, MiPushCommandMessage message) {String command = message.getCommand();List<String> arguments = message.getCommandArguments();if (MiPushClient.COMMAND_REGISTER.equals(command)) {if (message.getResultCode() == ErrorCode.SUCCESS) {String mRegID = arguments.get(0);Log.d("小米registerID", mRegID)
}}}@Overridepublic void onReceiveRegisterResult(Context context, MiPushCommandMessage message) {}@Overridepublic void onRequirePermissions(Context context, String[] permissions) {super.onRequirePermissions(context, permissions);}@SuppressLint("SimpleDateFormat")private static String getSimpleDate() {return new SimpleDateFormat("MM-dd hh:mm:ss").format(new Date());}public String arrayToString(String[] strings) {String result = " ";for (String str : strings) {result = result + str + " ";}return result;} }
3、在Application的onCreate()方法中初始化:
MiPushClient.registerPush(this, "你的AppID", "你的AppKey");
然后就可以在XiaomiPushReceiver中拿到registerID了
小米push结束。
三、OPPO推送
1、下载Android SDK,解压后把jar拷贝到我们项目的libs下。
2、在AndroidManifest文件添加以下内容:
<!--OPPO推送.......................................开始 ...................................................... -->
<serviceandroid:name="com.coloros.mcssdk.PushService"android:permission="com.coloros.mcs.permission.SEND_MCS_MESSAGE"><intent-filter><action android:name="com.coloros.mcs.action.RECEIVE_MCS_MESSAGE" /></intent-filter>
</service>
<!--OPPO推送.......................................结束 ...................................................... -->
3、在Application的onCreate()方法中初始化,初始化成功后会拿到registerId:
PushManager.getInstance().register(this, "你的appkey", "你的appsecret", new PushCallback() {@Overridepublic void onRegister(int code, String s) {if (code == 0) {Log.d("oppo注册成功", "registerId:" + s);setOPPOPushPassageway();} else {Log.d("oppo注册失败", "code=" + code + ",msg=" + s);}}@Overridepublic void onUnRegister(int i) {}@Overridepublic void onGetAliases(int i, List<SubscribeResult> list) {}@Overridepublic void onSetAliases(int i, List<SubscribeResult> list) {}@Overridepublic void onUnsetAliases(int i, List<SubscribeResult> list) {}@Overridepublic void onSetUserAccounts(int i, List<SubscribeResult> list) {}@Overridepublic void onUnsetUserAccounts(int i, List<SubscribeResult> list) {}@Overridepublic void onGetUserAccounts(int i, List<SubscribeResult> list) {}@Overridepublic void onSetTags(int i, List<SubscribeResult> list) {}@Overridepublic void onUnsetTags(int i, List<SubscribeResult> list) {}@Overridepublic void onGetTags(int i, List<SubscribeResult> list) {}@Overridepublic void onGetPushStatus(int i, int i1) {}@Overridepublic void onSetPushTime(int i, String s) {}@Overridepublic void onGetNotificationStatus(int i, int i1) {}
});
OPPO在android 8.0版本后需要创建通道:
//oppo推送通道配置
private void setOPPOPushPassageway() {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && PushManager.isSupportPush(this)) {String channelId = "oppoPush";//记住此channelId ,可自定义String channelName = "通知消息";//记住此channelName ,可自定义int importance = NotificationManager.IMPORTANCE_HIGH;NotificationChannel channel = new NotificationChannel(channelId, channelName, importance);NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);notificationManager.createNotificationChannel(channel);}
}
在客户端创建好通道之后,服务端则需要根据此通道ID来推送消息。在手机上需要把通道的允许通知权限也打开才能收到消息。
四、vivo推送
1、下载sdk,下载Android SDK,解压后把libs下的jar包拷贝到我们项目的libs下。
2、在AndroidManifest文件添加以下内容,同时拿到你应用的apikey和appid对应替换:
<!--vivo推送.......................................开始.......................................................-->
<meta-dataandroid:name="com.vivo.push.api_key"android:value="你的apiKey"/>
<meta-dataandroid:name="com.vivo.push.app_id"android:value="你的AppID" /><receiver android:name=".server.VivoPushMessageReceiver"><intent-filter><!-- 接收push消息 --><action android:name="com.vivo.pushclient.action.RECEIVE" /></intent-filter>
</receiver>
<serviceandroid:name="com.vivo.push.sdk.service.CommandClientService"android:exported="true" />
<activityandroid:name="com.vivo.push.sdk.LinkProxyClientActivity"android:exported="false"android:screenOrientation="portrait"android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<!--vivo推送.......................................结束.......................................................-->
VivoPushMessageReceiver为自定义的广播接收器:
public class VivoPushMessageReceiver extends OpenClientPushMessageReceiver {@Overridepublic void onNotificationMessageClicked(Context context, UPSNotificationMessage upsNotificationMessage) {long msgId;String customeContent = "";if (upsNotificationMessage != null) {msgId = upsNotificationMessage.getMsgId();customeContent = upsNotificationMessage.getSkipContent();Log.e("NPL", "获取通知内容如下:msgId = " + msgId + ";customeContent=" + customeContent);}}@Overridepublic void onReceiveRegId(Context context, String s) {if (TextUtils.isEmpty(s)) {//获取regId失败Log.e("NPL", "获取RegId失败");} else {Log.e("NPL", "获取registerId成功,registerId= " + s);}}
3、在Application的onCreate()方法中初始化,初始化成功后就可以在VivoPushMessageReceiver中拿到registerId:
PushClient.getInstance(this).initialize();
PushClient.getInstance(this).turnOnPush(new IPushActionListener() {@Overridepublic void onStateChanged(int i) {if (i == 0) {Log.e("NPL", "打开推送服务成功");} else {Log.e("NPL", "打开推送服务失败");}}
});
vivo推送特别注意:
上面的appid不是下图的id:
而是下图的appid,appkey也是下图的:
完成。.
Android 集成华为推送,集成小米推送,集成OPPO推送,集成vivo推送相关推荐
- vivo 推送平台架构演进
本文根据Li Qingxin老师在"2021 vivo开发者大会"现场演讲内容整理而成.公众号回复**[2021VDC]**获取互联网技术分会场议题相关资料. 一.vivo推送平台 ...
- Android 推送集成华为,小米,友盟
公司的 app 一直使用的是极光推送,最近反馈比较多的是推送消息收不到,看来需要找新的推送服务了,在国内目前手机品牌占有率比较多的是华为和小米,且这两家都有自己的推送服务,同时一个合作的友商说他们使用 ...
- 集成推送(极光+小米+华为)总结(java服务端)
公司app集成了极光推送,前前后后在这上面费了不少时间了,总结下自己的理解和遇到的问题. 只用过极光推送,所以下面都以极光推送为例.(后面新增小米和华为) 1..都有什么品牌的推送服务? 集成什么品 ...
- Android集成华为推送功能详细
1.前言 Android集成推送功能也算是有好几个SDK了,包括极光.个推.小米.百度云推送.但是真心感觉华为的文档写的太差,封装的也不好,别的开发文档看一两遍就能按照文档集成成功,而华为仔细看了几遍 ...
- Android - 集成华为推送
Android ~ 集成华为推送 功能流程如下图所示: 开发流程 一.配置AppGallery Connect 1.注册成为开发者 注册 实名认证 2.创建应用 创建项目 在项目下添加应用 3.生成签 ...
- Android极光推送厂商离线通道集成文档及flutter集成总结
<极光推送厂商离线通道集成文档> flutter集成指南 1.Android端配置 gradle配置 //极光推送def jpushVersion = '4.4.0'implementat ...
- java集成华为推送
集成华为推送 这类推送一般官方文档都比较详细,如果想要更加详细的了解建议查看官方文档. 官方文档地址:https://developer.huawei.com/consumer/cn/service/ ...
- Android开发之推送服务(三) 集成Oppo和vivo推送
Oppo推送服务,也是在Oppo手机中使用的比较多.而且现在Oppo和Vivo两款手机最早提出美颜功能,所以这两款手机在市场上的占有率还是比较高的. Oppo推送目前已经开发注册,Vivo目前只对部分 ...
- java集成_java集成华为推送
集成华为推送 这类推送一般官方文档都比较详细,如果想要更加详细的了解建议查看官方文档. 官方文档地址:https://developer.huawei.com/consumer/cn/service/ ...
最新文章
- 用户画像技术及方法论
- 从单体应用转为分布式系统:来自Deliveroo的实践
- php和python对比-PHP、Python和Javascript的装饰器模式对比
- IIS 下配置无后缀的URL ReWrite
- 大数据中心周边辐射大吗_PETCT有辐射,PETCT对陪同人员的影响大吗?
- 统计学习笔记(4)——朴素贝叶斯法
- SQUEEZENET: ALEXNET-LEVEL ACCURACY WITH 50X FEWER PARAMETERS AND 0.5MB MODEL SIZE
- 2018-08-13 谷歌 protobuf-lite:3.0.1
- Springsecurity之UserDetails
- 指定Pycharm在py3.6环境下启动
- Axure元件库web组件库典藏版 (含五大类159小类组件 )
- Ambari技术介绍-尚硅谷大数据培训
- 网管培训之基础知识介绍
- 你需要权限来执行此操作 你需要来自Administrators的权限才能对此文件夹进行更改
- 天池比赛-02-用Apriori算法进行商品关联分析
- 经验分布函数无偏性的证明和方差的推导
- “金蝶KIS记账王”双11五折特惠
- (转)Linux 一句话精彩问答
- 商业房间分隔器行业调研报告 - 市场现状分析与发展前景预测
- 电磁场与微波技术专业考研必读
热门文章
- batchupdate一次多少条合适_汽车机油多少公里换一次比较合适?维修工说出实话...
- JS监听安卓手机返回键
- 关于云计算运维管理要点的知识分享
- Linux离线安装PyYAML,linux windows 离线安装PyYaml Import Error: No module named pyyaml
- JavaSE —— 什么是Java???
- 02.Java动态代理实现与原理分析之静态代理
- Qt msvc使用basler 相机pylon sdk进行windows编程测试
- 电商直播两条路:孵化红人卖货给粉丝,或者用直播服务消费者
- 一起自学SLAM算法:11.2 环境感知
- 一个程序猿必须会玩的游戏