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("訊息內容");
希望對你有幫助。