您的位置:首页 > 移动开发 > Android开发

【Android】Parse 开发笔记(4)—— Push Notifications(上)

2013-06-12 21:54 337 查看
前言

合理的使用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快速入门指南

/article/4602849.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.2 json数据:

{"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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: