Android百度云推送实现消息推送
2015-12-08 19:56
477 查看
百度云推送:http://push.baidu.com/
Android 开发文档:http://push.baidu.com/doc/android/api
Java 服务端开发文档:http://push.baidu.com/doc/java/api
SDK下载:http://push.baidu.com/sdk/push_client_sdk_for_android
1.首先在百度云推送网站上下载Android SDK(客户端)和Java SDK(服务端)
2.根据开发文档配置Android客户端
(1)在百度云推送页面创建应用,创建成功之后会生成API_KEY
http://push.baidu.com/doc/guide/join
(2)将解压后的Android SDK中的libs文件夹拷贝到自己项目中
(3)修改AndroidManifest.xml文件,添加以下内容
添加权限:
(4)在MainActivity中添加以下代码
(5)创建PushTestReceiver类,继承PushMessageReceiver,并在AndroidManifest文件中注册
(6)运行程序,在logCat如果输出如下信息表示成功
3.服务端
(1)解压文件,拷贝libs文件夹到自己项目中,并将jar文件build path
(2)从解压文件中给的example中拷贝AndroidPushMsgToAll到项目中,将apikey和secretkey复制过来,修改main函数中的apikey和secretkey.
(3)运行main方法,控制台输出如下信息,android客户端将收到一条推送
有时候可能会有延迟,需要过一会儿才能收到推送,也可以直接通过百度云推送控制台向应用发送推送
百度云推送控制台:http://push.baidu.com/console/app
代码下载:http://download.csdn.net/detail/lom9357bye/9350027
Android 开发文档:http://push.baidu.com/doc/android/api
Java 服务端开发文档:http://push.baidu.com/doc/java/api
SDK下载:http://push.baidu.com/sdk/push_client_sdk_for_android
1.首先在百度云推送网站上下载Android SDK(客户端)和Java SDK(服务端)
2.根据开发文档配置Android客户端
(1)在百度云推送页面创建应用,创建成功之后会生成API_KEY
http://push.baidu.com/doc/guide/join
(2)将解压后的Android SDK中的libs文件夹拷贝到自己项目中
(3)修改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" /> <uses-permission android:name="android.permission.EXPAND_STATUS_BAR" />在application中添加push service
<!-- 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结束 -->
(4)在MainActivity中添加以下代码
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_activity); /*最后一个参数为api_key,将自己创建的应用生成的api-key复制过来*/ PushManager.startWork(getApplicationContext(),PushConstants.LOGIN_TYPE_API_KEY,"3bDa94fqBVGQ20gReLvZWbAZ"); }
(5)创建PushTestReceiver类,继承PushMessageReceiver,并在AndroidManifest文件中注册
/* * Push消息处理receiver。请编写您需要的回调函数, 一般来说: onBind是必须的,用来处理startWork返回值; *onMessage用来接收透传消息; onSetTags、onDelTags、onListTags是tag相关操作的回调; *onNotificationClicked在通知被点击时回调; onUnbind是stopWork接口的返回值回调 * 返回值中的errorCode,解释如下: *0 - Success *10001 - Network Problem *10101 Integrate Check Error *30600 - Internal Server Error *30601 - Method Not Allowed *30602 - Request Params Not Valid *30603 - Authentication Failed *30604 - Quota Use Up Payment Required *30605 -Data Required Not Found *30606 - Request Time Expires Timeout *30607 - Channel Token Timeout *30608 - Bind Relation Not Found *30609 - Bind Number Too Many * 当您遇到以上返回错误时,如果解释不了您的问题,请用同一请求的返回值requestId和errorCode联系我们追查问题。 * */ public class PushTestReceiver extends PushMessageReceiver { /** TAG to Log */ public static final String TAG = PushTestReceiver.class .getSimpleName(); /** * 调用PushManager.startWork后,sdk将对push * server发起绑定请求,这个过程是异步的。绑定请求的结果通过onBind返回。 如果您需要用单播推送,需要把这里获取的channel * id和user id上传到应用server中,再调用server接口用channel id和user id给单个手机或者用户推送。 * * @param context * BroadcastReceiver的执行Context * @param errorCode * 绑定接口返回值,0 - 成功 * @param appid * 应用id。errorCode非0时为null * @param userId * 应用user id。errorCode非0时为null * @param channelId * 应用channel id。errorCode非0时为null * @param requestId * 向服务端发起的请求id。在追查问题时有用; * @return none */ @Override public void onBind(Context context, int errorCode, String appid, String userId, String channelId, String requestId) { String responseString = "onBind errorCode=" + errorCode + " appid=" + appid + " userId=" + userId + " channelId=" + channelId + " requestId=" + requestId; Log.d(TAG, responseString); } /** * 接收透传消息的函数。 * * @param context * 上下文 * @param message * 推送的消息 * @param customContentString * 自定义内容,为空或者json字符串 */ @Override public void onMessage(Context context, String message, String customContentString) { String messageString = "透传消息 message=\"" + message + "\" customContentString=" + customContentString; Log.d(TAG, messageString); } /** * 接收通知点击的函数。 * * @param context * 上下文 * @param title * 推送的通知的标题 * @param description * 推送的通知的描述 * @param customContentString * 自定义内容,为空或者json字符串 */ @Override public void onNotificationClicked(Context context, String title, String description, String customContentString) { String notifyString = "通知点击 title=\"" + title + "\" description=\"" + description + "\" customContent=" + customContentString; Log.d(TAG, notifyString); } /** * 接收通知到达的函数。 * * @param context * 上下文 * @param title * 推送的通知的标题 * @param description * 推送的通知的描述 * @param customContentString * 自定义内容,为空或者json字符串 */ @Override public void onNotificationArrived(Context context, String title, String description, String customContentString) { String notifyString = "onNotificationArrived title=\"" + title + "\" description=\"" + description + "\" customContent=" + customContentString; Log.d(TAG, notifyString); } /** * setTags() 的回调函数。 * * @param context * 上下文 * @param errorCode * 错误码。0表示某些tag已经设置成功;非0表示所有tag的设置均失败。 * @param successTags * 设置成功的tag * @param failTags * 设置失败的tag * @param requestId * 分配给对云推送的请求的id */ @Override public void onSetTags(Context context, int errorCode, List<String> sucessTags, List<String> failTags, String requestId) { String responseString = "onSetTags errorCode=" + errorCode + " sucessTags=" + sucessTags + " failTags=" + failTags + " requestId=" + requestId; Log.d(TAG, responseString); } /** * delTags() 的回调函数。 * * @param context * 上下文 * @param errorCode * 错误码。0表示某些tag已经删除成功;非0表示所有tag均删除失败。 * @param successTags * 成功删除的tag * @param failTags * 删除失败的tag * @param requestId * 分配给对云推送的请求的id */ @Override public void onDelTags(Context context, int errorCode, List<String> sucessTags, List<String> failTags, String requestId) { String responseString = "onDelTags errorCode=" + errorCode + " sucessTags=" + sucessTags + " failTags=" + failTags + " requestId=" + requestId; Log.d(TAG, responseString); } /** * listTags() 的回调函数。 * * @param context * 上下文 * @param errorCode * 错误码。0表示列举tag成功;非0表示失败。 * @param tags * 当前应用设置的所有tag。 * @param requestId * 分配给对云推送的请求的id */ @Override public void onListTags(Context context, int errorCode, List<String> tags, String requestId) { String responseString = "onListTags errorCode=" + errorCode + " tags=" + tags; Log.d(TAG, responseString); } /** * PushManager.stopWork() 的回调函数。 * * @param context * 上下文 * @param errorCode * 错误码。0表示从云推送解绑定成功;非0表示失败。 * @param requestId * 分配给对云推送的请求的id */ @Override public void onUnbind(Context context, int errorCode, String requestId) { String responseString = "onUnbind errorCode=" + errorCode + " requestId = " + requestId; Log.d(TAG, responseString); } }
<!-- 注册自己的Receiver--> <receiver android:name="com.baidu.push.example.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>
(6)运行程序,在logCat如果输出如下信息表示成功
3.服务端
(1)解压文件,拷贝libs文件夹到自己项目中,并将jar文件build path
(2)从解压文件中给的example中拷贝AndroidPushMsgToAll到项目中,将apikey和secretkey复制过来,修改main函数中的apikey和secretkey.
public class AndroidPushMsgToAll { public static void main(String[] args) throws PushClientException,PushServerException { // 1. get apiKey and secretKey from developer console String apiKey = "3bDa94fqBVGQ20gReLvZWbAZ"; String secretKey = "jU4rBLw7j0AOpjCETVS1Qx72xER7b5Gu"; PushKeyPair pair = new PushKeyPair(apiKey, secretKey); // 2. build a BaidupushClient object to access released interfaces BaiduPushClient pushClient = new BaiduPushClient(pair, BaiduPushConstants.CHANNEL_REST_URL); // 3. register a YunLogHandler to get detail interacting information // in this request. pushClient.setChannelLogHandler(new YunLogHandler() { @Override public void onHandle(YunLogEvent event) { System.out.println(event.getMessage()); } }); try { // 4. specify request arguments PushMsgToAllRequest request = new PushMsgToAllRequest() .addMsgExpires(new Integer(3600)).addMessageType(0) .addMessage("Hello Baidu push") //添加透传消息 .addSendTime(System.currentTimeMillis() / 1000 + 120) // 设置定时推送时间,必需超过当前时间一分钟,单位秒.实例2分钟后推送 .addDeviceType(3); // 5. http request PushMsgToAllResponse response = pushClient.pushMsgToAll(request); // Http请求结果解析打印 System.out.println("msgId: " + response.getMsgId() + ",sendTime: " + response.getSendTime() + ",timerId: " + response.getTimerId()); } catch (PushClientException e) { if (BaiduPushConstants.ERROROPTTYPE) { throw e; } else { e.printStackTrace(); } } catch (PushServerException e) { if (BaiduPushConstants.ERROROPTTYPE) { throw e; } else { System.out.println(String.format( "requestId: %d, errorCode: %d, errorMessage: %s", e.getRequestId(), e.getErrorCode(), e.getErrorMsg())); } } } }
(3)运行main方法,控制台输出如下信息,android客户端将收到一条推送
URL:[http://api.tuisong.baidu.com/rest/3.0/push/all] params:[apikey=3bDa94fqBVGQ20gReLvZWbAZ&device_type=3&msg=Hello+Baidu+push&msg_expires=3600&msg_type=0&send_time=1449639409&sign=fb5a837c77944908258077d9ff7feda0×tamp=1449639289] HttpStatusCode:[200] Response:[{"request_id":99473142,"response_params":{"msg_id":"6151056986351521603","send_time":"1449639409","timer_id":"7605008479284309731"}} ] msgId: 6151056986351521603,sendTime: 1449639409,timerId: 7605008479284309731
有时候可能会有延迟,需要过一会儿才能收到推送,也可以直接通过百度云推送控制台向应用发送推送
百度云推送控制台:http://push.baidu.com/console/app
代码下载:http://download.csdn.net/detail/lom9357bye/9350027
相关文章推荐
- Android编码规范
- Android 反射接口Interface应用
- Android 反射Construct应用
- Android SDK Android NDK Android Studio 官方下载地址
- android项目复杂的listview
- Android - HelloWorld的Layout内容
- Android 反射Method应用
- Android/Java回调函数其实很简单
- Android异步加载图像(含线程池,缓存方法)
- android 包命名不管你怎么命,千万不要用下面几个
- Android简单实用的交互动画库
- android读取应用签名信息
- 第一个Android用例
- Android使用SimpleAdapter
- Android使用SimpleAdapter
- Android 反射Field应用
- Android No Launcher activity found!
- Android 获取手机总内存和可用内存等信息
- android Widget添加过程和android添加widget不更新的问题分析解决
- Android多屏幕自适应解决方案