亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android手機端小米推送Demo解析和實現方法

2019-10-23 20:08:54
字體:
來源:轉載
供稿:網友

最近這幾個月都是在準備找工作和找工作中,付出了很多,總算是有點收獲,所以都沒有怎么整理筆記。到了最近才有空把自己的筆記整理一下發上來,分享一下我的學習經驗。

推送
由于最近項目要用到Android的消息推送,關于Android推送的解決方案有很多種,有C2DM,輪詢, SMS,MQTT協議,XMPP協議和第三方平臺,經過我們對項目需求的考慮之后我們選擇了第三方平臺推送的小米推送,下面就是小米推送的實現方法。

實現準備

想要用小米推送首先要去小米開發者平臺注冊申請開發者賬號,經過1到3天的審核之后就會通過,然后就可以申請推送服務。申請一個App的推送服務之后,獲得AppID和AppKey就可以去學習它給Demo來使用了,下面我主要就是講一下我對Demo的理解。

推送說明

推送的內容可以由后臺服務端利用小米推送的SDK實現發送,也可以在小米的推送平臺發送,發送的消息有兩種:通知消息和透傳信息。

通知消息:

就是會顯示在Android系統通知欄的消息,用戶點擊它的響應事件要自己實現或者在發送的時候說明點擊打開App。

透傳消息:

即是透明傳送,即傳送網絡無論傳輸業務如何,只負責將需要傳送的業務傳送到目的節點,同時保證傳輸的質量即可,而不對傳輸的業務進行處理。就是直接把消息傳給App,不會自動在通知欄上顯示。

官方Demo說明

官方給出的Demo里面簡單地為我們展示了一下小米推送的各種設置和怎樣實現接收推送。Demo首先把小米推送的SDK加入Library,然后里面有4個Java文件,如圖

android,小米推送平臺,消息推送,android消息推送demo

第4個Dialog可以不用看,關鍵是DemoMessageReceiver這個廣播接收器,接收推送到的各種信息然后進行處理。還有那個DemoApplication和MainActivity就是用來實現接收到信息的顯示。

然后界面是這樣的(demo沒做屏幕適配,所以就那樣了):

android,小米推送平臺,消息推送,android消息推送demo

一堆關于推送的配置,和一個顯示Log的TextView。主要為我們展示了小米推送的使用過程。

DemoMessageReceiver廣播接收器

要實現小米推送的移動端接收,核心就是上面說到最主要的DemoMessageReceiver這個廣播接收器。這個繼承了小米SDK里面的PushMessageReceiver類里面,這個廣播接收器可以通過重寫下面這5個回調方法來實現對推送的處理。
 

@Override  public void onReceivePassThroughMessage(Context context, MiPushMessage miPushMessage) {    //用來接收服務器向客戶端發送的透傳消息,收到透傳消息會觸發。  }  @Override  public void onNotificationMessageClicked(Context context, MiPushMessage miPushMessage) {    //用來接收服務器向客戶端發送的通知消息,這個回調方法會在用戶手動點擊通知后觸發。  }  @Override  public void onNotificationMessageArrived(Context context, MiPushMessage miPushMessage) {    //用來接收服務器向客戶端發送的通知消息,這個回調方法是在通知消息到達客戶端時觸發。另外應用在前臺時不彈出通知的通知消息到達客戶端也會觸發這個回調函數  }  @Override  public void onReceiveRegisterResult(Context context, MiPushCommandMessage miPushCommandMessage) {    //用來接收客戶端向服務器發送注冊命令后的響應結果  }  @Override  public void onCommandResult(Context context, MiPushCommandMessage miPushCommandMessage) {    //用來接收客戶端向服務器發送命令后的響應結果。這里可以收到到各種命令的返回結果,例如注冊服務、設置別名之類的結果,在這里可以實現初始化錯誤然后重啟之類的功能。  }

DemoApplication繼承Application類

這個Application類的主要功能有設置App的ID和KEY,還有在onCreate方法里面注冊推送服務。

在這個Demo里面,它還在里面弄了一個Handler來讓廣播接收器可以使用它來發Toast和讓MainActivity打印Log在TextView上。

 // user your appid the key.  private static final String APP_ID = "1000270";  // user your appid the key.  private static final String APP_KEY = "670100056270";  // 此TAG在adb logcat中檢索自己所需要的信息, 只需在命令行終端輸入 adb logcat | grep  // com.xiaomi.mipushdemo  public static final String TAG = "com.xiaomi.mipushdemo";  private static DemoHandler sHandler = null;  private static MainActivity sMainActivity = null;  @Override  public void onCreate() {    super.onCreate();    // 注冊push服務,注冊成功后會向DemoMessageReceiver發送廣播    // 可以從DemoMessageReceiver的onCommandResult方法中MiPushCommandMessage對象參數中獲取注冊信息    if (shouldInit()) {      MiPushClient.registerPush(this, APP_ID, APP_KEY);    }    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);    if (sHandler == null) {      sHandler = new DemoHandler(getApplicationContext());    }  }  //這里是檢測進程是否處于前臺的方法  private boolean shouldInit() {    ActivityManager am = ((ActivityManager) getSystemService(Context.ACTIVITY_SERVICE));    List<RunningAppProcessInfo> processInfos = am.getRunningAppProcesses();    String mainProcessName = getPackageName();    int myPid = Process.myPid();    for (RunningAppProcessInfo info : processInfos) {      if (info.pid == myPid && mainProcessName.equals(info.processName)) {        return true;      }    }    return false;  }

MainActivity

Demo里面的MainActivity主要是實現界面的那些按鈕的處理,借此來告訴我們怎樣設置本地的推送方案,具體的設置有

  • 設置、撤銷別名:別名(Alias)是除了Regid(自動生成的)和UserAccount之外的用戶標識,可以通過MiPushClient.setAlias()方法和MiPushClient.unsetAlias()來設定和撤銷。
  • 設置、撤銷用戶賬號(UserAccoun):可以通過MiPushClient.setUserAccount()方法和MiPushClient.unsetUserAccount()方法來設定和撤銷。
  • 訂閱、撤銷標簽:開發者可以結合自己的業務特征,給用戶打上不同的標簽(Topic)。消息推送時,開發者可以結合每條消息的內容和目標用戶,為每條消息選擇對應的標簽,向打了該標簽的所有用戶推送消息。可以通過MiPushClient.subscribe()和MiPushClient.unsubscribe()來訂閱和取消。
  • 暫停、恢復推送,設置推送時間:設置推送時間Demo用到了一個自制的Dialog類TimeIntervalDialog來讓用戶設置(強行增大了代碼量),可以通過MiPushClient.setAcceptTime()來設置,暫停和恢復是通過pausePush()和resumePush()設置。
  •  不過暫停和恢復底層上的實現其實還是調用設置推送時間為00:00 - 00:00和00:00 - 23:59而已,而且還要注意的是不處在接收時段是暫時不接收推送消息而已,一旦到了接收時段那個消息還是會陸續推送到來。

AndroidManifest文件的配置

首先小米推送支持最低的Android版本是2.2,所以要

<uses-sdk android:minSdkVersion="8"/>

后需要的是如下權限:

  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  <uses-permission android:name="android.permission.INTERNET" />  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  <uses-permission android:name="android.permission.READ_PHONE_STATE" />  <uses-permission android:name="android.permission.GET_TASKS" />  <uses-permission android:name="android.permission.VIBRATE" />  <permission android:name="com.xiaomi.mipushdemo.permission.MIPUSH_RECEIVE" android:protectionLevel="signature" />  <!--這里com.xiaomi.mipushdemo改成app的包名-->    <uses-permission android:name="com.xiaomi.mipushdemo.permission.MIPUSH_RECEIVE" />  <!--這里com.xiaomi.mipushdemo改成app的包名-->

然后就是要注冊一堆的BroadcastReceiver(都是靜態注冊,因為要長期處在后臺運行,還有繼承了PushMessageReceiver的DemoMessageReceiver也需要注冊不要忘了)和Service,一共是3個廣播接收器和4個服務。

       

<service     android:enabled="true"     android:process=":pushservice"     android:name="com.xiaomi.push.service.XMPushService"/>    <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:enabled="true"     android:exported="true"     android:name="com.xiaomi.mipush.sdk.PushMessageHandler" />     <service android:enabled="true"     android:name="com.xiaomi.mipush.sdk.MessageHandleService" />     <!--注:此service必須在2.2.5版本以后(包括2.2.5版本)加入-->    <receiver     android:exported="true"     android:name="com.xiaomi.push.service.receivers.NetworkStatusReceiver" >     <intent-filter>      <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />      <category android:name="android.intent.category.DEFAULT" />     </intent-filter>    </receiver>    <receiver     android:exported="false"     android:process=":pushservice"     android:name="com.xiaomi.push.service.receivers.PingReceiver" >     <intent-filter>      <action android:name="com.xiaomi.push.PING_TIMER" />     </intent-filter>    </receiver>    <receiver      android:name="com.xiaomi.mipushdemo.DemoMessageReceiver"      android:exported="true">      <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>

只要把demo的AppId和AppKey改好成自己的(記得是對應好包名和應用名字的),然后就能夠接收相應的推送了。

android,小米推送平臺,消息推送,android消息推送demo

移動端移植實現

大概理解了這個Demo之后,就可以把小米推送移植到自己的App上去實現自己的需求了,移植的時候要注意:

  1. 首先要想好應用的包名,從小米推送平臺那里注冊,獲得AppID和AppKey。
  2. 然在把小米推送的SDK加入庫。
  3. AndroidManifest文件里面配置好權限(在Android6.0里面的權限可能需要動態獲?。?,注冊好那些Service和BroadcastReceiver
  4. 在應用開始的時候記得初始化注冊小米推送服務。
  5. 最后就可以繼承一個PushMessageReceiver,在里面為所欲為了。
  6. 最后提供一個我寫的簡化之后的Demo,理解了上面之后可以參考我這個簡化的移植了,畢竟上面的太全面,我們實際看需求實現就行。

注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
北条麻妃一区二区在线观看| 在线观看欧美成人| 欧美国产精品va在线观看| 国产欧美一区二区三区四区| 亚洲欧美中文字幕| 国产精品狼人色视频一区| 欧美又大粗又爽又黄大片视频| 成人中文字幕在线观看| 狠狠色噜噜狠狠狠狠97| 色狠狠av一区二区三区香蕉蜜桃| 国产精品1234| 91久久精品在线| 91精品国产高清自在线| 麻豆成人在线看| 精品国产欧美一区二区五十路| 91精品久久久久| 亚洲精品免费在线视频| 国产午夜精品全部视频播放| 成人在线精品视频| 91视频国产精品| 亚洲欧美一区二区三区在线| 国产精品久久久久77777| 亚洲欧美精品伊人久久| 国产精品视频免费观看www| 欧洲精品在线视频| 国产精品国产亚洲伊人久久| 久久久久国色av免费观看性色| 26uuu国产精品视频| 久久青草福利网站| 一区二区欧美日韩视频| 久久久久在线观看| 国产黑人绿帽在线第一区| 久久影院模特热| 国产日韩精品电影| 中日韩午夜理伦电影免费| 精品一区二区亚洲| 国产欧美最新羞羞视频在线观看| 91在线中文字幕| 日韩精品免费一线在线观看| 久久久久久亚洲| 亚洲国产成人久久综合一区| 日韩三级影视基地| 久久精品视频99| 亚洲欧美国产va在线影院| 一区二区在线免费视频| 日韩成人久久久| 欧美日本中文字幕| 国产999精品久久久| 国产亚洲aⅴaaaaaa毛片| 国产精品自产拍在线观看| 亚洲欧美中文另类| 欧美大片在线免费观看| 国产精品久久久久久久久粉嫩av| 色噜噜狠狠狠综合曰曰曰| 中文字幕亚洲欧美一区二区三区| 色在人av网站天堂精品| 欧美极品美女电影一区| 欧美夫妻性生活xx| 欧美精品一本久久男人的天堂| 欧美日韩免费看| 美日韩精品视频免费看| 亚洲天堂成人在线| 国产一区二区黑人欧美xxxx| 韩剧1988免费观看全集| 国内精品久久久久影院 日本资源| 国产欧洲精品视频| 欧洲亚洲女同hd| 国产精品视频区| 欧美精品免费在线观看| 国产精品女人久久久久久| 国产精品十八以下禁看| 久久色在线播放| 欧美国产亚洲视频| 国产成人精品日本亚洲| 亚洲成人久久久久| 国产日韩欧美夫妻视频在线观看| 国产精品久久久久久久久久小说| 欧美裸身视频免费观看| 中文字幕日韩av综合精品| 国产91精品不卡视频| 日韩日本欧美亚洲| 国产精品激情av在线播放| 欧美在线精品免播放器视频| 黄色一区二区在线观看| 亚洲aⅴ男人的天堂在线观看| 久久久久国产视频| 亚洲日本欧美中文幕| 国产aaa精品| 亚洲一区二区三区乱码aⅴ蜜桃女| 岛国av一区二区三区| 亚洲国产中文字幕在线观看| 成人疯狂猛交xxx| 国产精品美女主播在线观看纯欲| 日韩av在线一区二区| 亚洲福利精品在线| 国产999精品久久久| 91高清免费视频| 91精品久久久久久久久中文字幕| 亚洲欧美三级在线| 亚洲一区二区免费| 国产成人精品久久| 色无极影院亚洲| 日韩中文字幕精品| 97视频网站入口| 一区二区三区在线播放欧美| 国产欧美精品久久久| 欧美成年人视频网站| 日韩中文字幕不卡视频| 亚洲国产一区二区三区四区| 国产精品一区二区三区久久久| 日韩中文字幕不卡视频| 国产精品成人aaaaa网站| 成人福利网站在线观看| 日韩精品在线第一页| 91精品综合视频| 97国产精品免费视频| 亚洲xxxx视频| 国产成人久久久精品一区| 日韩美女免费视频| 国产一区二区三区直播精品电影| 亚洲影院污污.| 国产精品第七影院| 97超级碰碰碰| 538国产精品一区二区在线| 疯狂做受xxxx欧美肥白少妇| 亚洲精品456在线播放狼人| 日韩高清人体午夜| 久久精品国产亚洲| 欧美做受高潮电影o| 亚洲国产免费av| 欧美成人午夜剧场免费观看| 91精品美女在线| 国产亚洲精品日韩| 国产盗摄xxxx视频xxx69| 日韩有码视频在线| 欧美日韩国产123| 国产欧美精品va在线观看| 91精品国产高清久久久久久久久| 欧美精品免费在线观看| 欧美肥老太性生活视频| 日本一本a高清免费不卡| 亚洲网址你懂得| 26uuu国产精品视频| 4p变态网欧美系列| 欧美日韩国产一区二区| 精品国产区一区二区三区在线观看| 免费97视频在线精品国自产拍| 久久99国产精品自在自在app| 欧美激情伊人电影| 日韩久久精品电影| 欧美成人中文字幕| 国产成人精品免高潮在线观看| 欧美精品少妇videofree| 国产成人av在线播放| 黑丝美女久久久| 亚洲午夜精品久久久久久久久久久久| 亚洲人成人99网站| 91av视频在线免费观看| 国产精品h在线观看| 国产又爽又黄的激情精品视频| 亚洲人成电影在线播放| 亚洲第一在线视频| 亚洲精选在线观看| 日韩av手机在线|