下载最新的Android SDK压缩包并解压,在新建工程或已有工程中增加百度云推送功能。
我下载的是
,里面有一个同名的文件夹,文件夹中有
将解压后的libs文件夹中所有文件拷贝到您的工程的libs文件夹中。如果您的工程中没有其他的.so文件,建议只拷贝armeabi文件夹。如果您的工程中还使用了其他的.so文件,只需要拷贝对应目录下的.so文件即可。如果你使用的Android开发环境是Android Stutio,在工程中“src/main”目录中新建名为jniLibs的目录,将libs文件夹中文件拷贝到“jniLibs”目录内。
将解压后的libs中的文件拷贝到工程libs中对应的目录中,没有目录的话,直接拷贝目录。
其中用红线框住的是从SDK压缩包中拷贝到工程中的,其他的文件或目录都是工程原有的。
在当前工程的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>
右键点击当前工程,选择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时,才表示有手机收到了该通知)
在百度云推送上下载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 }
当设备接收到通知消息后,查看手机的通知栏,可以看到通知栏内的新通知展示。如图:
通知到达时,当通知被用户点击时,会回调onNotificationClicked函数。
注意:百度云推送的频率有限制,限制策略为:单播默认:5000qps,组播默认:100qps,1000qpm,5000qph,广播默认:每4秒只能推送2次
小米手机可能会出现失败的情况,建议重启一下手机。