当前位置: 首页 > news >正文

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百度账户绑定应用时被禁止,需要白名单授权

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

           

转载于:https://www.cnblogs.com/ZhangXiangQian/p/4894291.html

相关文章:

  • ISG2015
  • Oracle常见SQL语句
  • Python模块Scrapy导入出错:ImportError: cannot import name xmlrpc_client
  • php的lareval框架配置出错
  • 九度OJ 1160:放苹果 (DFS)
  • 58同城技术委员会执行主席沈剑:好的架构是进化来的,不是设计来的
  • php 下载doc文档
  • Sterling B2B Integrator与SAP交互 - 01 简介
  • 若烟火云朵只给你一人
  • Daily Scrumming* 2015.10.29(Day 10)
  • 一个bug
  • java IO存在问题
  • eclipse 弹出智能提示、代码自动换行
  • 从一个Fragment跳转到另一个Fragment
  • Hdu 5100 Chessboard
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • const let
  • interface和setter,getter
  • iOS 系统授权开发
  • Java深入 - 深入理解Java集合
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • laravel with 查询列表限制条数
  • Mysql5.6主从复制
  • node学习系列之简单文件上传
  • Service Worker
  • Vue小说阅读器(仿追书神器)
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 马上搞懂 GeoJSON
  • 前端技术周刊 2019-01-14:客户端存储
  • 如何实现 font-size 的响应式
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 使用SAX解析XML
  • 网页视频流m3u8/ts视频下载
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (zt)最盛行的警世狂言(爆笑)
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (一一四)第九章编程练习
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (转)Sql Server 保留几位小数的两种做法
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .gitignore文件设置了忽略但不生效
  • .net CHARTING图表控件下载地址
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .net反编译工具