百度推送 集成实例

选择推送平台时,根据需求,比较了极光推送和百度推送,最后决定选择百度,心里觉得,百度相对硕大一些。
从小白开始,step by step
1. 注册百度账号。
2. 快速创建应用,先体验一把推送的感觉
在新版的管理控制平台,点击管理控制平台,创建应用,渠道那个什么的,不用管,创建成功后,会产生应用相关的信息。
图片说明文字
有了API key 这个玩意,推送第一步已经完成了。
看这个界面
图片说明文字

点击推送设置--->设置包名---->快速示例---->下载Android示例。这样,一个快速demo 就完成了。把这个项目导入到Eclipse中,直接运行,在控制平台发送消息,demo 就可以收到了。
百度推送的消息分为以下几种:1. 通知,就是android的下拉通知,在通知栏里面有显示;2 消息,百度所谓的透传消息。在通知栏里没有显示。3. 富媒体,这个可以推送图片、语音、甚至视频,正在测试阶段。
百度推送的几个重要的名称,这个得理解清楚了。
API Key :应用标识,服务端绑定和推送都要用到
Secret Key :应用私钥,服务端推送时用到
APP ID: 这个id ,就是个id ,虽然也有唯一行,暂时没什么用
channel ID:推送通道id,通常对应一台终端。同样的一个app ,装在手机A 和手机B上,channel id是不同的。
user id : 应用的用户id,同一个用户,可以在不同的终端上拥有同一个app 。user id 和 channel id 配合使用,可以指定到唯一用户的唯一终端。
清楚了这些,接着就把这些东西集成到自己的项目中。
3.将SDK添加到自己工程。
3.1 添加lib 文件,layout 相关的文件,可以自己写,官方给你的demo 中的,也可以使用。添加完成后,是这个样子。
图片说明文字
3.2 将工程的Application 类继承 FrontiaApplication 类,并且添加上 super.onCreate() 这一句话,否则会崩溃。这句话,是SDK用户使用手册中的,似乎很严重的样子,不明觉厉。

```public class DemoApplication extends FrontiaApplication{

1
2
3
4
5
6
@Override
public void onCreate() {
    // TODO Auto-generated method stub
    super.onCreate();

}

}

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 3.3  AndroidManifest.xml 中添加使用权限

    <!-- Push service 运行需要的权限 -->
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.VIBRATE" />

    <!-- for log. -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER"/>
    <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />

    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

3.4 注册Activity 和Broadcast Receiver
    自己的Activity就不说了,推送使用到富媒体的,注册这两个Activity
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
     <!-- push service rich media display -->
    <activity
        android:name="com.baidu.android.pushservice.richmedia.MediaViewActivity"
        android:configChanges="orientation|keyboardHidden"
        android:label="MediaViewActivity" >
    </activity>
    <activity
        android:name="com.baidu.android.pushservice.richmedia.MediaListActivity"
        android:configChanges="orientation|keyboardHidden"
        android:label="MediaListActivity"
        android:launchMode="singleTask" >
    </activity>
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
         注册自定义的Broadcast Receiver 
        <!-- push service client -->
        <!--这个是自己定义的-->
        <receiver android:name="your package.MyPushMessageReceiver">
            <intent-filter>
                <!-- 接收push消息 -->
                <action android:name="com.baidu.android.pushservice.action.MESSAGE" />
                <!-- 接收bind,unbind,fetch,delete等反馈消息 -->
                <action android:name="com.baidu.android.pushservice.action.RECEIVE" />
                <action android:name="com.baidu.android.pushservice.action.notification.CLICK" />
            </intent-filter>
        </receiver>
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
    //注册服务端service
    <!-- push service -->
    <receiver android:name="com.baidu.android.pushservice.PushServiceReceiver"
        android:process=":bdservice_v1">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            <action android:name="com.baidu.android.pushservice.action.notification.SHOW" />
            <action android:name="com.baidu.android.pushservice.action.media.CLICK" />
        </intent-filter>
    </receiver>

    <receiver android:name="com.baidu.android.pushservice.RegistrationReceiver"
        android:process=":bdservice_v1">
        <intent-filter>
            <action android:name="com.baidu.android.pushservice.action.METHOD" />
            <action android:name="com.baidu.android.pushservice.action.BIND_SYNC" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.PACKAGE_REMOVED"/>
            <data android:scheme="package" />
        </intent-filter>                   
    </receiver>

    <service
        android:name="com.baidu.android.pushservice.PushService"
        android:exported="true"
        android:process=":bdservice_v1" />
1
2
3
4
5
最后,别忘了添加API Key


```java
<meta-data android:name="api_key" android:value="your API Key" />

3.5 调用API
3.5.1 绑定: 默认绑定是自动完成的。无账号绑定就用这个方法

1
2
3
4
    PushManager.startWork(getApplicationContext(),
                      PushConstants.LOGIN_TYPE_API_KEY, 
                      Utils.getMetaValue(MainActivity.this, "api_key"));
//Utils 工具类是官方提供好的。

绑定的结果,会在MyPUshMessageReceiver 类的 OnBind() 方法中返回

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/**
     * 调用PushManager.startWork后,sdk将对push server发起绑定请求,这个过程是异步的。绑定请求的结果通过onBind返回。
     * 如果您需要用单播推送,需要把这里获取的channel id和user id上传到应用server中,再调用server接口用channel id和user id给单个手机或者用户推送。
     * 
     * @param context
     *          BroadcastReceiver的执行Context
     * @param errorCode
     *          绑定接口返回值,0 - 成功
     * @param appid 
     *          应用id。errorCode非0时为null
     * @param userId
     *          应用user id。errorCode非0时为null
     * @param channelId
     *          应用channel id。errorCode非0时为null
     * @param requestId
     *          向服务端发起的请求id。在追查问题时有用;
     * @return
     *     none
     */
    @Override
    public void onBind(Context context, int errorCode, String appid, 
                String userId, String channelId, String requestId) {
        String responseString = "onBind errorCode=" + errorCode + " appid="
                + appid + " userId=" + userId + " channelId=" + channelId
                + " requestId=" + requestId;
        Log.e(TAG, responseString);

        // 绑定成功,设置已绑定flag,可以有效的减少不必要的绑定请求
        if (errorCode == 0) {
            Utils.setBind(context, true);
            Log.e(TAG, responseString+"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
        }
        // Demo更新界面展示代码,应用请在这里加入自己的处理逻辑
        updateContent(context, responseString);
    }

接受通知后的处理方法,在通知没有点击前,是无法获取通知内容的

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
    /**
     * 接收通知点击的函数。注:推送通知被用户点击前,应用无法通过接口获取通知的内容。
     * 
     * @param context 上下文
     * @param title 推送的通知的标题
     * @param description 推送的通知的描述
     * @param customContentString 自定义内容,为空或者json字符串
     */
    @Override
    public void onNotificationClicked(Context context, String title, 
                String description, String customContentString) {
        String notifyString = "通知点击 title="" + title + "" description=""
                + description + "" customContent=" + customContentString;
        Log.d(TAG, notifyString);

        // 自定义内容获取方式,mykey和myvalue对应通知推送时自定义内容中设置的键和值
        if (customContentString != null & customContentString != "") {
            JSONObject customJson = null;
            try {
                customJson = new JSONObject(customContentString);
                String myvalue = null;
                if (customJson.isNull("mykey")) {
                    myvalue = customJson.getString("mykey");
                }
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        // Demo更新界面展示代码,应用请在这里加入自己的处理逻辑
        updateContent(context, notifyString);
    }
//customContentString 可以自定义通知的格式和内容

       {
        //android必选,ios可选
        "title" : "hello" ,   
        description: "hello world" 

        //android特有字段,可选
        "notification_builder_id": 0,
        "notification_basic_style": 7,
        "open_type":0,
        "net_support" : 1,
        "user_confirm": 0,
        "url": "http://developer.baidu.com",
        "pkg_content":"",
        "pkg_name" : "com.baidu.bccsclient",
        "pkg_version":"0.1",

        //android自定义字段
        "custom_content": {
        "key1":"value1", 
        "key2":"value2"
        },  

        //ios特有字段,可选
       "aps": {
        "alert":"Message From Baidu Push",
        "Sound":"",
        "Badge":0
       },

       //ios的自定义字段
         "key1":"value1", 
         "key2":"value2"
      }

在MyPushMessageReceiver中,有几个很重要的方法,设置标签,删除标签,解除绑定等。

3.5.2 设置通知样式
默认的通知栏,基本可以满足需要的,要是想自定义,也有这样的接口。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
 CustomPushNotificationBuilder cBuilder = new CustomPushNotificationBuilder(
                resource.getIdentifier("notification_custom_builder", "layout", pkgName), 
                resource.getIdentifier("notification_icon", "id", pkgName), 
                resource.getIdentifier("notification_title", "id", pkgName), 
                resource.getIdentifier("notification_text", "id", pkgName));
        cBuilder.setNotificationFlags(Notification.FLAG_AUTO_CANCEL);
        cBuilder.setNotificationDefaults(Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE);
        cBuilder.setStatusbarIcon(this.getApplicationInfo().icon);
        cBuilder.setLayoutDrawable(resource.getIdentifier("simple_notification_icon", "drawable", pkgName));
        PushManager.setNotificationBuilder(this, 1, cBuilder);

//为什么给的demo 中要搞这么高深,偶也不知道。
CustomPushNotificationBuilder(1,2,3,4);四个参数 1layout 文件,2,通知栏图标id 3title id ,4, text id ,对应description 字段。
// 在这里,我一定要大声的告诉你。Notification,一定要设置icon ,不然就看不到下拉通知。因为这个问题,我找了一天半呀!

还有两个两个方法,设置标签,删除标签。

1
2
3
4
5
6
7
8
// Push: 删除tag调用方式
                        List<String> tags = Utils.getTagsList(textviewGid.getText().toString());
                        PushManager.delTags(getApplicationContext(), tags);


// Push: 设置tag调用方式
                        List<String> tags = Utils.getTagsList(textviewGid.getText().toString());
                        PushManager.setTags(getApplicationContext(), tags);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值