项目中有用到小米推送,这里记录一下(之前一直使用JPush)。
1.在小米开放平台申请应用的小米推送id 和 小米推送key,并下载sdk。
2.将MiPush_SDK_Client_3_4_5.jar依赖到项目中
3.我们选择在app启动时,也就是在Application中初始化小米推送服务
if(shouldInit()) {//判断是否在主进程
//保存到本地
SharedPreferences sp = getSharedPreferences(XiaomiMessageReceiver.XIAOMIPRENAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putString(DeviceUtil.getVersionName(BaseApplication.getContext())+XiaomiMessageReceiver.XIAOMOREGIDKEY, "");
editor.commit();
MiPushClient.registerPush(this, UrlConfig.MIAPP_ID, UrlConfig.MIAPP_KEY);//注册小米推送服务
}
4.定义小米推送消息接收者
主要是几个回调方法:
1》onReceiveRegisterResult(Context context, MiPushCommandMessage message) //注册小米推送服务的回调
可以通过message得到regid,别名,userAccount,标签等推送对象。我公司项目中使用的是regid。
所以在这个回调中得到regid后保存到本地,同时上传到后台,供后台推送消息时使用。
2》onNotificationMessageArrived(Context context, MiPushMessage message) //收到推送消息的回调
可以在这里做收到消息后的操作,比如弹框,跳转等。
3》onNotificationMessageClicked(Context context, MiPushMessage message) //点击通知栏消息的回调
点击通知栏消息一般就是跳转,可以在这个回调中处理。
5.在清单文件中注册
<!--//小米推送-->
<permission
android:name="项目包名.permission.MIPUSH_RECEIVE"
android:protectionLevel="signature" />
<!-- 这里com.xiaomi.mipushdemo改成app的包名 -->
<uses-permission android:name="项目包名.permission.MIPUSH_RECEIVE" />
<!-- 小米推送 -->
<service
android:name="com.xiaomi.push.service.XMPushService"
android:enabled="true"
android:process=":pushservice" />
<service
android:name="com.xiaomi.push.service.XMJobService"
android:enabled="true"
android:exported="false"
android:permission="android.permission.BIND_JOB_SERVICE"
android:process=":pushservice" />
<!-- 注:此service必须在3.0.1版本以后(包括3.0.1版本)加入 -->
<service
android:name="com.xiaomi.mipush.sdk.PushMessageHandler"
android:enabled="true"
android:exported="true" />
<service
android:name="com.xiaomi.mipush.sdk.MessageHandleService"
android:enabled="true" />
<!-- 注:此service必须在2.2.5版本以后(包括2.2.5版本)加入 -->
<receiver
android:name="com.xiaomi.push.service.receivers.NetworkStatusReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
<receiver
android:name="com.xiaomi.push.service.receivers.PingReceiver"
android:exported="false"
android:process=":pushservice">
<intent-filter>
<action android:name="com.xiaomi.push.PING_TIMER" />
</intent-filter>
</receiver>
<!-- 接收推送消息 -->
<receiver
android:name=".receiver.XiaomiMessageReceiver"
android:exported="true">
<!-- 这里com.xiaomi.mipushdemo.DemoMessageRreceiver改成app中定义的完整类名 -->
<intent-filter>
<action android:name="com.xiaomi.mipush.RECEIVE_MESSAGE" />
</intent-filter>
<intent-filter>
<action android:name="com.xiaomi.mipush.MESSAGE_ARRIVED" />
</intent-filter>
<intent-filter>
<action android:name="com.xiaomi.mipush.ERROR" />
</intent-filter>
</receiver>
上面就是几个重要的点,使用起来也比较简单。