android小米推送,Android集成小米推送

前置步骤:

在[小米开发者站](http://developer.xiaomi.com/)开通小米开发者账号。

创建应用,开发者账号审核通过后你就可以在开发者站创建你的应用。

开启应用的推送服务。

下载SDK、文档和DEMO。

完成1、2、3步骤之后,在小米平台的界面你会看到跟下图类似的界面:

fb9e4f9dad99

image.png

然后就可以到你的项目中开始配置了。

①配置AndroidManifest.xml

增加权限:

android:protectionLevel="signature" />

推送服务需要配置的service和receiver:

自定义一个BroadcastReceiver类:

public class XiaoMiMessageReceiver extends PushMessageReceiver {

private String mRegId;

private String mTopic;

private String mAlias;

private String mAccount;

private String mStartTime;

private String mEndTime;

/**

* 用来接收服务器发送的透传消息

*

* @param context

* @param miPushMessage

*/

@Override

public void onReceivePassThroughMessage(Context context, MiPushMessage miPushMessage) {

super.onReceivePassThroughMessage(context, miPushMessage);

if (!TextUtils.isEmpty(miPushMessage.getTopic())) {

mTopic = miPushMessage.getTopic();

} else if (!TextUtils.isEmpty(miPushMessage.getAlias())) {

mAlias = miPushMessage.getAlias();

}

Message msg = Message.obtain();

}

/**

* 用来接收服务器发来的通知栏消息(用户点击通知栏时触发)

*

* @param context

* @param miPushMessage

*/

@Override

public void onNotificationMessageClicked(Context context, MiPushMessage miPushMessage) {

super.onNotificationMessageClicked(context, miPushMessage);

String url = "";

url = miPushMessage.getExtra().get(MessageEntity.Link);

Intent intentGo = new Intent();

intentGo.putExtra("link", url);

intentGo.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);

intentGo.setClass(context, XiaoMiPushMessageActivity.class);

context.startActivity(intentGo);

}

/**

* 用来接收服务器发来的通知栏消息(消息到达客户端时触发,并且可以接收应用在前台时不弹出通知的通知消息)

*

* @param context

* @param miPushMessage

*/

@Override

public void onNotificationMessageArrived(Context context, MiPushMessage miPushMessage) {

super.onNotificationMessageArrived(context, miPushMessage);

}

/**

* 用来接受客户端向服务器发送注册命令消息后返回的响应。

*

* @param context

* @param miPushCommandMessage

*/

@Override

public void onReceiveRegisterResult(Context context, MiPushCommandMessage miPushCommandMessage) {

super.onReceiveRegisterResult(context, miPushCommandMessage);

String command = miPushCommandMessage.getCommand();

List arguments = miPushCommandMessage.getCommandArguments();

String cmdArg1 = ((arguments != null && arguments.size() > 0) ? arguments.get(0) : null);

if (MiPushClient.COMMAND_REGISTER.equals(command)) {

if (miPushCommandMessage.getResultCode() == ErrorCode.SUCCESS) {

mRegId = cmdArg1;

Log.d("XiaoMiMessageReceiver", "xiaomi push id:" + mRegId);

//在这里就可以保存mRegId了,传给后台服务器

}

}

}

/**

* 用来接收客户端向服务器发送命令消息后返回的响应

*

* @param context

* @param miPushCommandMessage

*/

@Override

public void onCommandResult(Context context, MiPushCommandMessage miPushCommandMessage) {

super.onCommandResult(context, miPushCommandMessage);

}

}

上面的代码中,需要注意这一个方法:

/**

* 用来接收服务器发来的通知栏消息(用户点击通知栏时触发)

*

* @param context

* @param miPushMessage

*/

@Override

public void onNotificationMessageClicked(Context context, MiPushMessage miPushMessage) {

super.onNotificationMessageClicked(context, miPushMessage);

String url = "";

url = miPushMessage.getExtra().get(MessageEntity.Link);

Intent intentGo = new Intent();

intentGo.putExtra("link", url);

intentGo.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);

intentGo.setClass(context, XiaoMiPushMessageActivity.class);

context.startActivity(intentGo);

}

如果在onNotificationMessageClicked方法中执行跳转,会发现有时候跳转不了,或者根本无响应,不知是因为上面方法都是非UI线程,还是小米的系统机制问题,(APP退到后台时间长,或者手动完全退出APP之后,点击消息通知也无法重新唤醒APP)在跳转时加入

intentGo.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);

然后为了方便分离逻辑,我新建了一个空白的activity,小米的推送服务先跳转到这个空白的activity,然后在activity中处理自己的逻辑(例如APP是否已经正在使用,是就直接提示不重启,没在使用APP就重新唤起APP)

public class XiaoMiPushMessageActivity extends AppCompatActivity {

@Override

protected void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

Intent intent = getIntent();

int nativeRedirect = intent.getIntExtra("redirect", 0);

String url = intent.getStringExtra("link");

int pageType = intent.getIntExtra("pageType", 0);

if (TnaotApplication.Companion.instance().isExistMainActivity()) {

//app已经启动

ActivityUtils.startTagActivityForNotification(this, nativeRedirect, url, pageType, openMethod, newsType, newsId, title, title, content, thumb, false);

} else {

//APP重新唤醒

Intent startIntent = PushUtil.initIntentData(nativeRedirect, url, pageType, newsType, newsId, thumb, title, content);

startIntent.setClass(this, MainActivity.class);

startActivity(startIntent);

}

finish();

}

}

在AndroidManifest.xml中注册这个activity:

android:name=".mctpush.mipush.XiaoMiPushMessageActivity"

android:configChanges="keyboardHidden|screenSize|orientation"

android:screenOrientation="portrait"

android:theme="@style/SplashTheme" />

最后就是application中初始化小米推送:

public static void initMiPush(Context context) {

if (shouldInit(context)) {

MiPushClient.registerPush(context, MI_APP_ID, MI_APP_KEY);

}

}

到这里就完成了小米推送的集成了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值