zoukankan      html  css  js  c++  java
  • 【Android】Parse 开发笔记(4)—— Push Notifications(上)


    前言

    合理的使用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.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

  • 相关阅读:
    [Javascript] Broadcaster + Operator + Listener pattern -- 9. Create modify, filter, map operators
    [Javascript] Broadcaster + Operator + Listener pattern -- 8. Pass a Done Symbol when an Async Function is Done
    [Javascript] Broadcaster + Operator + Listener pattern -- 7. Create a broadcaster forOf
    [Javascript] Broadcaster + Operator + Listener pattern -- 6. Create a Buffer to Pair Values Together with Zip
    [Functional Programming] Match Function Requirements with Lodash Partial and Flip
    [Javascript] Broadcaster + Operator + Listener pattern -- 5. Merge (Example)
    [React] Performance: Split state update and component render with Hoc
    [React] Optimize context value
    [React] useAsync
    Nodejs.sublime-build 在sublime3中的配置
  • 原文地址:https://www.cnblogs.com/over140/p/3132496.html
Copyright © 2011-2022 走看看