小米杀不死的推送-- Android、java后端同时接入小米推送

2,450 阅读3分钟

作者简介

微信公众号(高质量文章推送):陈博易

案例演示
案例演示

前言


小米手机选择小米推送的原因:App进程被杀死的情况下,小米手机上的小米推送服务并不会被杀死(除非用户手动在设置中关闭了该推送的权限),所以我选择给大家分享下小米推送。
这里参考了一篇大佬的文章:www.jianshu.com/p/d77eaca4e…

环境以及工具


环境:Android AndroidStudio3.0 Java项目:IntelliJ IDEA 2017.2.3

整体步骤


  1. 在小米开发者站开通小米开发者账号
  2. 启用推送服务
  3. 下载SDK、文档和DEMO
  4. SDK集成和调试

详细步骤


请参考小米官网
dev.mi.com/doc/?p=1621

核心步骤解读


1.创建一个小米开发推送调式应用

获取应用核心数据
获取应用核心数据

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

修改APP_ID、APP_KEY
修改APP_ID、APP_KEY

修改清单文件
修改清单文件

修改包名
修改包名

参考小米官网文档:
dev.mi.com/console/doc…

3.小米官网推送

校验前端的sdk环境是否正常
校验前端的sdk环境是否正常

4.java后端核心步骤
参考文档:
java后端环境集成 dev.mi.com/mipush/docs…
java后端开发文档说明 dev.mi.com/console/doc…

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();
        }
    }

}

5.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) {

}

总结


  1. 如何导入java项目(无脑next就好)
    www.jianshu.com/writer#/not…

  2. 总算把android的环境和java后端环境都调试通了,如果大家还不懂的可以私聊我哦。

    请关注我(高质量文章推送)

    源码地址———关注微信公众号,回复:小米推送源码

长按二维码“识别”关注或者扫一扫
长按二维码“识别”关注或者扫一扫