Android studio 集合百度推送

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值