1. 程式人生 > >Android整合“小米訊息推送”詳細教程

Android整合“小米訊息推送”詳細教程

訊息推送這個玩意,大部分APP都有的,你像QQ、淘寶、微博、支付寶、網易新聞等,他們的訊息推送簡直傷心病狂。
常見的第三方訊息推送方案有這些:

  • 極光推送
  • 友盟推送
  • 個推
  • 小米推送
  • 騰訊信鴿
  • 百度雲推送
  • 阿里雲推送

今天不講別的,就講講小米推送的整合教程,說實話挺簡單的,步驟也不多,推送效果尚可。

2、註冊小米賬號,並在小米開放平臺建立應用
建立應用地址:http://dev.xiaomi.com/myitems
我的應用包名:com.sdc.cfm
建立應用後會得到一些APPID,APPKey,APPSecret等資訊。

3、參照Android Studio的開發demo進行整合
先把jar包拷貝到專案的libs資料夾,然後選中jar包右鍵選擇“add library”引入。

4、開啟專案的AndroidManifest.xml檔案,把Demo中使用的許可權拷貝進去。
把許可權中“com.xiaomi.mipushdemo”包名替換成自己專案的包名,比如我的包名:com.sdc.cfm

<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" /> <!-- the following 2 com.xiaomi.mipushdemo should be changed to your package name -->
<permission android:name="com.sdc.cfm.permission.MIPUSH_RECEIVE" android:protectionLevel="signature" /> <uses-permission android:name="com.sdc.cfm.permission.MIPUSH_RECEIVE" /> <uses-permission android:name="android.permission.VIBRATE" />

5、把AndroidManifest.xml檔案中註冊的service和receiver拷貝到自己專案中。
把name中“com.xiaomi.mipushdemo”包名替換成自己專案的包名。

<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
    android:name="com.xiaomi.push.service.XMPushService"
    android:enabled="true"
    android:process=":pushservice" />

<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" />

<receiver
    android:name="com.sdc.cfm.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>

<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>

6、參照DemoApplication.java檔案在自己的Application檔案中初始化小米推送。
比如我的Application檔案為MyApplication,記得要在AndroidManifest.xml中命名。
在oncreate()方法中呼叫initXiaomiPush()方法。

//小米訊息推送APP_ID ,APP_KEY 
private static final String APP_ID = " ";
private static final String APP_KEY = " ";
private static DemoHandler sHandler = null;
private static MainActivity sMainActivity = null;

@Override
public void onCreate() {
    super.onCreate();
    initXiaomiPush();
}

/** 初始化小米訊息推送 **/
private void initXiaomiPush(){
    // 註冊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<ActivityManager.RunningAppProcessInfo> processInfos = am.getRunningAppProcesses();
    String mainProcessName = getPackageName();
    int myPid = Process.myPid();
    for (ActivityManager.RunningAppProcessInfo info : processInfos) {
        if (info.pid == myPid && mainProcessName.equals(info.processName)) {
            return true;
        }
    }
    return false;
}

public static DemoHandler getHandler() {
    return sHandler;
}

public static void setMainActivity(MainActivity activity) {
    sMainActivity = activity;
}

public static class DemoHandler extends Handler {
    private Context context;
    public DemoHandler(Context context) {
        this.context = context;
    }
    @Override
    public void handleMessage(Message msg) {
        String s = (String) msg.obj;
        if (sMainActivity != null) {
            sMainActivity.refreshLogInfo();
        }
        if (!TextUtils.isEmpty(s)) {
            Toast.makeText(context, s, Toast.LENGTH_LONG).show();
        }
    }
}

7、把DemoMessageReceiver.java檔案拷貝到專案中。
然後,修改AndroidManifest.xml檔案中DemoMessageReceiver註冊的名字,包名修改為自己專案的包名。比如,我的包名:com.sdc.cfm

android:name="com.sdc.cfm.receiver.DemoMessageReceiver"

8、在MainActivity中設定別名等識別標識。

@Override 
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    MyApplication.setMainActivity(this);
    //設定別名,撤銷別名(alias)
    MiPushClient.setAlias(MainActivity.this, "demo1", null);
    //MiPushClient.unsetAlias(MainActivity.this, "demo1", null);
    //設定賬號,撤銷賬號(account)
    MiPushClient.setUserAccount(MainActivity.this, "user1", null);
    //MiPushClient.unsetUserAccount(MainActivity.this, "user1", null);
    //設定標籤,撤銷標籤(topic:話題、主題)
    MiPushClient.subscribe(MainActivity.this, "IT", null);
    //MiPushClient.unsubscribe(MainActivity.this, "IT", null);
    //設定接收時間(startHour, startMin, endHour, endMin)
    MiPushClient.setAcceptTime(MainActivity.this, 7, 0, 23, 0, null);
    //暫停和恢復推送
    //MiPushClient.pausePush(MainActivity.this, null);
    //MiPushClient.resumePush(MainActivity.this, null);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    MyApplication.setMainActivity(null);
}

如有疑問,歡迎指正!

相關推薦

Android整合小米訊息詳細教程

訊息推送這個玩意,大部分APP都有的,你像QQ、淘寶、微博、支付寶、網易新聞等,他們的訊息推送簡直傷心病狂。 常見的第三方訊息推送方案有這些: 極光推送 友盟推送 個推 小米推送 騰訊信鴿 百度雲推送 阿里雲推送 今天不講別的,就講講小米推送的整合教程

android 實現mqtt訊息,以及不停斷線重連的問題解決

前段時間專案用到mqtt的訊息推送,整理一下程式碼,程式碼的原型是網上找的,具體哪個地址已經忘記了。 程式碼的實現是新建了一個MyMqttService,全部功能都在裡面實現,包括連伺服器,斷線重連,訂閱訊息,處理訊息,釋出訊息等基本操作。 首先新增依賴: dependencies { &

Android UDP - 簡單訊息功能

近期接觸了幾個小的Android開發專案,根據需求要利用到網路傳輸中的UDP協議方式傳輸,遇到不少坑,在此分享一下在Android應用中UDP的一些簡單技術功能實現,希望能幫到用得到的同僚。 需(wo)求(yao)分(gan)析(ma): 從PC上輸入一串亂七八糟,然後能在我手機(某為pow

Android 整合華為 push

由於專案需要我們不得不對華為push進行研究。 按照國際慣例先百度一波,發現各個大牛都是對於華為push的填坑,很明顯,這個推送的問題還是有很多的。 這裡引用:Android整合華為推送踩坑問題總結 使用老版push還是新版push PushReceiver中的onEve

Android 整合華為

Android的推送業務現狀還是比較混亂,手機廠商各有一套推送機制和SDK需要你去整合,今天先談一談華為的推送服務整合吧 整合背景:React Native專案,已經集成了一套JPush,但是目前相當一部分Android機型極光推送在應用殺掉之後是不能喚醒的,Android和Appl

netty-socketio整合springboot訊息

netty-socketio整合springboot訊息推送 1.netty-socketio訊息推送   1)在專案中常常涉及到訊息推送的情況,訊息推送要求的實時性,使用傳統的方式已經不能滿足需求了;   2)使用netty-socketio做訊息推送,實現步驟,加入jar包----->寫啟動,新

SpringBoot2.0整合MQTT訊息功能

        這幾天在弄後端管理系統向指定的Android客戶端推送訊息的功能模組,查閱了網上很多部落格介紹的許多方式,最終選擇基於MQTT協議來實現,MQTT是一個輕量級的訊息釋出/訂閱協議,它是實現基於手機客戶端的訊息推送伺服器的理想解決方案。         實現M

Android接入極光訊息

極光訊息推送: 極光推送(JPush)是一個端到端的推送服務,使得伺服器端訊息能夠及時地推送到終端使用者手機上,讓開發者積極地保持與使用者的連線 主要功能 保持與伺服器的長連線,以便訊息能夠即時推送到達客戶端 接收通知與自定義訊息,並向開發者App 傳遞

React Native整合極光訊息

在蘋果開發者賬戶中配置好自己的APP的應用ID,然後使用上述一鍵生成證書功能生成自己的開發證書(不要忘了勾上推送通知)! 在IOS推送設定中上傳自己的證書(密碼一鍵生成後會給出) 3.xcode修改 三、專案構建: 1

springboot如何整合mqtt訊息

1.需求分析    近期筆者專案需要用到mqtt實現訊息推送,筆者選擇emq作為mqtt伺服器載體,上篇筆者講解了如何在linux中安裝mqtt服務,安裝連結:https://blog.csdn.net/zhangxing52077/article/details/80567

android客戶端訊息功能實現方案

1.使用第三方推送平臺 如友盟、極光、百度等現成的訊息推送。好處:訊息及時、穩定,整合簡單。不需要自己搭建支援伺服器,但是可能涉及到收費、保密、服務質量、擴充套件等問題。 2、MQTT協議實現android推送 MQTT是一個輕

android當中的訊息

作為訊息推送,一般是捆綁service進行間歇性的請求伺服器獲得資料,以新訊息提醒的方式進行的。 這裡只放出訊息推送的程式碼。 以下為程式碼: //更新通知欄 /*獲取狀態通知欄管理*/

Android開發-在Android應用裡整合友盟訊息SDK的實現(相容小米、華為、魅族機型離線

前 言 最近由於專案的功能需求的需要,需要在Android應用整合訊息推送的功能,而目前市面上的第三方訊息推送除了友盟推送外,還有極光推送、小米推送、個推以及信鴿(騰訊)推送等。當時本人對比各大第三方的訊息推送進行了測試,覺得友盟訊息推送整合簡單,推送訊息的

小米殺不死的訊息-- Android、java後端同時接入小米

作者簡介 微信公眾號(高質量文章推送):陳博易 前言 小米手機選擇小米推送的原因:App程序被殺死的情況下,小米手機上的小米推送服務並不會被殺死(除非使用者手動在設定中關閉了該推送的許可權),所以我選擇給大家分享下小米推送。 這裡參

Android 整合友盟訊息

今天給夥伴們講解一下如何整合友盟的訊息推送 首先我們需要在友盟的官網註冊開發者賬號且建立一個訊息推送的運用 建立運用的時候包名就是咋們的程式包名 咋們這裡使用的是android studio 自動匯入模式(在app下的build.gradle裡面新增一下依賴)

Android 中使用極光訊息詳細介紹(一)

簡介 在Android開發中,伺服器有時候會向客戶端推送一些使用者可能感興趣的訊息,比如:淘寶,網易新聞,美團等都會向我們客戶端推送訊息.今天我就介紹一個第三方免費推送訊息的服務:極光推送 官方資源 具體使用 效果 官方提供了Demo

Android 基於Netty的訊息方案之物件的傳遞(四)

在上一篇文章中《Android 基於Netty的訊息推送方案之字串的接收和傳送(三)》我們介紹了Netty的字串傳遞,我們知道了Netty的訊息傳遞都是基於流,通過ChannelBuffer傳遞的,那麼自然,Object也需要轉換成ChannelBuffer來傳遞。好在Netty本身已經給我們寫好了

Android 基於Netty的訊息方案之字串的接收和傳送(三)

在上一篇文章中《Android 基於Netty的訊息推送方案之概念和工作原理(二)》 ,我們介紹過一些關於Netty的概念和工作原理的內容,今天我們先來介紹一個叫做ChannelBuffer的東東。 ChannelBuffer  Netty中的訊息傳遞,都必須以位元

Android 基於Netty的訊息方案之概念和工作原理(二)

上一篇文章中我講述了關於訊息推送的方案以及一個基於Netty實現的一個簡單的Hello World,為了更好的理解Hello World中的程式碼,今天我來講解一下關於Netty中一些概念和工作原理的內容,如果你覺得本篇文章有些枯燥,請先去閱讀《Android 基於Netty的訊息推送方案之Hell

IOS APNS訊息框架介紹(pushy)以及詳細使用方法

最近公司需要做IOS訊息推送的功能,我負責後臺推送,IOS端資料處理以及回撥我不負責,本篇文章主要介紹基於java的apns訊息推送,使用框架為pushy。 宣告:我先前也沒有接觸過這個IOS推送,自己研究了兩天,通過百度,對比各個框架的優缺點,最後選擇了這個框架,有說的不對的地方,還