1. 程式人生 > >Bmob 開發 Android程式快速入門 10 訊息推送

Bmob 開發 Android程式快速入門 10 訊息推送

                             Bmob 開發 Android程式快速入門 10 訊息推送

 

 

訊息推送簡介

推送通知是讓使用者及時被通知、和你的應用保持聯絡的一種非常棒的方式,你可以快速而有效地通知到所有的使用者,下面這個教程將會教你如何使用Bmob來推送訊息。

訊息推送快速入門

一、在Bmob官方網站的下載介面中,選擇下載AndroidSDK,將下載的zip壓縮包進行解壓,得到bmobPush_(版本號).jar,然後將它放在你專案根目錄下的"libs"目錄中。

二、在您的應用程式AndroidManifest.xml檔案中新增相應的許可權:

<!-- BmobPush SDK許可權 -->
    <permission android:protectionLevel="normal" android:name="cn.bmob.permission.push"></permission>
    <uses-permission android:name="cn.bmob.permission.push"/><!-- 新增自定義的許可權-->
    <uses-permission android:name="android.permission.READ_LOGS" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />    
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />

 

三、在您的應用程式AndroidManifest.xml檔案中註冊BmobPush SDK執行所需的推送服務和訊息接收器:

    <service
               android:label="PushService"
            android:name="cn.bmob.push.lib.service.PushService"
            android:process="cn.bmob.push"
            android:permission="cn.bmob.permission.push"
            android:exported="true">
             <intent-filter>
                 <action android:name="cn.bmob.push.lib.service.PushService"/>
             </intent-filter>
        </service>

        <receiver android:name="cn.bmob.push.PushReceiver" >
            <intent-filter android:priority="2147483647" ><!--優先順序加最高-->
                <!-- 系統啟動完成後會呼叫 -->
                <action android:name="android.intent.action.BOOT_COMPLETED" />               
                <!-- 解鎖完成後會呼叫 -->
                <action android:name="android.intent.action.USER_PRESENT" />
                <!-- 監聽網路連通性 -->
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />               
            </intent-filter>
        </receiver>

 

四、在你的應用程式中建立一個訊息接收器。

Push訊息通過action=cn.bmob.push.action.MESSAGE的Intent把資料傳送給客戶端your.package.MyPushMessageReceiver,訊息格式由應用自己決定,PushService只負責把伺服器下發的訊息以字串格式透傳給客戶端。 your.package.MyPushMessageReceiver程式碼示例如下:

public class MyPushMessageReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        if(intent.getAction().equals(PushConstants.ACTION_MESSAGE)){
            Log.d("bmob", "客戶端收到推送內容:"+intent.getStringExtra(PushConstants.EXTRA_PUSH_MESSAGE_STRING));
        }
    }

}

 

五、啟動推送服務

在你的應用程式主Activity中呼叫如下方法:

    // 使用推送服務時的初始化操作
    BmobInstallation.getCurrentInstallation(this).save();
    // 啟動推送服務
    BmobPush.startWork(this, "你的AppKey");

程式碼中的"你的AppKey"就是你在Bmob後臺中建立的應用程式的AppKey,如果你不知道這是什麼,可以參考快速入門文件中的註冊Bmob賬號部分。

 

六、在web端進行推送設定

在應用面板-->訊息推送-->推送設定介面中填寫包名進行儲存。 

 

七、在web端推送訊息

完成以上步驟後,你可以執行應用程式,從web推送一條訊息給客戶端。 

在後臺推送訊息給Android和iOS兩個平臺的時候,有一些需要注意的: 1、由於Android和iOS的提送機制不同,iOS要經過APNS,Android的推送完全是走Bmob的長連線服務,為相容這個問題,如果你選擇傳送格式為“json”格式時,需要新增APNS相容頭部(見下面json的aps部分),推送內容格式如下:

{
    "aps": {
    "sound": "cheering.caf", 
    "alert": "這個是通知欄上顯示的內容", 
    "badge": 0 
    }, 
    "xx" : "json的key-value對,你可以根據情況新增更多的,客戶端進行解析獲取", 
}

其中,sound是iOS接收時的聲音,badge是iOS通知欄的累計訊息數。

2、如果你選擇傳送格式為“text”時,推送內容為“推送訊息測試。。。。”,Bmob會自動新增aps部分發送給APNS,,相當於自動生成如下的json格式的推送內容:

{
    "aps": {
        "alert": "推送訊息測試。。。。", 
    }
}

同時,也會發送給Android端,相當於自動生成如下的json格式的推送內容:

{
    "alert" : "推送訊息測試。。。。", 
}

3、如果只是傳送給Android端,大家可以自定義json格式的資料。

4、由於iOS的APNS的推送的大小是有限制的,預設最多256bytes,因此,如果你需要跨平臺互通的話,需注意推送的內容不要太長。

5、想要更多瞭解Bmob的推送格式的朋友,如即時聊天,可以檢視我們在問答社群中的回答:http://wenda.codenow.cn//?/question/204

 

八、原始碼下載

為了更好的讓開發者朋友正確的整合和使用Bmob推送功能,我們還提供了一個關於Bmob推送功能的簡單Demo以供大家參考,有需要的朋友可以到如下地址進行原始碼的下載。https://github.com/bmob/bmob-android-demo-push

訊息推送的視訊教程和Demo

Bmob官方為大家準備了訊息推送的視訊教程,有需要的朋友可以移步瀏覽視訊教程:

客戶端推送訊息:http://v.youku.com/v_show/id_XNzQ4ODczOTc2.html

整合BmobPushSDK:http://v.youku.com/v_show/id_XNzQ4ODczOTc2.html

其他相關說明

以上文件僅僅介紹瞭如何實現訊息的一次性推送,如果你還需要用到其他的推送方法,如組播、廣播等,還需要詳細閱讀下面的相關知識。

安裝訊息推送服務

每一個Bmob的App被安裝在使用者的裝置上後,如果要使用訊息推送功能,Bmob SDK會自動生成一個Installation物件。Installation物件包含了推送所需要的所有資訊。舉例:一個棒球的App,你可以讓使用者訂閱感興趣的棒球隊,然後及時將這個球隊的訊息推送給使用者 。 您可以使用 BmobSDK,通過 BmobInstallation 物件進行一系列操作,就像你儲存和獲取其他的普通物件一樣,比如BmobObject物件。

BmobInstallation物件有幾個系統預設的特殊欄位來幫助你進行裝置定位等管理:

  • channels : 當前這個裝置訂閱的渠道名稱陣列
  • timeZone : 裝置所在位置的時區, 如Asia/Shanghai,這個會在每個BmobInstallation物件更新時同步(只讀)
  • deviceType : 裝置的的型別, 值為:"ios" 或 "android" (只讀)
  • installationId : Bmob使用的裝置唯一號 (只讀)

儲存 installation

使用訊息推送前,首先需要儲存裝置資訊。

BmobInstallation.getCurrentInstallation(this).save();

你還可以通過定義繼承自BmobInstallation的JavaBean來為BmobInstallation物件新增更多的屬性,用來定製更通用的推送。

public class MyBmobInstallation extends BmobInstallation {
    private int score;

    public int getScore() {
        return score;
    }
    public void setScore(int score) {
        this.score = score;
    }
}

訂閱頻道和退訂

訂閱頻道

訂閱頻道可使用 subscribe 方法

BmobInstallation installation = BmobInstallation.getCurrentInstallation(this);
installation.subscribe("Giants");
installation.subscribe("Mets");
installation.save();

退訂頻道

退訂頻道可使用 unsubscribe 方法

BmobInstallation installation = BmobInstallation.getCurrentInstallation(this);
installation.unsubscribe("Giants");
installation.save();

廣播推送訊息

在客戶端實現推送訊息的功能,通過 BmobPushManager 物件來完成,比如給所有裝置推送一條訊息,如下:

BmobPushManager bmobPush = new BmobPushManager(this);
bmobPush.pushMessageAll("Hello Bmob.");

組播推送訊息

傳送訊息給訂閱了Giants頻道的使用者

BmobPushManager bmobPush = new BmobPushManager(this);
BmobQuery<BmobInstallation> query = BmobInstallation.getQuery();
List<String> channels = new ArrayList<String>();
channels.add("Giants");

query.addWhereEqualTo("channels", channels);
bmobPush.setQuery(query);
bmobPush.pushMessage("訊息內容");

同時傳送訊息給多個頻道時,可以將其他頻道新增在channels中。

多播推送訊息

推送給不活躍的使用者

BmobPushManager bmobPush = new BmobPushManager(this);
BmobQuery<BmobInstallation> query = BmobInstallation.getQuery();
query.addWhereLessThan("updatedAt", new BmobDate(new Date()));
bmobPush.setQuery(query);
bmobPush.pushMessage("訊息內容");

根據查詢條件做推送

BmobPushManager bmobPush = new BmobPushManager(this);
BmobQuery<BmobInstallation> query = BmobInstallation.getQuery();
query.addWhereEqualTo("score", 80);
bmobPush.setQuery(query);
bmobPush.pushMessage("訊息內容");

請注意,where 條件查詢的都是 installations 表。這裡是假設 installations 表儲存了 score 的Number屬性,你可以像查詢普通物件一樣構造where查詢

根據平臺做推送

給Android平臺的終端推送

BmobPushManager bmobPush = new BmobPushManager(this);
BmobQuery<BmobInstallation> query = BmobInstallation.getQuery();
query.addWhereEqualTo("deviceType", "android");
bmobPush.setQuery(query);
bmobPush.pushMessage("訊息內容");

給IOS平臺的終端推送

BmobPushManager bmobPush = new BmobPushManager(this);
BmobQuery<BmobInstallation> query = BmobInstallation.getQuery();
query.addWhereEqualTo("deviceType", "ios");
bmobPush.setQuery(query);
bmobPush.pushMessage("訊息內容");

根據地理位置資訊做推送

BmobPushManager bmobPush = new BmobPushManager(this);
BmobQuery<BmobInstallation> query = BmobInstallation.getQuery();
query.addWhereWithinRadians("location", new BmobGeoPoint(112.934755, 24.52065), 1.0);
bmobPush.setQuery(query);
bmobPush.pushMessage("訊息內容");

上面的例子假設 installation 表中有個 location 屬性是 GeoPoint 型別,我們就可以根據地理資訊位置做推送。

點播推送訊息

傳送給Android單個客戶端

String installationId = "客戶端installationId";
BmobPushManager bmobPush = new BmobPushManager(this);
BmobQuery<BmobInstallation> query = BmobInstallation.getQuery();
query.addWhereEqualTo("installationId", installationId);
bmobPush.setQuery(query);
bmobPush.pushMessage("訊息內容");

傳送給iOS單個客戶端

String deviceToken = "客戶端deviceToken";
BmobPushManager bmobPush = new BmobPushManager(this);
BmobQuery<BmobInstallation> query = BmobInstallation.getQuery();
query.addWhereEqualTo("deviceToken", deviceToken);
bmobPush.setQuery(query);
bmobPush.pushMessage("訊息內容");

 

希望對你有幫助。