前言
合理的使用Push服務,能極大提高使用者活躍度,本博《Parse Push快速入門手冊》僅簡單介紹和使用了一下Parse的推送服務,這裡介紹更多的使用方法和技巧。系列文章分兩篇來介紹Push服務,分別針對所有使用者(上)和渠道定製使用者(下)。
聲明
歡迎轉載,但請保留文章原始出處:)
部落格園:http://www.cnblogs.com
農民伯伯: http://over140.cnblogs.com
本文
一、系列
1.1【Parse】開發筆記(1)—— 準備
1.2【Parse】開發筆記(2)—— 從Mysql匯入資料到Parse Data
1.3【Parse】開發筆記(3)—— 實現尋找附近的功能(LBS)
二、準備
2.1官網的Android Push Notifications
https://www.parse.com/tutorials/android-push-notifications
2.2 【Android】Parse Push快速入門手冊
http://www.cnblogs.com/over140/archive/2013/03/19/2968560.html
三、 功能
3.1準備
AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.VIBRATE" />
<application
android:name="com.nmbb.lol.LOLApplication"
android:allowBackup="true"
android:icon="@drawable/app_icon"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<service android:name="com.parse.PushService" />
<receiver android:name="com.parse.ParseBroadcastReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.USER_PRESENT" />
</intent-filter>
</receiver>
<receiver android:name=".receiver.ReceiverPush" >
<intent-filter>
<action android:name="com.nmbb.lol.push" />
</intent-filter>
</receiver>
</application>
代碼說明:
注意,這隻是程式碼片段,加入項目做相應的調整。
a)、android.permission.RECEIVE_BOOT_COMPLETED許可權非必須,可以把這個和ParseBoradcastReceiver的BOOT_COMPLETED一起去掉,但重啟後可能就無法接收推送了,需要開啟一次應該才可以。(我就想這樣!能少用一個許可權就少一個)注意訊息不會丟失,會在下一次一起收到。
b)、PushService必須要註冊,否則無法使用
c)、ReceiverPush後面要用到,主要用於接收廣播,方便自己處理推送資料。
Application
@Override
public void onCreate() {
super.onCreate();
Parse.initialize(this, "Application ID",
"Client Key");
// PushService.subscribe(this, "", WebActivity.class);
PushService.setDefaultPushCallback(this, WebActivity.class);
ParseInstallation.getCurrentInstallation().saveInBackground();
}
代碼說明:
除了配置AndroidManifest.xml,僅在Application的onCreate中加入這三行代碼即可。
a)、注意最後一行好像是最新動向加上的,否則無法接收到Push,大意是登記註冊的意思,可以在Data Browser中對象Installation中看到。
b)、setDefaultPushCallback第二個參數,表示點擊Notifacation時處理的Activity
3.2以通知(Notification)的形式顯示推送資訊(狀態列顯示通知)
進入Parse背景Push Notifications,點擊Send a push
3.2.1以訊息(Message)的形式發送
通過查看發送報告,發現其實也是以JSON資料發送的,不過只包含alert節點。
3.2.2以JSON形式發送
title和alert分別對應Android Notification對象的標題和訊息,不設定title就預設顯示APP的名稱。
最後點擊Send Notification就可以了,順利的話可以看到裝置上收到Notification。
3.2.3處理通知資訊
當點擊狀態列的通知時,會預設跳轉到setDefaultPushCallback指定的Activity中,可以從Intent中解析Push的資料:
直接從getIntent().getStringExtra("com.parse.Data")即可取到上面的資訊,然後完成商務邏輯即可。
3.2自訂以廣播的形式後台接受推送資訊(狀態列不顯示通知)
只要以JSON格式發送,並且不包含title和alert節點,即不會顯示Notification了(大家可以反編譯看一下StandardPushCallback類),那麼如何接受Push的資料呢?
3.2.1首先註冊Boradcast,設定Intent-filter,這裡設定的action是com.nmbb.lol.push,代碼上面已經給出。
3.2.2json資料:
{"action":"com.nmbb.lol.push","url":"http://v.youku.com/player/getRealM3U8/vid/XNTU1NjkzMDAw/type/mp4/v.m3u8"}
必須包含action和匹配的值,才能接受到推送廣播。接下來就可以做你想做的事情了!這裡貼一下Boradcast代碼:
public class ReceiverPush extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (context != null && intent != null
&& "com.nmbb.lol.push".equals(intent.getAction())) {
try {
JSONObject json = new JSONObject(intent.getExtras().getString(
"com.parse.Data"));
String title = json.optString("title");
String message = json.optString("message");
String action = json.optString("action");
String url = json.optString("url");
ToastUtils.showLongToast(message);
} catch (JSONException e) {
Logger.e(e);
}
}
}
}
3.3其他注意
a).發送訊息時注意右上方的recipients的數量,表示收到推送使用者的數量。
b).注意在Settings中開啟Client push
c).今天還碰到一個特別奇怪的問題,死活收不到推送,不知道是不是和APP名稱設定為中文有關係,刪了重建弄個英文的又好了。
四、文章
Android Push Notifications In Parse: A deep overview