微信公众号(高质量文章推送):走向全栈工程师
作者:陈博易
声明:本文是个人原创,未经允许请勿转载
商业合作请在微信公众号回复:联系方式

前言
小米手机选择小米推送的原因:App进程被杀死的情况下,小米手机上的小米推送服务并不会被杀死(除非用户手动在设置中关闭了该推送的权限),所以我选择给大家分享下小米推送。
这里参考了一篇大佬的文章:http://www.jianshu.com/p/d77eaca4e52a
环境以及工具
环境:Android AndroidStudio3.0 Java项目:IntelliJ IDEA 2017.2.3
整体步骤
- 在小米开发者站开通小米开发者账号
- 启用推送服务
- 下载SDK、文档和DEMO
- SDK集成和调试
详细步骤
请参考小米官网
https://dev.mi.com/doc/?p=1621
核心步骤解读
-
创建一个小米开发推送调式应用
image.png




-
修改APP_ID、APP_KEY、包名(应用核心数据)
修改APP_ID、APP_KEY


参考小米官网文档:
https://dev.mi.com/console/doc/detail?pId=41
- 小米官网推送

- java后端核心步骤
参考文档:
java后端环境集成 https://dev.mi.com/mipush/docs/server-sdk/introduction/
java后端开发文档说明 https://dev.mi.com/console/doc/detail?pId=40
public class mipushtest {
public static void main(String[] args) {
Constants.useOfficial();
Sender sender = new Sender("hYsI0lYsM+9lpgjyBV1gig==");//申请到的AppSecret
String messagePayload = "This is a message(一般这里都是json字符串)";
String title = "notification title(通知标题)";
String description = "notification description(通知简介)";
Message message = new Message.Builder()
.title(title)
.description(description).payload(messagePayload)
.restrictedPackageName("com.xiaomi.mipushdemoboy")
.passThrough(0) // 设置消息是否通过透传的方式至App, 1表示透传消息, 0表示通知栏消息(默认是通知栏消息)
.notifyType(-1) // 设置通知类型, type类型(-1, 1-使用默认提示音提示, 2-使用默认震动提示, 3-使用默认led灯光提示)
.build();
try {
//registrationId regId是app在客户端向小米推送服务注册时,
// 小米推送服务端根据设备标识和appId以及当前时间戳生成,
// 因此能够保证每个设备上每个app对应的regId都是不同的,
// 可以作为每台设备上app的唯一标识
// 注:需要开发者自己的服务器接收客户端返回的regid并存储在自身服务器
// retries代表发送失败后重试的次数
sender.send(message, "7iuW9yVMV+s61aG1AVD7rXC+LHNs561t/rcAL1a3v84=", 1); //发送消息到一组设备上, regids个数不得超过1000个
//发送给所有的注册成功的应用
//sender.broadcastAll(message, 1); //
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
}
}
- Android核心代码介绍
public class DemoMessageReceiver extends PushMessageReceiver {
private String mRegId;//每台设备上app的唯一标识,为了方便测试将返回的regid记录下来,方便在后端的推送
//方法用来接收服务器向客户端发送的透传消息。
@Override
public void onReceivePassThroughMessage(Context context, MiPushMessage message) {
}
//用来接收服务器向客户端发送的通知消息,这个回调方法是在通知消息到达客户端时触发。
// 另外应用在前台时不弹出通知的通知消息到达客户端也会触发这个回调函数。
@Override
public void onNotificationMessageArrived(Context context, MiPushMessage message) {
}
//方法用来接收服务器向客户端发送的通知消息,这个回调方法会在用户手动点击通知后触发
@Override
public void onNotificationMessageClicked(Context context, MiPushMessage message) {
}
//方法用来接收客户端向服务器发送命令后的响应结果。
@Override
public void onCommandResult(Context context, MiPushCommandMessage message) {
}
//方法用来接收客户端向服务器发送注册命令后的响应结果。
@Override
public void onReceiveRegisterResult(Context context, MiPushCommandMessage message) {
}
总结
- 如何导入java项目(无脑next就好)
http://www.jianshu.com/writer#/notebooks/6994156/notes/19328068
总算把android的环境和java后端环境都调试通了,如果大家还不懂的可以私聊我哦。
请关注我(高质量文章推送)
源码地址———关注微信公众号,回复:小米推送源码

网友评论