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 | 百度账户绑定应用时被禁止,需要白名单授权 |
今天就介绍到这里,欢迎大家交流和指正。