小米推送 java demo_XiaomiPushDemo【小米推送集成,基于V3.6.12版本】
版权声明:本文为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版本】相关推荐
- android 小米推送 no account,XiaomiPushDemo【小米推送集成,基于V3.6.12版本】
前言 这个Demo只是记录小米推送的集成,不能运行.使用步骤 一.项目组织结构图 注意事项: 1. 导入类文件后需要change包名以及重新import R文件路径 2. Values目录下的文件 ...
- 极光推送java demo_极光推送- 3 分钟 Demo - 极光文档
3 分钟快速使用 JPush Android Demo 本文目的在于,指导新接触极光推送的开发者,在短短几分钟时间内把极光推送跑起来: 安装 Demo 客户端到手机 在 Portal 上推送通知 客户 ...
- 极光推送 java api_JPush极光推送Java服务器端API
方法名称参数列表(必须)方法说明 setEnableSSL boolean enableSSL (true为使用ssl, 默认为不使用ssl) 是否启动ssl安全连接 sendNotification ...
- 集成推送(极光+小米+华为)总结(java服务端)
公司app集成了极光推送,前前后后在这上面费了不少时间了,总结下自己的理解和遇到的问题. 只用过极光推送,所以下面都以极光推送为例.(后面新增小米和华为) 1..都有什么品牌的推送服务? 集成什么品 ...
- 小米杀不死的消息推送-- Android、java后端同时接入小米推送
作者简介 微信公众号(高质量文章推送):陈博易 前言 小米手机选择小米推送的原因:App进程被杀死的情况下,小米手机上的小米推送服务并不会被杀死(除非用户手动在设置中关闭了该推送的权限),所以我选择给 ...
- 牛轧糖Android 7.1系统,小米5C吃上“牛轧糖”推送安卓7.1:系统更流畅,联通信号更稳定!...
描述 不久前MIUI让小米5和小米Max两款机型已经吃上了Android7.0牛轧糖版本,与此同时小米5C作为搭载自主处理器的一款手机,待遇也相当不错.昨天晚上为内测用户推送了基于Android 7. ...
- 友盟小米收不到推送消息_App消息推送的到达率多少才是正常的?
U-Push的Android平台消息到达率是多少?这是U-Push用户最关心的问题之一.小伙伴们每次都想要一个准确的答案,或者是行业的平均值.在这里允许小编卖个关子随后再回答. 一.手机品牌大盘趋势& ...
- 小米华为苹果推送相关Nginx转发推送配置
小米华为苹果推送相关Nginx转发推送配置## 标题 1.1推送类型及涉及的推送url 目前涉及到的推送类型包括: 1).APNS苹果推送 2).华为厂商推送 3).小米厂商推送 4).魅族厂商推送 ...
- 友盟小米收不到推送消息_一个轻量级、可插拔的Android消息推送框架。一键集成推送(极光推送、友盟推送、华为、小米推送等)...
XPush 一个轻量级.可插拔的Android消息推送框架.一键集成推送(极光推送.友盟推送.华为.小米推送等),提供有效的保活机制,支持推送的拓展,充分解耦推送和业务逻辑,解放你的双手! 在提iss ...
最新文章
- Servlet初始化与异步支持
- 选择问题 and 字谜游戏问题
- 【Laravel】使用mews/captcha验证码图片不显示,报错 Call to undefined function Intervention\Image\Gd\imagettfbbox()
- 合并两个有序链表—leetcode21
- vmware的3种网络模式
- 调用另一个cpp的变量_再谈条件变量—从入门到出家
- go validator使用教程
- 安装ae显示安装程序无法初始化_adobe CC 2015/2017安装失败(adobe cc安装不了的解决办法)...
- qt 实现拖动矩形角度_Qt 绘图之图形视图框架
- c#获取应用程序路径的方法
- w3school的PHP教程提炼(一)PHP基础
- L3-014 周游世界 (30分)
- sniffer经典指南 一
- ora01017 linux,ORA-01017: invalid username/password; logon denied 解决办法
- 思杰桌面虚拟化Citrix XenDesktop
- windowsServer安装sqlServer2008
- 《Flex+PHP RIA应用开发实战详解-梁文新版》学习日记1
- SAP-ABAP-OOALV进阶-子屏幕;各种方法示例;
- 博主在阿里笔试中拿了0分,竟是因为分不清楚 Java 输入类 nextLine 与 next 两个方法的区别
- window10 安装语言包出现“很抱歉,我们无法安装此功能。你可以稍后重试。错误代码: 0x80070422”
热门文章
- 二分查找算法(递归方式)
- freemarker中的split字符串分割
- 大数据挖掘技术在金融保险行业中的用途
- NavigationView简单操作
- Spring自动装配及自动注入
- Eclipse配色方案以及字体设置和背景色设置
- 通货膨胀率月度数据(1999-2021年)
- python地图可视化把直辖市和地级市画在一起_Python地理地图可视化:Folium解析百度地图上中国城市中心的经纬度并显示在地图上(3),folium,把,出来,展示,三...
- 【从0到1搭建LoRa物联网】3、国产LoRa终端ASR6505软硬件
- 多协程和队列,爬取时光网电视剧TOP100的数据(剧名、导演、主演和简介)