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的通知栏。
- 透传消息:创建一条透传消息推送。透传消息会递交给应用处理,不会直接出现在通知栏。
- 富媒体消息:富媒体也是一种通知推送,区别在于可以配置展示的模板,使通知展示更加美观和多样化。
富媒体简单的说就是由图片、声音、视频等交互性信息的方式,在这里与一般通知的区别不大,可以便捷的提供个性的通知
②通知范围:
- 广播:推送给安装应用的所有设备。如果已安装了Demo客户端,可以不做其他任何设置通过发送广播来做第一次测试。
- 单播:推送给安装应用的某一台设备,需要填写该设备的ChannelID。如果使用Demo客户端进行测试,可以在Demo客户端界面中查看到ChannelID;如果使用自己集成AndroidSDK的应用,ChannelID的获取请参考AndroidSDK文档。
- 标签组播:推送给打上某一个标签的一组设备。如果使用Demo客户端进行测试,可以在Demo客户端界面将设备加入到指定名称的标签组中,然后选择该名称的标签进行推送即可(如果该标签之前未使用过,请刷新页面更新控制台标签列表)每个应用最多可以定义10000个标签;每个标签对应的设备数没有限制
-
批量设备:批量以单播形式推送给多台设备。对少量设备,可以通过ChannelID列表的形式设置要推送到设备;对大量设备,支持通过上传一个设备ChannelID列表文件的方式来进行推送目标设定。
少量设备的格式: ChannelID;ChannelID,最多10个。
大量设备的格式: 每一行一个ChannelID,行末不用加分隔符,最多10000个ChannelID。Tips: "批量设备推送" 还可以设置 分类主题, 分类主题是一个自定义的字符串(不支持中文),设置成相同分类主题的多次批量设备推送在统计展示时,可以使用分类主题来聚合展示这多次批量设备推送的到达情况。例如:每一天推送一次天气信息给10个设备,设置推送主题为"weather",然后在 推送主题统计 中可以查看weather这个主题每天的到达数量。
"批量设备" 和 "标签组播" 的区别与选择:两者都是对一批用户的推送,标签组播相当于把要推送的设备列表预先存储在云端,更适用于组内设备变化不频繁的场合,或者由客户端主动发起变动(如用户主动订阅)的场合;批量设备相当于每次推送重新设置设备列表,更适合开发者每次线下重新挖掘出不同设备的场合* - 标签组合:云推送目前支持2个标签之间进行交集,并集和差集的推送。 标签组合目前暂时不支持对消息到达数量的预估
- 地理区域推送:云推送目前支持到县级别的行政区域下设备的推送。 地理区域推送目前暂时不支持对消息到达数量的预估
- 兴趣精准推送:云推送基于大数据,目前支持影视,医疗,游戏等多个维度的兴趣的设备推送。 兴趣精准推送目前暂时不支持对消息到达数量的预估
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 | 百度账户绑定应用时被禁止,需要白名单授权 |
今天就介绍到这里,欢迎大家交流和指正。