• App之百度云推送


    集成SDK

    下载最新的Android SDK压缩包并解压,在新建工程或已有工程中增加百度云推送功能。
    我下载的是

    ,里面有一个同名的文件夹,文件夹中有

     

    导入云推送jar包和so文件:

    将解压后的libs文件夹中所有文件拷贝到您的工程的libs文件夹中。如果您的工程中没有其他的.so文件,建议只拷贝armeabi文件夹。如果您的工程中还使用了其他的.so文件,只需要拷贝对应目录下的.so文件即可。如果你使用的Android开发环境是Android Stutio,在工程中“src/main”目录中新建名为jniLibs的目录,将libs文件夹中文件拷贝到“jniLibs”目录内。 

    将解压后的libs中的文件拷贝到工程libs中对应的目录中,没有目录的话,直接拷贝目录。

    其中用红线框住的是从SDK压缩包中拷贝到工程中的,其他的文件或目录都是工程原有的。

    配置AndroidManifest文件:

    在当前工程的AndroidManifest.xml文件中,添加权限和声明信息:

     1 <!-- Push service 运行需要的权限 -->
     2 <uses-permission android:name="android.permission.INTERNET" />
     3 <uses-permission android:name="android.permission.READ_PHONE_STATE" />
     4 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
     5 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
     6 <uses-permission android:name="android.permission.WRITE_SETTINGS" />
     7 <uses-permission android:name="android.permission.VIBRATE" />
     8 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     9 <uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER"/>
    10 <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
    11 <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
    12 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    13 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    14 <uses-permission android:name="android.permission.EXPAND_STATUS_BAR" />
    15 
    16 <!-- !!!!!下面的标签要放在application标签内!!!!! -->
    17 <!-- 4.6版本新增的Activity声明,提升Push后台存活率 -->
    18 <activity
    19     android:name="com.baidu.android.pushservice.PushKeepAlive"
    20     android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
    21 
    22 <!-- push service start -->
    23 <!-- 用于接收系统消息以保证PushService正常运行 -->
    24 <receiver android:name="com.baidu.android.pushservice.PushServiceReceiver"
    25     android:process=":bdservice_v1" >
    26     <intent-filter>
    27         <action android:name="android.intent.action.BOOT_COMPLETED" />
    28         <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    29         <action android:name="com.baidu.android.pushservice.action.notification.SHOW" />
    30         <action android:name="com.baidu.android.pushservice.action.media.CLICK" />
    31         <!-- 以下四项为可选的action声明,可大大提高service存活率和消息到达速度 -->
    32         <action android:name="android.intent.action.MEDIA_MOUNTED" />
    33         <action android:name="android.intent.action.USER_PRESENT" />
    34         <action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
    35         <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
    36     </intent-filter>
    37 </receiver>
    38 <!-- Push服务接收客户端发送的各种请求-->
    39 <receiver android:name="com.baidu.android.pushservice.RegistrationReceiver"
    40     android:process=":bdservice_v1" >
    41     <intent-filter>
    42         <action android:name="com.baidu.android.pushservice.action.METHOD" />
    43         <action android:name="com.baidu.android.pushservice.action.BIND_SYNC" />
    44     </intent-filter>
    45     <intent-filter>
    46         <action android:name="android.intent.action.PACKAGE_REMOVED" />
    47         <data android:scheme="package" />
    48     </intent-filter>                   
    49 </receiver>
    50 <service android:name="com.baidu.android.pushservice.PushService" android:exported="true" 
    51     android:process=":bdservice_v1" >
    52     <intent-filter >
    53             <action android:name="com.baidu.android.pushservice.action.PUSH_SERVICE" />
    54     </intent-filter>
    55 </service>
    56 <!-- 4.4版本新增的CommandService声明,提升小米和魅族手机上的实际推送到达率 -->
    57 <service android:name="com.baidu.android.pushservice.CommandService"
    58     android:exported="true" />
    59 <!-- push结束 -->
     

    启动云推送

    在当前工程的主Activity的onCreate函数中,添加以下代码:

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

    其中的“API Key“需要手动修改为指定应用的API Key。

    自定义回调类

    在当前工程中新建一个PushTestReceiver类(类名可以是其他任意),该类要继承PushMessageReceiver,并重载所有的回调函数:

    代码如下:

    在当前工程的AndroidManifest.xml文件中,添加自定义Receiver信息如下:

    <!-- 此处Receiver名字修改为当前包名路径 -->
    <receiver android:name="com.*.*.PushTestReceiver">
        <intent-filter>
            <!-- 接收push消息 --> 
            <action android:name="com.baidu.android.pushservice.action.MESSAGE" />
            <!-- 接收bind、setTags等method的返回结果--> 
            <action android:name="com.baidu.android.pushservice.action.RECEIVE" />
            <!-- 接收通知点击事件,和通知自定义内容 --> 
            <action android:name="com.baidu.android.pushservice.action.notification.CLICK" />
        </intent-filter>
    </receiver>

    运行App

    右键点击当前工程,选择Run As --> Android Application,选中已连接的设备或Android虚拟机,运行该程序。如果在logcat中的回调函数中的errorCode为0,说明已经绑定成功,并返回userid和channelid,我们就可以在云控制台推送通知和透传消息到该app了。

     

    !!!以上仅仅是做好了接收端(客户端)的接受配置,表示可以接收百度云推送的消息了,下面要进行真正的消息推送了。

    推送消息

    在集成SDK后,可以通过以下两种方式推送消息。

    通过控制台推送消息:

    1、在百度云推送控制台 http://push.baidu.com/console/app 中创建应用,并进行应用配置

    2、进入应用管理,API KEY等都是从里面找到的。

    3、推送列表

    4、点击重发。(注意:推送成功并不表示手机就收到了消息通知,只有到达数+1时,才表示有手机收到了该通知)

     

    通过服务端SDK推送消息(目前服务端提供 java和php 两种语言的SDK,以下是java代码):

      在百度云推送上下载java服务端的SDK http://push.baidu.com/sdk/push_server_sdk_for_java

      

    下面是AndoridPushMsgToAll.java的代码,仅供参考,具体的解释请看官方文档http://push.baidu.com/doc/java/api,写的很好。

     1 package com.baidu.yun.push.sample;
     2 
     3 import com.baidu.yun.core.log.YunLogEvent;
     4 import com.baidu.yun.core.log.YunLogHandler;
     5 import com.baidu.yun.push.auth.PushKeyPair;
     6 import com.baidu.yun.push.client.BaiduPushClient;
     7 import com.baidu.yun.push.constants.BaiduPushConstants;
     8 import com.baidu.yun.push.exception.PushClientException;
     9 import com.baidu.yun.push.exception.PushServerException;
    10 import com.baidu.yun.push.model.PushMsgToAllRequest;
    11 import com.baidu.yun.push.model.PushMsgToAllResponse;
    12 
    13 public class AndroidPushMsgToAll {
    14     public static void main(String[] args) 
    15             throws PushClientException,PushServerException {
    16         /* 1. 创建PushKeyPair
    17          *     用于app的合法身份认证
    18          *     apikey和secretKey可在应用详情中获取
    19          */
    20         String apiKey = "MmPl80nW1RbeCAOT4rcNBGTu";
    21         String secretKey = "QTWsFfuqFlL0RHfvP6tXoV4AndhF49W2";
    22         PushKeyPair pair = new PushKeyPair(apiKey, secretKey);
    23 
    24         // 2. 创建BaiduPushClient,访问SDK接口
    25         BaiduPushClient pushClient = new BaiduPushClient(pair,
    26                 BaiduPushConstants.CHANNEL_REST_URL);
    27 
    28         // 3. 注册YunLogHandler,获取本次请求的交互信息
    29         pushClient.setChannelLogHandler(new YunLogHandler() {
    30             @Override
    31             public void onHandle(YunLogEvent event) {
    32                 System.out.println(event.getMessage());
    33             }
    34         });
    35 
    36         try {
    37             // 4. 设置请求参数,创建请求实例
    38             PushMsgToAllRequest request = new PushMsgToAllRequest()
    39                     .addMsgExpires(new Integer(3600))//设置消息的有效时间,单位秒,默认3600*5.
    40                     .addMessageType(1)    //设置消息类型,0表示透传消息,1表示通知,默认为0.
    41                     .addMessage("{"title":"TEST","description":"Hello Baidu push!!---!"}") //添加透传消息
    42                     .addSendTime(System.currentTimeMillis() / 1000 + 120) // 设置定时推送时间,必需超过当前时间一分钟,单位秒.实例2分钟后推送
    43                     .addDeviceType(3); //设置设备类型,deviceType => 1 for web, 2 for pc, 3 for android, 4 for ios, 5 for wp.
    44             // 5. 执行Http请求
    45             PushMsgToAllResponse response = pushClient.pushMsgToAll(request);
    46             // 6. Http请求返回值解析
    47             System.out.println("msgId: " + response.getMsgId() + ",sendTime: "
    48                     + response.getSendTime() + ",timerId: "
    49                     + response.getTimerId());
    50         } catch (PushClientException e) {
    51             //ERROROPTTYPE 用于设置异常的处理方式 -- 抛出异常和捕获异常,
    52             //'true' 表示抛出, 'false' 表示捕获。
    53             if (BaiduPushConstants.ERROROPTTYPE) {
    54                 throw e;
    55             } else {
    56                 e.printStackTrace();
    57             }
    58         } catch (PushServerException e) {
    59             if (BaiduPushConstants.ERROROPTTYPE) {
    60                 throw e;
    61             } else {
    62                 System.out.println(String.format(
    63                         "requestId: %d, errorCode: %d, errorMessage: %s",
    64                         e.getRequestId(), e.getErrorCode(), e.getErrorMsg()));
    65             }
    66         }
    67     }
    68 }
    View Code

    其它语言可以通过包装RestAPI使用云推送服务,详情见http://push.baidu.com/doc/restapi/restapi

    手机接收通知消息

    当设备接收到通知消息后,查看手机的通知栏,可以看到通知栏内的新通知展示。如图:

    通知到达时,当通知被用户点击时,会回调onNotificationClicked函数。

     

    注意:百度云推送的频率有限制,限制策略为:单播默认:5000qps,组播默认:100qps,1000qpm,5000qph,广播默认:每4秒只能推送2次

    小米手机可能会出现失败的情况,建议重启一下手机。

  • 相关阅读:
    MySQL中的用户与授权
    Vim安装使用和配置
    Mysql中的explain和desc
    array_map、array_walk、array_reduce
    PHP二维数组去重(指定键名)
    git配置ssh秘钥(公钥以及私钥)windows
    在nginx上用FastCGI解析PHP
    关于token登录逻辑分析
    公有云 私有云 混合云 的区别
    使用Docker在服务器上部署Ubuntu,本地传文件到docker
  • 原文地址:https://www.cnblogs.com/lhat/p/5189403.html
Copyright © 2020-2023  润新知