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 填寫推送內容

把應用在後臺關閉掉,點選推送,仍可以收到推送通知,就說明整合成功了。