Android studio 集合百度推送

来源:互联网 发布:ps网店美工教程 编辑:程序博客网 时间:2024/06/05 18:40

Android 百度推送

1. 注册和下载相应的SDK和Demo

注册不多说了。
http://push.baidu.com/sdk/push_client_sdk_for_android

1.1下载SDK和Demo

这里写图片描述

1.2下载后的文件目录显示

这里写图片描述
下载的文件中的Demo可以移植到Android项目中;
Libs中的so和jar.一定要复制到项目中的libs文件夹中;

1.3百度推送中创建应用获取相关信息

这里写图片描述

2. 解析Demo项目的内容和配置

AndroidManifest.xml文件中的配置:

2.1权限必备

<!-- 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" /><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.DISABLE_KEYGUARD" /><!-- 富媒体需要声明的权限 --><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.EXPAND_STATUS_BAR" />

2.2 几个必备的服务及自定义中服务实现的方法

<!-- push应用定义消息receiver声明 ,这个是自定义的一定要-->        <receiver android:name="com.baidu.push.example.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>  <!-- push必须的receviver和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" />                <!-- 以下四项为可选的action声明,可大大提高service存活率和消息到达速度 -->                <action android:name="android.intent.action.MEDIA_MOUNTED" />                <action android:name="android.intent.action.USER_PRESENT" />                <action android:name="android.intent.action.ACTION_POWER_CONNECTED" />                <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />            </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" >            <intent-filter>                <action android:name="com.baidu.android.pushservice.action.PUSH_SERVICE" />            </intent-filter>        </service>        <service            android:name="com.baidu.android.pushservice.CommandService"            android:exported="true" />

2.3 MyPushMessageReceiver服务中实现的方法

/*
* Push消息处理receiver。请编写您需要的回调函数, 一般来说: onBind是必须的,用来处理startWork返回值;
*onMessage用来接收透传消息; onSetTags、onDelTags、onListTags是tag相关操作的回调;
*onNotificationClicked在通知被点击时回调; onUnbind是stopWork接口的返回值回调
* 返回值中的errorCode,解释如下:
*0 - Success
*10001 - Network Problem
*10101 Integrate Check Error
*30600 - Internal Server Error
*30601 - Method Not Allowed
*30602 - Request Params Not Valid
*30603 - Authentication Failed
*30604 - Quota Use Up Payment Required
*30605 -Data Required Not Found
*30606 - Request Time Expires Timeout
*30607 - Channel Token Timeout
*30608 - Bind Relation Not Found
*30609 - Bind Number Too Many
* 当您遇到以上返回错误时,如果解释不了您的问题,请用同一请求的返回值requestId和errorCode联系我们追查问题。
*
*/

public class MyPushMessageReceiver extends PushMessageReceiver {
/**
* 调用PushManager.startWork后,sdk将对push
* server发起绑定请求,这个过程是异步的。绑定请求的结果通过onBind返回。 如果您需要用单播推送,需要把这里获取的channel
* id和user id上传到应用server中,再调用server接口用channel id和user id给单个手机或者用户推送。
public void onBind(Context context, int errorCode, String appid,
String userId, String channelId, String requestId) {
public void onMessage(Context context, String message,
String customContentString) {
public void onNotificationArrived(Context context, String title,
String description, String customContentString) {
public void onNotificationClicked(Context context, String title,
String description, String customContentString) {
public void onSetTags(Context context, int errorCode,
List sucessTags, List failTags, String requestId) {
public void onDelTags(Context context, int errorCode,
public void onUnbind(Context context, int errorCode, String requestId) {

3. 推送流程的执行和细节操作

3.1 登录、注册百度推送

Push: 以apikey的方式登录,一般放在主Activity的onCreate中。
PushManager.startWork(getApplicationContext(), PushConstants.LOGIN_TYPE_API_KEY, “pBB9DbmgVAfLXCLCGqlCF1ag”);
// Push: 如果想基于地理位置推送,可以打开支持地理位置的推送的开关
// PushManager.enableLbs(getApplicationContext());
如果登录成功的话,一定会回调
MyPushMessageReceiver中的onBind 的方法,并且errorCode中显示的是0;
// Push: 如果想基于地理位置推送,可以打开支持地理位置的推送的开关
PushManager.enableLbs(getApplicationContext());

3.2 自定义NotificationBuilder,实现高级定义

// Push: 设置自定义的通知样式,具体API介绍见用户手册,如果想使用系统默认的可以不加这段代码
// 请在通知推送界面中,高级设置->通知栏样式->自定义样式,选中并且填写值:1,
// 与下方代码中 PushManager.setNotificationBuilder(this, 1, cBuilder)中的第二个参数对应
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_VIBRATE);
//通知到达的时候显示的图片;
cBuilder.setStatusbarIcon(this.getApplicationInfo().icon);
cBuilder.setLayoutDrawable(resource.getIdentifier(
“simple_notification_icon”, “drawable”, pkgName));
//下面的通知到达的时候有声音
cBuilder.setNotificationSound(Uri.withAppendedPath(
Audio.Media.INTERNAL_CONTENT_URI, “6”).toString());
// 推送高级设置,通知栏样式设置为下面的ID
PushManager.setNotificationBuilder(this, 1, cBuilder);
显示的效果如下:
这里写图片描述

3.3 推送信息设置—用户范围设置

这里写图片描述
1、标题信息和内容可以不用解释太多;
2、用户范围有四种:

3.3.1. 所有设备

所有设备,很明显,不用解释。

3.3.2. 指定设备

主要是测试的时候使用,指定手机测试;Channel的值会在
MyPushMessageReceiver中的onBind方法中返回给用户获取channelId;
这里写图片描述
 

3.3.3. 标签设备

这里写图片描述
Tag管理接口 Tag的创建与删除 setTags, delTags, onListTags
指定的用户绑定标签,只要在应用中绑定:PushManager.setTags(getApplicationContext(), tags);
同时会回调:MyPushMessageReceiver中的onSetTags方法;
public void onSetTags(Context context, int errorCode, List sucessTags, List failTags, String requestId);
PushMessageReceiver的抽象方法,把receiver类继承PushMessageReceiver可以使用。setTags() 的回调函数。
public void onDelTags(Context context, int errorCode, List sucessTags, List failTags, String requestId)
PushMessageReceiver的抽象方法,把receiver类继承PushMessageReceiver可以使用。delTags() 的回调函数。
public void onListTags(Context context, int errorCode, List tags, String requestId);
PushMessageReceiver的抽象方法,把receiver类继承PushMessageReceiver可以使用。listTags() 的回调函数。

3.3.4. 精确推送

这里写图片描述

3.4 推送信息设置—发送时间和离线消息期限

这里写图片描述
发送时间不解释,代码里面不用设置;
离线信息指的是多少时间以后还能接受到信息;

3.5 推送信息设置—高级设置

这里写图片描述
如上图,文件的描述如其意;
主要解释一下附加字段:

   @Override    public void onMessage(Context context, String message,            String customContentString) {        String messageString = "透传消息 onMessage=\"" + message                + "\" customContentString=" + customContentString;        Log.d(TAG, messageString);// 自定义内容获取方式,mykey和myvalue对应透传消息推送时自定义内容中设置的键和值        if (!TextUtils.isEmpty(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, messageString);    }

3.6推送信息设置—设置免打扰时段

这个功能主要是在app的代码中设置:
/ Push: 设置免打扰时段
// startHour startMinute:开始 时间 ,24小时制,取值范围 0~23 0~59
// endHour endMinute:结束 时间 ,24小时制,取值范围 0~23 0~59
PushManager.setNoDisturbMode(getApplicationContext(),
startHour, startMinute, endHour, endMinute);
PushManager.setNoDisturbMode(Context context, int startHour, int startMinute, int endHour, int endMinute);
功能:PushManager类定义的静态方法,设置免打扰模式的具体时段,该时间内处于免打扰模式,通知到达时去除通知的提示音、振动以及提示灯闪烁。
注意:如果开始时间小于结束时间,免打扰时段为当天的起始时间到结束时间;如果开始时间大于结束时间,免打扰时段为第一天起始时间到第二天结束时间;如果开始时间和结束时间的设置均为00:00时,取消免打扰时段功能。
参数:
• context:当前执行Context
• startHour,startMinute:起始时间,24小时制,取值范围0~23,0~59
• endHour,endMinute:结束时间,24小时制,取值范围0~23,0~59

4. 创建透传消息

这里写图片描述
当设备接收到透传消息时,消息不会在通知栏展示,只是静默回调开发者自定义Receiver中的onMessage函数。手机收到消息后不会有任何现象,因为透传消息对用户完全透明,用户无法感知,便于开发者在不影响用户的情况下对app进行操作。开发者可以通过log内容和自定义的回调函数onMessage中打印该内容,确认消息到达,并执行开发者指定操作。
@Override
public void onMessage(Context context, String message,
String customContentString) {
String messageString = “透传消息 onMessage=\”” + message
+ “\” customContentString=” + customContentString;
Log.d(TAG, messageString);

// 自定义内容获取方式,mykey和myvalue对应透传消息推送时自定义内容中设置的键和值if (!TextUtils.isEmpty(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();    }}

5. 总结

上述就是Android 百度推送的主要功能;如果不足之处,请斧正;

0 0
原创粉丝点击