Android 百度推送服务

1.资源链接

   百度官方文档:http://push.baidu.com/doc/android/api;

   百度推送SDK下载:http://push.baidu.com/sdk/push_client_sdk_for_android;

2.创建应用,在这里就不做详细说明,保存API KEY后面会使用到

3.配置

   ①目前官方建议使用Android SDK API level 21以下的版本编译工程,官方给出的解释是:在Android5.0的机器上图标会变成白色方块

   ② 如下图,将libs下的文件复制到自己对应的工程目录下

 

  ③特别说明:工程中的X86无需复制.so文件,armeabi复制对应文件,如有armeabi_v7,则将armeabi文件中的.so文件复制到armeabi_v7目录下一份

  ④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" />
<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" />

<!-- push service start -->
<!-- 用于接收系统消息以保证PushService正常运行 -->
<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>
<!-- Push服务接收客户端发送的各种请求-->
<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> <!-- 4.4版本新增的CommandService声明,提升小米和魅族手机上的实际推送到达率 --> <service android:name="com.baidu.android.pushservice.CommandService" android:exported="true" /> <!-- push结束 -->

⑤混淆说明:

  如果app需要混淆,在混淆文件下(android一般为proguard-project.txt或者 proguard-cfg)中添加(pushservice-VERSION.jar为集成的jar包名字,VERSION为版本名称)以下说明,以免SDK被二次混淆,无法收到消息

 

libraryjars libs/pushservice-VERSION.jar
     -dontwarn com.baidu.**
     -keep class com.baidu.**{*; }

 

⑥启动百度云推送:

 在主Activity的onCreate方法下添加如下信息:

PushManager.startWork(getApplicationContext(),PushConstants.LOGIN_TYPE_API_KEY,"api_key")

 注意:将api_key替换称创建应用是分配的API KEY;不允许在Application的onCreate方法里调用startWork方法

 到这里就可以可以实现我们自己的推送,当然想了解更多,请继续。

4.解释下几个概念(官方摘抄过来的):

  ①目前支持的推送类型,有三种:

  • 通知 :创建一条通知推送。通知推送会直接出现在Android的通知栏。
  • 透传消息:创建一条透传消息推送。透传消息会递交给应用处理,不会直接出现在通知栏。
  • 富媒体消息:富媒体也是一种通知推送,区别在于可以配置展示的模板,使通知展示更加美观和多样化。

      富媒体简单的说就是由图片、声音、视频等交互性信息的方式,在这里与一般通知的区别不大,可以便捷的提供个性的通知

  ②通知范围:

  1. 广播:推送给安装应用的所有设备。如果已安装了Demo客户端,可以不做其他任何设置通过发送广播来做第一次测试。
  2. 单播:推送给安装应用的某一台设备,需要填写该设备的ChannelID。如果使用Demo客户端进行测试,可以在Demo客户端界面中查看到ChannelID;如果使用自己集成AndroidSDK的应用,ChannelID的获取请参考AndroidSDK文档
  3. 标签组播:推送给打上某一个标签的一组设备。如果使用Demo客户端进行测试,可以在Demo客户端界面将设备加入到指定名称的标签组中,然后选择该名称的标签进行推送即可(如果该标签之前未使用过,请刷新页面更新控制台标签列表)每个应用最多可以定义10000个标签;每个标签对应的设备数没有限制
  4. 批量设备:批量以单播形式推送给多台设备。对少量设备,可以通过ChannelID列表的形式设置要推送到设备;对大量设备,支持通过上传一个设备ChannelID列表文件的方式来进行推送目标设定。
    少量设备的格式: ChannelID;ChannelID,最多10个。
    大量设备的格式: 每一行一个ChannelID,行末不用加分隔符,最多10000个ChannelID。

    Tips: "批量设备推送" 还可以设置 分类主题, 分类主题是一个自定义的字符串(不支持中文),设置成相同分类主题的多次批量设备推送在统计展示时,可以使用分类主题来聚合展示这多次批量设备推送的到达情况。例如:每一天推送一次天气信息给10个设备,设置推送主题为"weather",然后在 推送主题统计 中可以查看weather这个主题每天的到达数量。
    "批量设备""标签组播" 的区别与选择:两者都是对一批用户的推送,标签组播相当于把要推送的设备列表预先存储在云端,更适用于组内设备变化不频繁的场合,或者由客户端主动发起变动(如用户主动订阅)的场合;批量设备相当于每次推送重新设置设备列表,更适合开发者每次线下重新挖掘出不同设备的场合*

  5. 标签组合:云推送目前支持2个标签之间进行交集,并集和差集的推送。 标签组合目前暂时不支持对消息到达数量的预估
  6. 地理区域推送:云推送目前支持到县级别的行政区域下设备的推送。 地理区域推送目前暂时不支持对消息到达数量的预估
  7. 兴趣精准推送:云推送基于大数据,目前支持影视,医疗,游戏等多个维度的兴趣的设备推送。 兴趣精准推送目前暂时不支持对消息到达数量的预估                

   5.补充:

     ①自定义通知格式:       

  官方SDK提供CustomPushNotificationBuilder, BasicPushNotificationBuilder, setNotificationFlags, setNotificationDefaults, setStatusbarIcon,setNotificationFlags, setNotificationDefaults, setStatusbarIcon这几个类和方法以便开发者定义自己的格式,例如:

    

    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);

 

 ②标签设置和删除:

public static void setTags(Context context, List tags);  //设置标签

public static void delTags(Context context, List tags); //删除标签 PushManager的静态方法

  ③开启地理位置推送:

        // Push: 如果想基于地理位置推送,可以打开支持地理位置的推送的开关
         PushManager.enableLbs(getApplicationContext());   //开启
public static void disableLbs(Context context); //关闭

  ④PushMessageReceiver类:处理消息

     一、onBind方法是必须的,用来处理startWork返回值;

     二、onMessage用来接收透传消息;

     三、onSetTags、onDelTags、onListTags是tag相关操作的回调;

     四、onNotificationClicked在通知被点击时回调;

   五、 onUnbind是stopWork接口的返回值回调

  ⑤、错误码:

   

error_code描述
0 绑定成功
10001 当前网络不可用,请检查网络
10002 服务不可用,连接server失败
10003 服务不可用,503错误
10101 应用集成方式错误,请检查各项声明和权限
20001 未知错误
30600 服务内部错误
30601 非法函数请求,请检查您的请求内容
30602 请求参数错误,请检查您的参数
30603 非法构造请求,服务端验证失败
30605 请求的数据在服务端不存在
30608 绑定关系不存在或未找到
30609 一个百度账户绑定设备超出个数限制(多台设备登录同一个百度账户)
30612 百度账户绑定应用时被禁止,需要白名单授权

 今天就介绍到这里,欢迎大家交流和指正。

           

posted @ 2015-10-20 16:00  还没好好感受年轻  阅读(2542)  评论(2编辑  收藏  举报