zoukankan      html  css  js  c++  java
  • 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 百度账户绑定应用时被禁止,需要白名单授权

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

               

  • 相关阅读:
    [Linux] 设置系统时区
    [Python] 当猎头遇上 Guido van Rossum
    [Ubuntu] LightDM 轻量级桌面显示管理器
    [Java] Apache Ant 构建基础教程
    [Python] pip 简明指南
    .NET Core下的Spring Cloud——前言和概述
    福州首届.NET开源社区技术交流会圆满成功
    【福州活动】| "福州首届.NET开源社区线下技术交流会"(2018.11.10)
    使用CoreRT将.NET Core发布为Native应用程序
    使用.NET Core快速开发一个较正规的命令行应用程序
  • 原文地址:https://www.cnblogs.com/ZhangXiangQian/p/4894291.html
Copyright © 2011-2022 走看看