1、前言

现在好多手机都有APP推送功能,也有好多第三方的SDK,那为什么还要集成只有小米手机好使的“小米推送”呢?因为在小米手机中,小米推送是“系统级通道”,就是在APP关闭的情况下,也能很快的到达。而第三方SDK只能通过自己的代码进行保活,效果远远达不到小米推送的效果,所以如果是小米手机,用小米推送效果会更好。

完美推送功能总结+集成极光推送:https://blog.csdn.net/f552126367/article/details/79961260

华为推送功能:https://blog.csdn.net/f552126367/article/details/84180870

2、小米推送的集成

集成小米推送还是比较简单的。

(1)需要去小米开放平台注册一个账户,然后开通开发者选项:https://dev.mi.com/console/;注册完开发者会有一个审核期,个人感觉还是比较快的。

(2)然后去控制台中注册自己的应用:如下图所示:

(3)在应用信息中找到自己程序的信息,在开发时会用到

4)集成到自己的APP程序,首先需要下载jar包,可以去官网下载源码,将Jar包下载下来,名字叫:MiPush_SDK_Client_3_6_9

(5)可参考官网给的文章:https://dev.mi.com/console/doc/detail?pId=41

(6)在AndroidMaifest配置

    <!--小米推送需要用到的权限--><uses-permission android:name="android.permission.GET_TASKS" /><uses-permission android:name="android.permission.VIBRATE"/><permission android:name="com.fei.main.permission.MIPUSH_RECEIVE" android:protectionLevel="signature" /> <!--这里com.xiaomi.mipushdemo改成app的包名--><uses-permission android:name="com.fei.main.permission.MIPUSH_RECEIVE" /><!--这里com.xiaomi.mipushdemo改成app的包名--><!--小米推送服务需要用到的service--><service android:enabled="true" android:process=":pushservice" android:name="com.xiaomi.push.service.XMPushService"/><service android: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版本)加入--><service android:enabled="true" android:exported="true" android:name="com.xiaomi.mipush.sdk.PushMessageHandler" /><service android:enabled="true" android:name="com.xiaomi.mipush.sdk.MessageHandleService" /> <!--注:此service必须在2.2.5版本以后(包括2.2.5版本)加入--><receiver android:exported="true" android:name="com.xiaomi.push.service.receivers.NetworkStatusReceiver" ><intent-filter><action android:name="android.net.conn.CONNECTIVITY_CHANGE" /><category android:name="android.intent.category.DEFAULT" /></intent-filter></receiver><receiver android:exported="false" android:process=":pushservice" android:name="com.xiaomi.push.service.receivers.PingReceiver" ><intent-filter><action android:name="com.xiaomi.push.PING_TIMER" /></intent-filter></receiver><receiverandroid:exported="true"android:name="com.fei.main.module.note.DemoMessageReceiver"><!--这里com.xiaomi.mipushdemo.DemoMessageRreceiver改成app中定义的完整类名--><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>

(7)在自己的Application中配置初始化小米推送功能

public class MyApplication extends Application {public static Context app;public static final String APP_ID = "2882303761517893717";public static final String APP_KEY = "5681789363717";public static final String TAG = "com.fei.main";@Overridepublic void onCreate() {super.onCreate();Fresco.initialize(this);//初始化加载短信验证功能MobSDK.init(this);//初始化小米push推送服务if(shouldInit()) {MiPushClient.registerPush(this, APP_ID, APP_KEY);}}@Overrideprotected void attachBaseContext(Context base) {super.attachBaseContext(base);app=getApplicationContext();RxRetrofitApp.init(this,BuildConfig.DEBUG);}private boolean shouldInit() {ActivityManager am = ((ActivityManager) getSystemService(Context.ACTIVITY_SERVICE));List<RunningAppProcessInfo> processInfos = am.getRunningAppProcesses();String mainProcessName = getPackageName();int myPid = Process.myPid();for (RunningAppProcessInfo info : processInfos) {if (info.pid == myPid && mainProcessName.equals(info.processName)) {return true;}}return false;}

(8)创建接收信息的Message类

public class DemoMessageReceiver extends PushMessageReceiver {private String mRegId;private long mResultCode = -1;private String mReason;private String mCommand;private String mMessage;private String mTopic;private String mAlias;private String mUserAccount;private String mStartTime;private String mEndTime;@Overridepublic void onReceivePassThroughMessage(Context context, MiPushMessage message) {mMessage = message.getContent();if(!TextUtils.isEmpty(message.getTopic())) {mTopic=message.getTopic();} else if(!TextUtils.isEmpty(message.getAlias())) {mAlias=message.getAlias();} else if(!TextUtils.isEmpty(message.getUserAccount())) {mUserAccount=message.getUserAccount();}}@Overridepublic void onNotificationMessageClicked(Context context, MiPushMessage message) {mMessage = message.getContent();if(!TextUtils.isEmpty(message.getTopic())) {mTopic=message.getTopic();} else if(!TextUtils.isEmpty(message.getAlias())) {mAlias=message.getAlias();} else if(!TextUtils.isEmpty(message.getUserAccount())) {mUserAccount=message.getUserAccount();}}@Overridepublic void onNotificationMessageArrived(Context context, MiPushMessage message) {mMessage = message.getContent();if(!TextUtils.isEmpty(message.getTopic())) {mTopic=message.getTopic();} else if(!TextUtils.isEmpty(message.getAlias())) {mAlias=message.getAlias();} else if(!TextUtils.isEmpty(message.getUserAccount())) {mUserAccount=message.getUserAccount();}}@Overridepublic void onCommandResult(Context context, MiPushCommandMessage message) {String command = message.getCommand();List<String> arguments = message.getCommandArguments();String cmdArg1 = ((arguments != null && arguments.size() > 0) ? arguments.get(0) : null);String cmdArg2 = ((arguments != null && arguments.size() > 1) ? arguments.get(1) : null);if (MiPushClient.COMMAND_REGISTER.equals(command)) {if (message.getResultCode() == ErrorCode.SUCCESS) {mRegId = cmdArg1;}} else if (MiPushClient.COMMAND_SET_ALIAS.equals(command)) {if (message.getResultCode() == ErrorCode.SUCCESS) {mAlias = cmdArg1;}} else if (MiPushClient.COMMAND_UNSET_ALIAS.equals(command)) {if (message.getResultCode() == ErrorCode.SUCCESS) {mAlias = cmdArg1;}} else if (MiPushClient.COMMAND_SUBSCRIBE_TOPIC.equals(command)) {if (message.getResultCode() == ErrorCode.SUCCESS) {mTopic = cmdArg1;}} else if (MiPushClient.COMMAND_UNSUBSCRIBE_TOPIC.equals(command)) {if (message.getResultCode() == ErrorCode.SUCCESS) {mTopic = cmdArg1;}} else if (MiPushClient.COMMAND_SET_ACCEPT_TIME.equals(command)) {if (message.getResultCode() == ErrorCode.SUCCESS) {mStartTime = cmdArg1;mEndTime = cmdArg2;}}}@Overridepublic void onReceiveRegisterResult(Context context, MiPushCommandMessage message) {String command = message.getCommand();List<String> arguments = message.getCommandArguments();String cmdArg1 = ((arguments != null && arguments.size() > 0) ? arguments.get(0) : null);String cmdArg2 = ((arguments != null && arguments.size() > 1) ? arguments.get(1) : null);if (MiPushClient.COMMAND_REGISTER.equals(command)) {if (message.getResultCode() == ErrorCode.SUCCESS) {mRegId = cmdArg1;}}}

(9)备注

OK,大功告成,是不是很简单,在程序中可以通过设置《别名》来识别要推送的用户,程序中可以是记录的主键ID或者是唯一标识符,。注册别名的方法如下:

MiPushClient.setAlias(this@MessagePushActivity, “123456789”, null)

Android 集成小米推送功能教程相关推荐

  1. Android集成华为推送功能详细

    1.前言 Android集成推送功能也算是有好几个SDK了,包括极光.个推.小米.百度云推送.但是真心感觉华为的文档写的太差,封装的也不好,别的开发文档看一两遍就能按照文档集成成功,而华为仔细看了几遍 ...

  2. Android 集成小米推送

    前言 在Android开发中,消息推送功能的使用非常常见. 为了降低开发成本,使用第三方推送是现今较为流行的解决方案. 今天,我将手把手教大家如何在你的应用里集成小米推送 该文档基于小米推送官方Dem ...

  3. Android集成华为推送教程

    前言 目前Android应用在后台杀死进程之后,就收不到通知了,想要接收消息推送,需要集成各个厂商的推送SDK,本次讲解华为集成最新教程 1.配置AppGallery Connect 1)注册成为开发 ...

  4. Android - 集成华为推送

    Android ~ 集成华为推送 功能流程如下图所示: 开发流程 一.配置AppGallery Connect 1.注册成为开发者 注册 实名认证 2.创建应用 创建项目 在项目下添加应用 3.生成签 ...

  5. Android消息推送:手把手教你集成小米推送

    <script type="text/javascript" src="http://static.blog.csdn.net/scripts/category.j ...

  6. Android开发之推送服务(二) 集成小米推送

    小米推送主要是用来适配小米手机的.所以,在做的时候,一般会判断当前手机是否是小米手机,如果是小米手机,则去使用小米推送,注册小米推送,如果不是,则默认使用Umeng推送. 在集成小米推送之前,需要先注 ...

  7. Android集成极光推送踩坑(二)升级篇

    转载请标明出处 http://blog.csdn.net/mohan6/article/details/74133186 本文作者:[默寒的博客] 前言 前段时间针对集成极光推送写了篇文章( Andr ...

  8. Android集成极光推送和踩过的坑(一)

    转载请标明出处 http://blog.csdn.net/mohan6/article/details/72960346 本文作者:[默寒的博客] 集成步骤以及集成过程遇到的坑: 这部分主要阐述了集成 ...

  9. netty框架android,隻需五步,即可基於Netty框架實現Android內網推送功能。

    隻需五步,即可基於Netty框架實現Android內網推送功能. 一.先引入依賴,客戶端和服務端用的都是同一個依賴netty-all. Android Studio中Gradle配置: compile ...

最新文章

  1. 开源监控软件-Nagios-Rhel5.9安装手册
  2. 了解【Docker】从这里开始
  3. LeTax如何多行注释
  4. Service IP 原理 - 每天5分钟玩转 Docker 容器技术(137)
  5. Windows 如何通过命令启动和关闭 Tomcat
  6. jstorm 读取mysql_jstorm运维经验转载
  7. 关于jq easyui 刷新tabs的问题
  8. 超好用的SVN使用教程!!不看血亏!!
  9. 简述u盘安装计算机系统的方法,电脑系统安装常见的两种方式(U盘)
  10. v-for中的key
  11. itertools.chain
  12. 100000以内的水仙花数C语言,找出1000000内的水仙花数
  13. Soft Filter Pruning(SFP)算法笔记
  14. JQuery开发手册
  15. 不是吧阿sir,你不会还不知道Github可以当做Maven仓库吧
  16. 圆柱体积怎么算立方公式_圆柱体积怎么算 求圆柱体积的公式
  17. WLAN使用的功率单位
  18. Python 字符串常见的语句,和练习题,字符串练习题 Python 切片函数修饰符 #精度和进制Python 字符串一些语句练课件练习题
  19. ntp计算机系统时间总是跳,电脑时间老是自动跳的解决方法 电脑时间每小时自动校准方法的图文教程...
  20. uniq命令注意事项,检查重复行的时候,只会检查相邻的行。

热门文章

  1. mysql在什么情况下会变成全局查询_Linux下MYSQL数据语言,全局变量,查询
  2. 需求分析 及需求文档的编写
  3. 北塔网管软件BTSO2.5安装过程记录
  4. 如何封禁IP和IP段 看完这篇我会了
  5. oracle linux i386,在CentOS 5.5 i386 上安装 Oracle 10G XE
  6. 零基础边缘端智能安防训练营 | Lesson 2
  7. [计网:原理与实践] 第五章:端到端协议(课后习题整理)
  8. 电信机顶盒怎么连接鸿蒙系统电视,「天翼高清电视」电信高清机顶盒怎么连接电视 - 鲲鹏装修网...
  9. 机器学习算法(一):k-近邻理论与python实现+经典应用(约会网站匹配、手写识别系统)
  10. SimPy: Simulation with SimPy