版权声明:本文为HaiyuKing原创文章,转载请注明出处!

前言

这个Demo只是记录小米推送的集成,不能运行。

使用步骤

一、项目组织结构图

注意事项:

1、  导入类文件后需要change包名以及重新import R文件路径

2、  Values目录下的文件(strings.xml、dimens.xml、colors.xml等),如果项目中存在,则复制里面的内容,不要整个覆盖

二、导入步骤

2.1、接入准备

注册小米开发者账号——》启用推送

2.2、下载SDK

下载后的压缩包解压后的目录:

2.3、集成SDK

为了便于管理,我在Demo中新建了一个ThirdLib的module,用于集成SDK。

(1)新建ThirdLib的module,并在app的build.gradle中引用

//引用thirdlib

implementation project(':thirdlib')

(2)在ThirdLib这个module中集成SDK

复制MiPush_SDK_Client_x_x_x.jar到工程 libs/ 目录下;

因为是在thirdlib这个module中集成jar包,所以还需要在thirdlib这个module的build.gradle文件中引用libs目录下的jar包。

//小米推送SDK

api files('libs/MiPush_SDK_Client_3_6_12.jar')

(3)在ThirdLib这个module的res/strings.xml文件中添加以下代码(用于自定义的XiaomiMessageReceiver中调用)

ThirdLib

Receive a passthrough message. Content is \"%1$s\"

Clicked a notification message. Content is \"%1$s\"

Arrived a notification message. Content is \"%1$s\"

Register push success.

Register push fail.

Set alias \"%1$s\" success.

Set alias fail for %1$s.

Unset alias \"%1$s\" success.

Unset alias fail for %1$s.

Set account \"%1$s\" success.

Set account fail for %1$s.

Unset account \"%1$s\" success.

Unset account fail for %1$s.

Subscribe topic \"%1$s\" success.

Subscribe topic fail for %1$s.

Unsubscribe topic \"%1$s\" success.

Unsubscribe topic fail for %1$s.

Set accept time %1$s - %2$s success.

Set accept time fail for %1$s.

(4)配置 AndroidManifest.xml【注意是app这个module中的,不是thirdlib这个module中的】

注意下面标记橙色代码:

(5)在项目中添加xiaomipush包中的文件

1、PermissionActivity中需要用到自定义MyApplication中的代码,下一步中会增加,这里报错不用管;

2、XiaomiMessageReceiver中使用的到字符串资源在thirdLib中的res/strings.xml文件中定义了;

3、XiaomiMessageReceiver主要通知、消息的回调

(6)初始化SDK

在MyApplication中执行

packagecom.why.project.xiaomipushdemo;importandroid.app.ActivityManager;importandroid.app.Application;importandroid.content.Context;importandroid.os.Process;importcom.xiaomi.mipush.sdk.MiPushClient;importjava.util.List;/*** Created by HaiyuKing

* Used*/

public class MyApplication extendsApplication {/*=================小米推送SDK=====================*/

//user your appid the key.

private static final String APP_ID = "28823037343464645735";//user your appid the key.

private static final String APP_KEY = "56545654754865";

@Overridepublic voidonCreate() {super.onCreate();

initXiaoMiPush();

}//小米推送SDK

private voidinitXiaoMiPush(){//注册push服务,注册成功后会向DemoMessageReceiver发送广播//可以从DemoMessageReceiver的onCommandResult方法中MiPushCommandMessage对象参数中获取注册信息

if(shouldInit()) {

MiPushClient.registerPush(this, APP_ID, APP_KEY);

}

}//小米推送SDK【用于PermissionActivity中调用】

public static voidreInitPush(Context ctx) {

MiPushClient.registerPush(ctx.getApplicationContext(), APP_ID, APP_KEY);

}//小米推送SDK相关

private booleanshouldInit() {

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

List processInfos =am.getRunningAppProcesses();

String mainProcessName=getPackageName();int myPid =Process.myPid();for(ActivityManager.RunningAppProcessInfo info : processInfos) {if (info.pid == myPid &&mainProcessName.equals(info.processName)) {return true;

}

}return false;

}

}

三、使用方法(仅供参考)

packagecom.why.project.xiaomipushdemo;importandroid.os.Bundle;importandroid.support.v7.app.AppCompatActivity;importandroid.text.TextUtils;importcom.xiaomi.mipush.sdk.MiPushClient;public class MainActivity extendsAppCompatActivity {

@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);/*=======================================小米推送SDK相关=============================================*/updateJpushDeviceId();

}/*=======================================小米推送SDK相关=============================================*/

/**更新设备id接口*/

private voidupdateJpushDeviceId(){//====小米推送SDK相关====

String regId =MiPushClient.getRegId(MyApplication.getAppContext());

requestDeviceId(regId);//判断是请求接口还是弹出对话框

}//请求接口存储设备id或者token的方法

private voidrequestDeviceId(String regId) {//首要条件是设备id值或者token值不为空,否则下面的判断没有意义了//如果没有设置过别名,或者则需要设置别名//如果服务器上的deviceID值是空值,表明当前用户还没有绑定任何设备,则直接请求接口,不需要弹出对话框;//如果服务器上的deviceID值不为空,并且客户端获取的设备id值和服务器上的deviceID值相同,则不需要弹出对话框,直接请求接口(这个是卸载重新安装的情况)//如果服务器上的deviceid值不为空,并且客户端获取的设备id值和服务器上的deviceID值不同,则需要弹出对话框(这个是换设备的情况)

if (!TextUtils.isEmpty(regId)) {//如果已经设置过别名(存储过了设备id值)了,但是当前的别名(设备id值)和服务器上的不一致,则需要重新设置别名(存储设备id值)(这个是其他设备上登录的情况)

}//====小米推送SDK相关====//貌似需要每一次都要设置别名

setAlias(PreferencesUtils.getString(mContext,Globals.USERNAME_KEY));

}//这是来自 JPush Example 的设置别名的 Activity 里的代码。一般 App 的设置的调用入口,在任何方便的地方调用都可以。

private voidsetAlias(String alias) {if(TextUtils.isEmpty(alias)) {

ToastUtil.showShortToast(getResources().getString(R.string.error_alias_empty));//alias别名不能为空

return;

}if (!ExampleUtil.isValidTagAndAlias(alias)) {

ToastUtil.showShortToast(getResources().getString(R.string.error_tag_gs_empty));//格式不对

return;

}//====小米推送SDK相关====

MiPushClient.setAlias(MyApplication.getAppContext(), alias, null);

}

}

四、发送消息

五、实现多个通知在通知栏中并存

六、实现打开应用内指定页面的效果

一般由应用客户端自定义即可,但是有可能会想要实现打开应用内指定页面。对应的网页上的设置:

6.1、添加XMPushActivity【一个透明界面,主要用于获取数据,封装数据,传输数据】

packagecom.why.project.xiaomipushdemo.xiaomipush;importandroid.app.Activity;importandroid.content.Context;importandroid.content.Intent;importandroid.os.Bundle;importcom.why.project.xiaomipushdemo.R;importcom.xiaomi.mipush.sdk.MiPushMessage;importcom.xiaomi.mipush.sdk.PushMessageHelper;importorg.json.JSONObject;importcn.jpush.android.api.JPushInterface;/*** Created by HaiyuKing

* Used 小米推送【打开应用内指定页面】【暂时用不到】*/

public class XMpushActivity extendsActivity {private static final String TAG = XMpushActivity.class.getSimpleName();privateContext mContext;

@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);

setContentView(R.layout.activity_xmpush);

mContext= this;//获取自定义动作的值

Intent intent =getIntent();

String intentUri=intent.toUri(Intent.URI_INTENT_SCHEME);

LogUtil.e(TAG,"action是:" +intentUri);//intent:#Intent;launchFlags=0x10000000;package=com.why.project.xiaomipushdemo;component=com.why.project.xiaomipushdemo/.xiaomipush.XMpushActivity;S.messageId=sdm04994545992668152zH;i.eventMessageType=1000;end

/*获取自定义键值对的值*/MiPushMessage msgContent=(MiPushMessage) intent.getSerializableExtra(PushMessageHelper.KEY_MESSAGE);//关闭当前界面,跳转到指定的界面

try{

String title=msgContent.getTitle();

String content=msgContent.getContent();

JSONObject extraJson= new JSONObject(msgContent.getExtra());//将map转成json对象

Bundle bundle= newBundle();

bundle.putString(JPushInterface.EXTRA_NOTIFICATION_TITLE,title);//通知的标题

bundle.putString(JPushInterface.EXTRA_ALERT,content);//通知内容

bundle.putString(JPushInterface.EXTRA_EXTRA,extraJson.toString());//通知附加字段

bundle.putInt(JPushInterface.EXTRA_NOTIFICATION_ID,msgContent.getNotifyId());//通知id值【没什么用】

Intent i= new Intent(mContext, JpushActivity.class);

i.putExtras(bundle);

i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//必须使用这个,这个保证了多个通知,点击返回返回到的是上一个通知界面

mContext.startActivity(i);

finish();

}catch(Exception e){

e.printStackTrace();

}

}

}

XMpushActivity.java

activity_xmpush.xml

6.2、在AndroidManifest.xml中添加以下代码

6.3、网页发送消息(关键部分)

intent:#Intent;component=com.why.project.xiaomipushdemo/.xiaomipush.XMpushActivity;end

混淆配置

橙色标记的需要换成实际的路径:

#=====================小米推送SDK=====================

#这里com.xiaomi.mipushdemo.DemoMessageRreceiver改成app中定义的完整类名

-keep class com.why.project.xiaomipushdemo.xiaomipush.XiaomiMessageReceiver {*;}

#可以防止一个误报的 warning 导致无法成功编译,如果编译使用的 Android 版本是 23。

-dontwarn com.xiaomi.push.**

参考资料

暂时空缺

项目demo下载地址

小米推送 java demo_XiaomiPushDemo【小米推送集成,基于V3.6.12版本】相关推荐

  1. android 小米推送 no account,XiaomiPushDemo【小米推送集成,基于V3.6.12版本】

    前言 这个Demo只是记录小米推送的集成,不能运行.使用步骤 一.项目组织结构图 注意事项: 1.  导入类文件后需要change包名以及重新import R文件路径 2.  Values目录下的文件 ...

  2. 极光推送java demo_极光推送- 3 分钟 Demo - 极光文档

    3 分钟快速使用 JPush Android Demo 本文目的在于,指导新接触极光推送的开发者,在短短几分钟时间内把极光推送跑起来: 安装 Demo 客户端到手机 在 Portal 上推送通知 客户 ...

  3. 极光推送 java api_JPush极光推送Java服务器端API

    方法名称参数列表(必须)方法说明 setEnableSSL boolean enableSSL (true为使用ssl, 默认为不使用ssl) 是否启动ssl安全连接 sendNotification ...

  4. 集成推送(极光+小米+华为)总结(java服务端)

    公司app集成了极光推送,前前后后在这上面费了不少时间了,总结下自己的理解和遇到的问题.  只用过极光推送,所以下面都以极光推送为例.(后面新增小米和华为) 1..都有什么品牌的推送服务? 集成什么品 ...

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

    作者简介 微信公众号(高质量文章推送):陈博易 前言 小米手机选择小米推送的原因:App进程被杀死的情况下,小米手机上的小米推送服务并不会被杀死(除非用户手动在设置中关闭了该推送的权限),所以我选择给 ...

  6. 牛轧糖Android 7.1系统,小米5C吃上“牛轧糖”推送安卓7.1:系统更流畅,联通信号更稳定!...

    描述 不久前MIUI让小米5和小米Max两款机型已经吃上了Android7.0牛轧糖版本,与此同时小米5C作为搭载自主处理器的一款手机,待遇也相当不错.昨天晚上为内测用户推送了基于Android 7. ...

  7. 友盟小米收不到推送消息_App消息推送的到达率多少才是正常的?

    U-Push的Android平台消息到达率是多少?这是U-Push用户最关心的问题之一.小伙伴们每次都想要一个准确的答案,或者是行业的平均值.在这里允许小编卖个关子随后再回答. 一.手机品牌大盘趋势& ...

  8. 小米华为苹果推送相关Nginx转发推送配置

    小米华为苹果推送相关Nginx转发推送配置## 标题 1.1推送类型及涉及的推送url 目前涉及到的推送类型包括: 1).APNS苹果推送 2).华为厂商推送 3).小米厂商推送 4).魅族厂商推送 ...

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

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

最新文章

  1. Servlet初始化与异步支持
  2. 选择问题 and 字谜游戏问题
  3. 【Laravel】使用mews/captcha验证码图片不显示,报错 Call to undefined function Intervention\Image\Gd\imagettfbbox()
  4. 合并两个有序链表—leetcode21
  5. vmware的3种网络模式
  6. 调用另一个cpp的变量_再谈条件变量—从入门到出家
  7. go validator使用教程
  8. 安装ae显示安装程序无法初始化_adobe CC 2015/2017安装失败(adobe cc安装不了的解决办法)...
  9. qt 实现拖动矩形角度_Qt 绘图之图形视图框架
  10. c#获取应用程序路径的方法
  11. w3school的PHP教程提炼(一)PHP基础
  12. L3-014 周游世界 (30分)
  13. sniffer经典指南 一
  14. ora01017 linux,ORA-01017: invalid username/password; logon denied 解决办法
  15. 思杰桌面虚拟化Citrix XenDesktop
  16. windowsServer安装sqlServer2008
  17. 《Flex+PHP RIA应用开发实战详解-梁文新版》学习日记1
  18. SAP-ABAP-OOALV进阶-子屏幕;各种方法示例;
  19. 博主在阿里笔试中拿了0分,竟是因为分不清楚 Java 输入类 nextLine 与 next 两个方法的区别
  20. window10 安装语言包出现“很抱歉,我们无法安装此功能。你可以稍后重试。错误代码: 0x80070422”

热门文章

  1. 二分查找算法(递归方式)
  2. freemarker中的split字符串分割
  3. 大数据挖掘技术在金融保险行业中的用途
  4. NavigationView简单操作
  5. Spring自动装配及自动注入
  6. Eclipse配色方案以及字体设置和背景色设置
  7. 通货膨胀率月度数据(1999-2021年)
  8. python地图可视化把直辖市和地级市画在一起_Python地理地图可视化:Folium解析百度地图上中国城市中心的经纬度并显示在地图上(3),folium,把,出来,展示,三...
  9. 【从0到1搭建LoRa物联网】3、国产LoRa终端ASR6505软硬件
  10. 多协程和队列,爬取时光网电视剧TOP100的数据(剧名、导演、主演和简介)