Android整合小米推送教程
目前Android應用在後臺殺死程序之後,就收不到通知了,想要接收訊息推送,需要整合各個廠商的推送SDK,以小米為例。
1.接入前準備
1.1 登入小米開發者網站(
https://dev.mi.com/console/appservice/),建立App並獲取AppId,AppKey和AppSecret。
1.2 下載Android客戶端SDK壓縮包。
下載地址:
http://dev.xiaomi.com/mipush/downpage/ 。
壓縮包中包含了Server SDK、Client SDK和android DEMO。
2. SDK接入指南
2.1 配置AndroidManifest.xml檔案
小米推送服務SDK支援的最低安卓版本為2.3。
推送服務需要的許可權列表:
推送服務需要配置的service和receiver:
這裡將XMPushService和PingReceiver定義在了pushservice程序中,您也可以配置其執行在任意程序。如果沒有配置android:process這個屬性,那麼它們將執行在應用的主程序中。
2.2 自定義一個BroadcastReceiver類
為了接收訊息,您需要自定義一個繼承自PushMessageReceiver類的BroadcastReceiver
public class DemoMessageReceiver extends PushMessageReceiver { private String mRegId; private long mResultCode = -1; private String mReason; private String mCommand; private String mMessage; private String mTopic; private String mAlias; private String mUserAccount; private String mStartTime; private String mEndTime; @Override public void onReceivePassThroughMessage(Context context, MiPushMessage message) { mMessage = message.getContent(); if(!TextUtils.isEmpty(message.getTopic())) { mTopic=message.getTopic(); } else if(!TextUtils.isEmpty(message.getAlias())) { mAlias=message.getAlias(); } else if(!TextUtils.isEmpty(message.getUserAccount())) { mUserAccount=message.getUserAccount(); } } @Override public void onNotificationMessageClicked(Context context, MiPushMessage message) { mMessage = message.getContent(); if(!TextUtils.isEmpty(message.getTopic())) { mTopic=message.getTopic(); } else if(!TextUtils.isEmpty(message.getAlias())) { mAlias=message.getAlias(); } else if(!TextUtils.isEmpty(message.getUserAccount())) { mUserAccount=message.getUserAccount(); } } @Override public void onNotificationMessageArrived(Context context, MiPushMessage message) { mMessage = message.getContent(); if(!TextUtils.isEmpty(message.getTopic())) { mTopic=message.getTopic(); } else if(!TextUtils.isEmpty(message.getAlias())) { mAlias=message.getAlias(); } else if(!TextUtils.isEmpty(message.getUserAccount())) { mUserAccount=message.getUserAccount(); } } @Override public void onCommandResult(Context context, MiPushCommandMessage message) { String command = message.getCommand(); Listarguments = message.getCommandArguments(); String cmdArg1 = ((arguments != null && arguments.size() > 0) ? arguments.get(0) : null); String cmdArg2 = ((arguments != null && arguments.size() > 1) ? arguments.get(1) : null); if (MiPushClient.COMMAND_REGISTER.equals(command)) { if (message.getResultCode() == ErrorCode.SUCCESS) { mRegId = cmdArg1; } } else if (MiPushClient.COMMAND_SET_ALIAS.equals(command)) { if (message.getResultCode() == ErrorCode.SUCCESS) { mAlias = cmdArg1; } } else if (MiPushClient.COMMAND_UNSET_ALIAS.equals(command)) { if (message.getResultCode() == ErrorCode.SUCCESS) { mAlias = cmdArg1; } } else if (MiPushClient.COMMAND_SUBSCRIBE_TOPIC.equals(command)) { if (message.getResultCode() == ErrorCode.SUCCESS) { mTopic = cmdArg1; } } else if (MiPushClient.COMMAND_UNSUBSCRIBE_TOPIC.equals(command)) { if (message.getResultCode() == ErrorCode.SUCCESS) { mTopic = cmdArg1; } } else if (MiPushClient.COMMAND_SET_ACCEPT_TIME.equals(command)) { if (message.getResultCode() == ErrorCode.SUCCESS) { mStartTime = cmdArg1; mEndTime = cmdArg2; } } } @Override public void onReceiveRegisterResult(Context context, MiPushCommandMessage message) { String command = message.getCommand(); Listarguments = message.getCommandArguments(); String cmdArg1 = ((arguments != null && arguments.size() > 0) ? arguments.get(0) : null); String cmdArg2 = ((arguments != null && arguments.size() > 1) ? arguments.get(1) : null); if (MiPushClient.COMMAND_REGISTER.equals(command)) { if (message.getResultCode() == ErrorCode.SUCCESS) { mRegId = cmdArg1; } } } }
將自定義的BroadcastReceiver註冊到AndroidManifest.xml檔案中
2.3 註冊推送服務
通過呼叫MiPushClient.registerPush來初始化小米推送服務。註冊成功後,您可以在自定義的onCommandResult和onReceiveRegisterResult中收到註冊結果,其中的regId即是當前裝置上當前app的唯一標示。您可以將regId上傳到自己的伺服器,方便向其發訊息。
為了提高push的註冊率,您可以在Application的onCreate中初始化push。您也可以根據需要,在其他地方初始化push。 程式碼如下:
public class DemoApplication extends Application { public static final String APP_ID = "your appid"; public static final String APP_KEY = "your appkey"; public static final String TAG = "your packagename"; @Override public void onCreate() { super.onCreate(); //初始化push推送服務 if(shouldInit()) { MiPushClient.registerPush(this, APP_ID, APP_KEY); } //開啟Log LoggerInterface newLogger = new LoggerInterface() { @Override public void setTag(String tag) { // ignore } @Override public void log(String content, Throwable t) { Log.d(TAG, content, t); } @Override public void log(String content) { Log.d(TAG, content); } }; Logger.setLogger(this, newLogger); } private boolean shouldInit() { ActivityManager am = ((ActivityManager) getSystemService(Context.ACTIVITY_SERVICE)); ListprocessInfos = am.getRunningAppProcesses(); String mainProcessName = getApplicationInfo().processName; int myPid = Process.myPid(); for (RunningAppProcessInfo info : processInfos) { if (info.pid == myPid && mainProcessName.equals(info.processName)) { return true; } } return false; } }
3. 測試
3.1 建立推送
3.2 填寫推送內容
把應用在後臺關閉掉,點選推送,仍可以收到推送通知,就說明整合成功了。