前置步骤:

在[小米开发者站](http://developer.xiaomi.com/)开通小米开发者账号。

创建应用,开发者账号审核通过后你就可以在开发者站创建你的应用。

开启应用的推送服务。

下载SDK、文档和DEMO。

完成1、2、3步骤之后,在小米平台的界面你会看到跟下图类似的界面:

image.png

然后就可以到你的项目中开始配置了。

①配置AndroidManifest.xml

增加权限:

android:protectionLevel="signature" />

推送服务需要配置的service和receiver:

自定义一个BroadcastReceiver类:

public class XiaoMiMessageReceiver extends PushMessageReceiver {

private String mRegId;

private String mTopic;

private String mAlias;

private String mAccount;

private String mStartTime;

private String mEndTime;

/**

* 用来接收服务器发送的透传消息

*

* @param context

* @param miPushMessage

*/

@Override

public void onReceivePassThroughMessage(Context context, MiPushMessage miPushMessage) {

super.onReceivePassThroughMessage(context, miPushMessage);

if (!TextUtils.isEmpty(miPushMessage.getTopic())) {

mTopic = miPushMessage.getTopic();

} else if (!TextUtils.isEmpty(miPushMessage.getAlias())) {

mAlias = miPushMessage.getAlias();

}

Message msg = Message.obtain();

}

/**

* 用来接收服务器发来的通知栏消息(用户点击通知栏时触发)

*

* @param context

* @param miPushMessage

*/

@Override

public void onNotificationMessageClicked(Context context, MiPushMessage miPushMessage) {

super.onNotificationMessageClicked(context, miPushMessage);

String url = "";

url = miPushMessage.getExtra().get(MessageEntity.Link);

Intent intentGo = new Intent();

intentGo.putExtra("link", url);

intentGo.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);

intentGo.setClass(context, XiaoMiPushMessageActivity.class);

context.startActivity(intentGo);

}

/**

* 用来接收服务器发来的通知栏消息(消息到达客户端时触发,并且可以接收应用在前台时不弹出通知的通知消息)

*

* @param context

* @param miPushMessage

*/

@Override

public void onNotificationMessageArrived(Context context, MiPushMessage miPushMessage) {

super.onNotificationMessageArrived(context, miPushMessage);

}

/**

* 用来接受客户端向服务器发送注册命令消息后返回的响应。

*

* @param context

* @param miPushCommandMessage

*/

@Override

public void onReceiveRegisterResult(Context context, MiPushCommandMessage miPushCommandMessage) {

super.onReceiveRegisterResult(context, miPushCommandMessage);

String command = miPushCommandMessage.getCommand();

List arguments = miPushCommandMessage.getCommandArguments();

String cmdArg1 = ((arguments != null && arguments.size() > 0) ? arguments.get(0) : null);

if (MiPushClient.COMMAND_REGISTER.equals(command)) {

if (miPushCommandMessage.getResultCode() == ErrorCode.SUCCESS) {

mRegId = cmdArg1;

Log.d("XiaoMiMessageReceiver", "xiaomi push id:" + mRegId);

//在这里就可以保存mRegId了,传给后台服务器

}

}

}

/**

* 用来接收客户端向服务器发送命令消息后返回的响应

*

* @param context

* @param miPushCommandMessage

*/

@Override

public void onCommandResult(Context context, MiPushCommandMessage miPushCommandMessage) {

super.onCommandResult(context, miPushCommandMessage);

}

}

上面的代码中,需要注意这一个方法:

/**

* 用来接收服务器发来的通知栏消息(用户点击通知栏时触发)

*

* @param context

* @param miPushMessage

*/

@Override

public void onNotificationMessageClicked(Context context, MiPushMessage miPushMessage) {

super.onNotificationMessageClicked(context, miPushMessage);

String url = "";

url = miPushMessage.getExtra().get(MessageEntity.Link);

Intent intentGo = new Intent();

intentGo.putExtra("link", url);

intentGo.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);

intentGo.setClass(context, XiaoMiPushMessageActivity.class);

context.startActivity(intentGo);

}

如果在onNotificationMessageClicked方法中执行跳转,会发现有时候跳转不了,或者根本无响应,不知是因为上面方法都是非UI线程,还是小米的系统机制问题,(APP退到后台时间长,或者手动完全退出APP之后,点击消息通知也无法重新唤醒APP)在跳转时加入

intentGo.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);

然后为了方便分离逻辑,我新建了一个空白的activity,小米的推送服务先跳转到这个空白的activity,然后在activity中处理自己的逻辑(例如APP是否已经正在使用,是就直接提示不重启,没在使用APP就重新唤起APP)

public class XiaoMiPushMessageActivity extends AppCompatActivity {

@Override

protected void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

Intent intent = getIntent();

int nativeRedirect = intent.getIntExtra("redirect", 0);

String url = intent.getStringExtra("link");

int pageType = intent.getIntExtra("pageType", 0);

if (TnaotApplication.Companion.instance().isExistMainActivity()) {

//app已经启动

ActivityUtils.startTagActivityForNotification(this, nativeRedirect, url, pageType, openMethod, newsType, newsId, title, title, content, thumb, false);

} else {

//APP重新唤醒

Intent startIntent = PushUtil.initIntentData(nativeRedirect, url, pageType, newsType, newsId, thumb, title, content);

startIntent.setClass(this, MainActivity.class);

startActivity(startIntent);

}

finish();

}

}

在AndroidManifest.xml中注册这个activity:

android:name=".mctpush.mipush.XiaoMiPushMessageActivity"

android:configChanges="keyboardHidden|screenSize|orientation"

android:screenOrientation="portrait"

android:theme="@style/SplashTheme" />

最后就是application中初始化小米推送:

public static void initMiPush(Context context) {

if (shouldInit(context)) {

MiPushClient.registerPush(context, MI_APP_ID, MI_APP_KEY);

}

}

到这里就完成了小米推送的集成了。

android小米推送,Android集成小米推送相关推荐

  1. Android 集成华为推送,集成小米推送,集成OPPO推送,集成vivo推送

    最近有时间在我们的应用中集成了华为,小米,OPPO,vivo四大平台的推送,一切顺利. 这里做一个记录, 开撸: 一.华为推送 1.下载HMS Agent套件,解压如下: 找到GetHMSAgent_ ...

  2. android 极光推送测试,Android 3分钟带你集成极光推送

    话不多说 首先申请极光的账号,(官方地址:https://www.jiguang.cn) 1561710140829.png 登录完成之后,先看到这个地方 ,我个人比较喜欢用旧版本,这里点击旧版 15 ...

  3. 推送消息不打烊--Flutter集成个推SDK实现Android和IOS原生推送

    theme: condensed-night-purple highlight: a11y-dark 嗨!这里是甜瓜看代码,大家五一快乐呀,这篇文章跟大家聊聊怎么集成个推. Flutter集成个推SD ...

  4. 跨平台应用开发进阶(十一) :uni-app 实现IOS原生APP-云打包集成极光推送(JG-JPUSH)详细教程

    文章目录 一.前言 二.资源 三.集成 四.遇到的问题及解决措施 4.1 IOS开发者证书无推送权限 4.2 manifest中并没有配置push模块.但云端打包ios就是一直报Code Signin ...

  5. Android 集成小米推送功能教程

    1.前言 现在好多手机都有APP推送功能,也有好多第三方的SDK,那为什么还要集成只有小米手机好使的"小米推送"呢?因为在小米手机中,小米推送是"系统级通道", ...

  6. Android集成小米华为推送以及收不到离线消息的坑

    华为推送 1.应用被杀后,无法收到透传消息? 应用被杀死后,无法收到透传消息,再手动打开app,也收不到之前发送的消息,像有的第三SDK,应用被杀后,再打开app,还可以收到之前的离线消息,华为推送不 ...

  7. 友盟小米收不到推送消息_一个轻量级、可插拔的Android消息推送框架。一键集成推送(极光推送、友盟推送、华为、小米推送等)...

    XPush 一个轻量级.可插拔的Android消息推送框架.一键集成推送(极光推送.友盟推送.华为.小米推送等),提供有效的保活机制,支持推送的拓展,充分解耦推送和业务逻辑,解放你的双手! 在提iss ...

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

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

  9. Android 集成小米推送

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

  10. android 如何集成小米和极光推送

    1.在小米和极光的官网平台的创建应用,获取到appkey. 极光创建后直接下载官方的Demo, 小米在官网上下载SDK:https://dev.mi.com/mipush/downpage/ 2.分别 ...

最新文章

  1. bootstrap-wysiwyg中JS控件富文本的用法
  2. php中mysql自增_MySQL的自增字段
  3. linux rz xshell
  4. JAVA中“==”与equals()方法区别
  5. 海量数据随机抽样问题(蓄水池问题)
  6. 机器学习-算法背后的理论与优化(part5)--结构风险最小(下)
  7. 一句话征服了美国人,这位饱受争议的数学博士竟从未上过学?
  8. NVIDIA向交通运输行业开源其自动驾驶汽车深度神经网络
  9. 4种Golang并发操作中常见的死锁情形
  10. 2019 ACM/ICPC 南昌站 G,拉格朗日插值
  11. 操作系统之进程和线程
  12. 分析称2015年手机文娱将激增至540亿美元
  13. C# 递归函数详细介绍及使用方法
  14. tigase关闭damain的匿名认证(anonymous authentication)
  15. C99 designator ‘name’ outside aggregate initializer
  16. 类的成员函数指针(比较深入)
  17. 配置管理——配置管理委员会
  18. [19保研]北京大学信息工程学院关于举办“2018年全国优秀大学生科技夏令营”的通知...
  19. YTU 计算机网络课程设计
  20. 认识Kernel 内存泄漏

热门文章

  1. 世上最全计算机网络面试整理(附答案),不服来战!!
  2. 黑苹果Big Sur下驱动高通模块Atheros DHXA-195(AR9285无线网卡和AR3011 蓝牙3.0)
  3. spss下载以及安装详细教程
  4. wavecn 2.0.0.5 正式版_iOS12.1.4正式版更新了什么 苹果iOS12.1.4新特性与升降级全攻略...
  5. LaTeX论文排版操作模板
  6. 计算机二级c语言编程题库100题下载,计算机二级C语言编程题库100题.doc
  7. 比较两个数的大小的代码比较:(C语言)
  8. java反射(面试题)
  9. 51单片机12864的使用方法
  10. 机器人学导论,课后习题答案。