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

本文档详细介绍了如何在Android项目中集成小米推送SDK,包括导入SDK、配置AndroidManifest.xml、初始化SDK、处理消息回调以及设置打开应用内指定页面的方法。提供了具体的步骤和示例代码,适用于开发者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

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

一、项目组织结构图

e2a2cbc8d4b7f4c8a759623879079581.png

da982fd70d9bbbe52374b95dd395980b.png

注意事项:

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

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

二、导入步骤

2.1、接入准备

参考官网《小米推送服务启用指南》

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

2.2、下载SDK

下载地址:http://admin.xmpush.xiaomi.com/mipush/downpage/

c504ad18220895314df6153f028edccb.png

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

6d5acd84bb4b9e7e9c95c4be772daaa8.png

2.3、集成SDK

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

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

implementation project(':thirdlib')

b2b5b9887bd8ae1e786763df2dd9c500.png

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

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

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

a73e7f276664eb797bbd044f5d74b790.png//小米推送SDK

api files('libs/MiPush_SDK_Client_3_6_12.jar')

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

ThirdLibstring>

=====================================小米推送SDK=====================================-->

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

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

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

Register push success.string>

Register push fail.string>

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

 Set alias fail for %1$s.string>

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

 Unset alias fail for %1$s.string>

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

 Set account fail for %1$s.string>

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

 Unset account fail for %1$s.string>

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

 Subscribe topic fail for %1$s.string>

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

 Unsubscribe topic fail for %1$s.string>

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

 Set accept time fail for %1$s.string>resources>

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

注意下面标记橙色代码:<?xml  version="1.0" encoding="utf-8"?>

package="com.why.project.xiaomipushdemo">

======================小米推送SDK====================== -->

the following 2 com.xiaomi.mipushdemo should be changed to your package name -->

android:protectionLevel="signature" />

android:icon="@mipmap/ic_launcher"

android:label="@string/app_name"

android:roundIcon="@mipmap/ic_launcher_round"

android:supportsRtl="true"

android:theme="@style/AppTheme">

intent-filter>

activity>

======================小米推送SDK========================== -->

android:enabled="true"

android:exported="false"

android:permission="android.permission.BIND_JOB_SERVICE"

android:process=":pushservice" />

android:enabled="true"

android:process=":pushservice" />

android:enabled="true"

android:exported="true" />

android:enabled="true" />

自定义一个BroadcastReceiver类:为了接收消息-->

android:exported="true">

intent-filter>

intent-filter>

intent-filter>

receiver>

android:exported="true">

intent-filter>

receiver>

android:exported="false"

android:process=":pushservice">

intent-filter>

receiver>

application>manifest>

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

21b5f57741750b5bc8a28f1348865f1d.png

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

93e151d13c5352f2168006811b521d38.png

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

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

12268252273ecd2581ceb5e9565230bb.png

61380a5d5152fd4327237a0d17bba179.png

(6)初始化SDK

在MyApplication中执行package com.why.project.xiaomipushdemo;import android.app.ActivityManager;import android.app.Application;import android.content.Context;import android.os.Process;import com.xiaomi.mipush.sdk.MiPushClient;import java.util.List;/**

* Created by HaiyuKing

* Used */public class MyApplication extends Application {    /*=================小米推送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";

@Override    public void onCreate() {        super.onCreate();        initXiaoMiPush();

}    //小米推送SDK

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

if (shouldInit()) {

MiPushClient.registerPush(this, APP_ID, APP_KEY);

}

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

public static void reInitPush(Context ctx) {

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

}    //小米推送SDK相关

private boolean shouldInit() {

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

ListprocessInfos = 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;

}}

三、使用方法(仅供参考)package com.why.project.xiaomipushdemo;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.text.TextUtils;import com.xiaomi.mipush.sdk.MiPushClient;public class MainActivity extends AppCompatActivity {

@Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);

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

updateJpushDeviceId();

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

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

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

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

requestDeviceId(regId);//判断是请求接口还是弹出对话框    }    //请求接口存储设备id或者token的方法

private void requestDeviceId(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 void setAlias(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);

}

}

四、发送消息

fa66b4d09368a5db9da3d7080ca7064b.png

9d60b3c36c95772aec8c4acdcbaf3190.png

b33dcc55a4709a34ada7b61bf1c4c353.png

b5aa45558fbbdea13a17b67cd08bd51d.png

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

4cfcec9614660680ff03cd3377489067.png

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

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

6721283fa58ec9f73e3ea22c3043ce87.png

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

bb7148602bf67c2acec1b933e2bd40ff.png

a95290a6bf795987e36c4bc6f0321ce0.png

7694787434ceb9fb8d2caea95354786c.pngpackage com.why.project.xiaomipushdemo.xiaomipush;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.os.Bundle;import com.why.project.xiaomipushdemo.R;import com.xiaomi.mipush.sdk.MiPushMessage;import com.xiaomi.mipush.sdk.PushMessageHelper;import org.json.JSONObject;import cn.jpush.android.api.JPushInterface;/**

* Created by HaiyuKing

* Used 小米推送【打开应用内指定页面】【暂时用不到】 */public class XMpushActivity extends Activity {    private static final String TAG = XMpushActivity.class.getSimpleName();    private Context mContext;

@Override    protected void onCreate(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 = new Bundle();

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

a95290a6bf795987e36c4bc6f0321ce0.png

7694787434ceb9fb8d2caea95354786c.png<?xml  version="1.0" encoding="utf-8"?> ======================小米推送SDK====================== -->

android:layout_width="match_parent"

android:layout_height="match_parent">android.support.constraint.ConstraintLayout>

activity_xmpush.xml

6.2、在AndroidManifest.xml中添加以下代码<?xml  version="1.0" encoding="utf-8"?>

package="com.why.project.xiaomipushdemo">

======================小米推送SDK====================== -->

the following 2 com.xiaomi.mipushdemo should be changed to your package name -->

android:protectionLevel="signature" />

android:allowBackup="true"

android:icon="@mipmap/ic_launcher"

android:label="@string/app_name"

android:roundIcon="@mipmap/ic_launcher_round"

android:supportsRtl="true"

android:theme="@style/AppTheme">

intent-filter>

activity>

======================小米推送SDK========================== -->

android:enabled="true"

android:exported="false"

android:permission="android.permission.BIND_JOB_SERVICE"

android:process=":pushservice" />

android:enabled="true"

android:process=":pushservice" />

android:enabled="true"

android:exported="true" />

android:enabled="true" />

自定义一个BroadcastReceiver类:为了接收消息-->

android:exported="true">

intent-filter>

intent-filter>

intent-filter>

receiver>

android:exported="true">

intent-filter>

receiver>

android:exported="false"

android:process=":pushservice">

intent-filter>

receiver>

小米推送【打开应用内指定页面】【暂时用不到】-->

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

android:theme="@android:style/Theme.Translucent">

activity>

application>manifest>

6.3、网页发送消息(关键部分)intent:#Intent;component=com.why.project.xiaomipushdemo/.xiaomipush.XMpushActivity;end

de24b42878364e427e5fe53476f1e37f.png混淆配置

橙色标记的需要换成实际的路径:#=====================小米推送SDK=====================

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

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

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

-dontwarn com.xiaomi.push.**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值