最近这几个月都是在准备找工作和找工作中,付出了很多,总算是有点收获,所以都没有怎么整理笔记。到了最近才有空把自己的笔记整理一下发上来,分享一下我的学习经验。

推送

由于最近项目要用到Android的消息推送,关于Android推送的解决方案有很多种,有C2DM,轮询, SMS,MQTT协议,XMPP协议和第三方平台,经过我们对项目需求的考虑之后我们选择了第三方平台推送的小米推送,下面就是小米推送的实现方法。

实现准备

想要用小米推送首先要去小米开发者平台注册申请开发者账号,经过1到3天的审核之后就会通过,然后就可以申请推送服务。申请一个App的推送服务之后,获得AppID和AppKey就可以去学习它给Demo来使用了,下面我主要就是讲一下我对Demo的理解。

推送说明

推送的内容可以由后台服务端利用小米推送的SDK实现发送,也可以在小米的推送平台发送,发送的消息有两种:通知消息和透传信息。

通知消息:

就是会显示在Android系统通知栏的消息,用户点击它的响应事件要自己实现或者在发送的时候说明点击打开App。

透传消息:

即是透明传送,即传送网络无论传输业务如何,只负责将需要传送的业务传送到目的节点,同时保证传输的质量即可,而不对传输的业务进行处理。就是直接把消息传给App,不会自动在通知栏上显示。

官方Demo说明

官方给出的Demo里面简单地为我们展示了一下小米推送的各种设置和怎样实现接收推送。Demo首先把小米推送的SDK加入Library,然后里面有4个Java文件,如图

第4个Dialog可以不用看,关键是DemoMessageReceiver这个广播接收器,接收推送到的各种信息然后进行处理。还有那个DemoApplication和MainActivity就是用来实现接收到信息的显示。

然后界面是这样的(demo没做屏幕适配,所以就那样了):

一堆关于推送的配置,和一个显示Log的TextView。主要为我们展示了小米推送的使用过程。

DemoMessageReceiver广播接收器

要实现小米推送的移动端接收,核心就是上面说到最主要的DemoMessageReceiver这个广播接收器。这个继承了小米SDK里面的PushMessageReceiver类里面,这个广播接收器可以通过重写下面这5个回调方法来实现对推送的处理。

@Override

public void onReceivePassThroughMessage(Context context, MiPushMessage miPushMessage) {

//用来接收服务器向客户端发送的透传消息,收到透传消息会触发。

}

@Override

public void onNotificationMessageClicked(Context context, MiPushMessage miPushMessage) {

//用来接收服务器向客户端发送的通知消息,这个回调方法会在用户手动点击通知后触发。

}

@Override

public void onNotificationMessageArrived(Context context, MiPushMessage miPushMessage) {

//用来接收服务器向客户端发送的通知消息,这个回调方法是在通知消息到达客户端时触发。另外应用在前台时不弹出通知的通知消息到达客户端也会触发这个回调函数

}

@Override

public void onReceiveRegisterResult(Context context, MiPushCommandMessage miPushCommandMessage) {

//用来接收客户端向服务器发送注册命令后的响应结果

}

@Override

public void onCommandResult(Context context, MiPushCommandMessage miPushCommandMessage) {

//用来接收客户端向服务器发送命令后的响应结果。这里可以收到到各种命令的返回结果,例如注册服务、设置别名之类的结果,在这里可以实现初始化错误然后重启之类的功能。

}

DemoApplication继承Application类

这个Application类的主要功能有设置App的ID和KEY,还有在onCreate方法里面注册推送服务。

在这个Demo里面,它还在里面弄了一个Handler来让广播接收器可以使用它来发Toast和让MainActivity打印Log在TextView上。

// user your appid the key.

private static final String APP_ID = "1000270";

// user your appid the key.

private static final String APP_KEY = "670100056270";

// 此TAG在adb logcat中检索自己所需要的信息, 只需在命令行终端输入 adb logcat | grep

// com.xiaomi.mipushdemo

public static final String TAG = "com.xiaomi.mipushdemo";

private static DemoHandler sHandler = null;

private static MainActivity sMainActivity = null;

@Override

public void onCreate() {

super.onCreate();

// 注册push服务,注册成功后会向DemoMessageReceiver发送广播

// 可以从DemoMessageReceiver的onCommandResult方法中MiPushCommandMessage对象参数中获取注册信息

if (shouldInit()) {

MiPushClient.registerPush(this, APP_ID, APP_KEY);

}

LoggerInterface newLogger = new LoggerInterface() {

@Override

public void setTag(String tag) {

// ignore

}

@Override

public void log(String content, Throwable t) {

Log.d(TAG, content, t);

}

@Override

public void log(String content) {

Log.d(TAG, content);

}

};

Logger.setLogger(this, newLogger);

if (sHandler == null) {

sHandler = new DemoHandler(getApplicationContext());

}

}

//这里是检测进程是否处于前台的方法

private boolean shouldInit() {

ActivityManager am = ((ActivityManager) getSystemService(Context.ACTIVITY_SERVICE));

List 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;

}

MainActivity

Demo里面的MainActivity主要是实现界面的那些按钮的处理,借此来告诉我们怎样设置本地的推送方案,具体的设置有

设置、撤销别名:别名(Alias)是除了Regid(自动生成的)和UserAccount之外的用户标识,可以通过MiPushClient.setAlias()方法和MiPushClient.unsetAlias()来设定和撤销。

设置、撤销用户账号(UserAccoun):可以通过MiPushClient.setUserAccount()方法和MiPushClient.unsetUserAccount()方法来设定和撤销。

订阅、撤销标签:开发者可以结合自己的业务特征,给用户打上不同的标签(Topic)。消息推送时,开发者可以结合每条消息的内容和目标用户,为每条消息选择对应的标签,向打了该标签的所有用户推送消息。可以通过MiPushClient.subscribe()和MiPushClient.unsubscribe()来订阅和取消。

暂停、恢复推送,设置推送时间:设置推送时间Demo用到了一个自制的Dialog类TimeIntervalDialog来让用户设置(强行增大了代码量),可以通过MiPushClient.setAcceptTime()来设置,暂停和恢复是通过pausePush()和resumePush()设置。

不过暂停和恢复底层上的实现其实还是调用设置推送时间为00:00 - 00:00和00:00 - 23:59而已,而且还要注意的是不处在接收时段是暂时不接收推送消息而已,一旦到了接收时段那个消息还是会陆续推送到来。

AndroidManifest文件的配置

首先小米推送支持最低的Android版本是2.2,所以要

后需要的是如下权限:

然后就是要注册一堆的BroadcastReceiver(都是静态注册,因为要长期处在后台运行,还有继承了PushMessageReceiver的DemoMessageReceiver也需要注册不要忘了)和Service,一共是3个广播接收器和4个服务。

android:enabled="true"

android:process=":pushservice"

android:name="com.xiaomi.push.service.XMPushService"/>

android:name="com.xiaomi.push.service.XMJobService"

android:enabled="true"

android:exported="false"

android:permission="android.permission.BIND_JOB_SERVICE"

android:process=":pushservice" />

android:enabled="true"

android:exported="true"

android:name="com.xiaomi.mipush.sdk.PushMessageHandler" />

android:name="com.xiaomi.mipush.sdk.MessageHandleService" />

android:exported="true"

android:name="com.xiaomi.push.service.receivers.NetworkStatusReceiver" >

android:exported="false"

android:process=":pushservice"

android:name="com.xiaomi.push.service.receivers.PingReceiver" >

android:name="com.xiaomi.mipushdemo.DemoMessageReceiver"

android:exported="true">

只要把demo的AppId和AppKey改好成自己的(记得是对应好包名和应用名字的),然后就能够接收相应的推送了。

移动端移植实现

大概理解了这个Demo之后,就可以把小米推送移植到自己的App上去实现自己的需求了,移植的时候要注意:

首先要想好应用的包名,从小米推送平台那里注册,获得AppID和AppKey。

然在把小米推送的SDK加入库。

AndroidManifest文件里面配置好权限(在Android6.0里面的权限可能需要动态获取),注册好那些Service和BroadcastReceiver

在应用开始的时候记得初始化注册小米推送服务。

最后就可以继承一个PushMessageReceiver,在里面为所欲为了。

最后提供一个我写的简化之后的Demo,理解了上面之后可以参考我这个简化的移植了,毕竟上面的太全面,我们实际看需求实现就行。

android小米推送,Android手机端小米推送Demo解析和实现方法相关推荐

  1. Python 手机端自动推送功能(利用极光推送API)

    Python+Jpush手机端信息推送 极光推送API是一种开发者服务,这里不再赘述 我们在官网申请账号,创建应用,这里官方有详细的文档描述,这里也不再赘述,下图是我创建好的应用. 我们打开自己 的应 ...

  2. ios和android下数字没有垂直居中,手机端设置小号字体的上下居中问题

    问题描述 如下图所示,需要在手机端实现一个上下居中的价格标签,字号 10. 图0 但对于小于 12 号的字体浏览器默认不会显示更小,因为浏览器默认会有个最小的字体大小,在 pc 端通常这个值是 12. ...

  3. android订餐系统app、android购物商城系统app 手机端+服务器端 mysql数据库,界面简单,功能齐全 安卓购物商城 安卓在线订餐系统

    android订餐系统app.android购物商城系统app 一.简介 该项目可作为毕业设计开发使用,包含项目源代码.数据库.开题报告.毕业论文.答辩ppt等. 毕业设计题目:"基于And ...

  4. TP3.2.x判断手机端访问并设置默认访问模块的方法 - ThinkPHP框架

    手机端访问时调用Wap手机模块,实现在手机端访问时展示出手机网站,无需跳转域名 首先我们在./Application/Common/Conf/ 目录下建立两个公共配置文件:config.php 和co ...

  5. java手机端播放.swf_Android使用WebView播放flash的方法

    本文实例讲述了Android使用WebView播放flash及判断是否安装flash插件的方法.分享给大家供大家参考.具体实现方法如下: 一.问题: 最近帮一个同学做一个项目,断断续续的一些知识点记录 ...

  6. 手机端H5开发,屏幕不同尺寸适配方法(屏幕自适应)

    最近在接触手机端H5开发,然后设计师将设计图发给我们进行开发,对于第一次接触详细设计图开发的我来说,觉得很新颖毕竟一直没有接触这么正规的设计图(字体样式,颜色,大小等等),之后再开发的时候,就遇到了一 ...

  7. 手机端pdf文件预览pdf.js使用方法详解

    虽然H5页面可以通过A直接访问html 但可惜的是 手机端H5页面这样做就直接变下载了 那么想要实现手机端的pdf文件预览就需要用到pdf.js了 首先 我们访问地址 http://mozilla.g ...

  8. 织梦手机端跳转到index.html,两种方法实现织梦自带手机端搜索页直接跳转到search_m.htm手机站页面...

    这篇文章主要为大家详细介绍了两种方法实现织梦自带手机端搜索页直接跳转到search_m.htm手机站页面,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,有需要的朋友可以收藏方便以后借鉴. 用过织梦 ...

  9. android 浏览器 pc一样大小,手机端不同浏览器[主流的,包括Android自带]对cookie的不同限制,如个数和大小,如何查看?...

    一.浏览器允许每个域名所包含的cookie数: Microsoft指出InternetExplorer8增加cookie限制为每个域名50个,但IE7似乎也允许每个域名50个cookie. Firef ...

最新文章

  1. 让网站具有生命与活力不仅仅是说说而已
  2. 清除 Xcode 项目缓存
  3. 【干货】运维需要掌握的 17 个实用技巧
  4. char* 大小_SQL Server中char, nchar, varchar和nvarchar数据类型有何区别
  5. Neo4j CQL - (3) -RETURN子句
  6. 战略模式并不意味着春天!
  7. 对象映射工具AutoMapper介绍
  8. python匿名函数(lambda)
  9. 学习 shell —— 条件判断 if 的参数
  10. div和div之间画横线,如何在两个div之间画一条线?
  11. python类方法和实例方法syntax errors_python新手常犯的17个错误
  12. Excel AES加密
  13. 将一个链表分为奇偶两个链表
  14. Spring Cloud 基本理论概述
  15. 随机函数c语言对打,20165323 学习基础和C语言基础调查
  16. C++图像处理函数及程序(一)
  17. PyInstaller来将python程序打包成exe程序及其图标自定义以及ico文件的简单制作
  18. Openzeppelin库第八期:Crowdsale
  19. A guided tour of Kerberos: Tutorial
  20. java中如何删除文件或清除文件夹下的所有文件

热门文章

  1. 陈坤VS黄晓明:用大数据解读大明星
  2. 命主属性是水什么意思_算命中红兔 请大师看看“此命盘的主人是 黑马,出生于红兔。日干代表命主,所以属 水”是什么意思...
  3. 手机短信验证码的实现
  4. 基于fastadmin的工业园区科技园水电费管理系统
  5. matlab pid buck,基于MATLAB的BUCK电路设计与PID闭环仿真
  6. 华为 Python:初级能力测评
  7. Vue中图片实现毛玻璃效果
  8. java基础系列十七(时间日期转换)
  9. web基础知识回顾(一)
  10. python实现二维码识别_python实现二维码、条形码识别