1、创建应用获取api_key 百度云推送:http://push.baidu.com/
SDK下载:http://push.baidu.com/sdk/push_client_sdk_for_android
2、添加jar到libs文件下
compile files('libs/galaxy.jar')
implementation files('libs/pushservice-6.1.1.21.jar')
implementation files('libs/ufosdk-android-1.7.13.jar')
3、权限配置 ,主要包名改为当前项目包名------>
com.baidu.push.example 改为当前项目包名
com.tianxin.mapclient.liteapp 改为当前项目包名
<!-- 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" /><!-- 适配Android N系统必需的ContentProvider写权限声明,写权限包含应用包名 -->
<uses-permissionandroid:name="baidu.push.permission.WRITE_PUSHINFOPROVIDER.com.baidu.push.example" />
<permission android:name="baidu.push.permission.WRITE_PUSHINFOPROVIDER.com.baidu.push.example"android:protectionLevel="normal" />
4、资源类配置,。主要包名改为当前项目包名。api_key改为当前项目申请的api_key
项目包名后面,注意要加上.bdpush
<!-- push富媒体,使用富媒体推送必须声明 -->
<activity android:name="com.baidu.android.pushservice.richmedia.MediaViewActivity"android:configChanges="orientation|keyboardHidden" android:label="MediaViewActivity" />
<activity android:name="com.baidu.android.pushservice.richmedia.MediaListActivity"android:configChanges="orientation|keyboardHidden" android:label="MediaListActivity"android:launchMode="singleTask" />
<!-- push富媒体结束 --><!-- push应用定义消息receiver声明 -->
<receiver android:name=".MyPushMessageReceiver"><intent-filter><!-- 接收push消息 --><action android:name="com.baidu.android.pushservice.action.MESSAGE" /><!-- 接收bind,unbind,fetch,delete等反馈消息 --><action android:name="com.baidu.android.pushservice.action.RECEIVE" /><action android:name="com.baidu.android.pushservice.action.notification.CLICK" /></intent-filter>
</receiver><!-- push必须的receviver和service声明 -->
<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>
<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>
<service android:name="com.baidu.android.pushservice.CommandService"android:exported="true" /><!-- 适配Android N系统必需的ContentProvider声明,写权限包含应用包名-->
<provider android:name="com.baidu.android.pushservice.PushInfoProvider"android:authorities="com.tianxin.mapclient.liteapp.bdpush" android:exported="true"android:protectionLevel="signature"android:writePermission="baidu.push.permission.WRITE_PUSHINFOPROVIDER.com.tianxin.mapclient.liteapp" /><!-- 在百度开发者中心查询应用的API Key -->
<meta-data android:name="api_key" android:value="tDrb727hnpdtLobd1BIpL5GQ" /><!-- UfoSDK -->
<activity android:name="com.baidu.ufosdk.ui.FeedbackListActivity" />
<activity android:name="com.baidu.ufosdk.ui.FeedbackFacePageActivity" />
<activity android:name="com.baidu.ufosdk.ui.FeedbackImageViewFlipperActivity" />
<activity android:name="com.baidu.ufosdk.ui.FeedbackInputActivity" />
<activity android:name="com.baidu.ufosdk.ui.FeedbackHotActivity" />
5、创建
MyPushMessageReceiver
public class MyPushMessageReceiver extends PushMessageReceiver {/*** TAG to Log*/public static final String TAG = MyPushMessageReceiver.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*/@Overridepublic 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.i("lgqbbbbb====dddd===", responseString);if (errorCode == 0) {// 绑定成功Log.d(TAG, "绑定成功");}// Demo更新界面展示代码,应用请在这里加入自己的处理逻辑updateContent(context, responseString);}/*** 接收透传消息的函数。** @param context 上下文* @param message 推送的消息* @param customContentString 自定义内容,为空或者json字符串*/@Overridepublic void onMessage(Context context, String message,String customContentString) {String messageString = "透传消息 onMessage=\"" + message+ "\" customContentString=" + customContentString;Log.d(TAG, messageString);// 自定义内容获取方式,mykey和myvalue对应透传消息推送时自定义内容中设置的键和值if (!TextUtils.isEmpty(customContentString)) {JSONObject customJson = null;try {customJson = new JSONObject(customContentString);String myvalue = null;if (!customJson.isNull("mykey")) {myvalue = customJson.getString("mykey");}} catch (JSONException e) {e.printStackTrace();}}// Demo更新界面展示代码,应用请在这里加入自己的处理逻辑updateContent(context, messageString);}/*** 接收通知到达的函数。** @param context 上下文* @param title 推送的通知的标题* @param description 推送的通知的描述* @param customContentString 自定义内容,为空或者json字符串*/@Overridepublic void onNotificationArrived(Context context, String title,String description, String customContentString) {String notifyString = "通知到达 onNotificationArrived title=\"" + title+ "\" description=\"" + description + "\" customContent="+ customContentString;Log.d(TAG, notifyString);// 自定义内容获取方式,mykey和myvalue对应通知推送时自定义内容中设置的键和值if (!TextUtils.isEmpty(customContentString)) {JSONObject customJson = null;try {customJson = new JSONObject(customContentString);String myvalue = null;if (!customJson.isNull("mykey")) {myvalue = customJson.getString("mykey");}} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();}}// Demo更新界面展示代码,应用请在这里加入自己的处理逻辑// 你可以參考 onNotificationClicked中的提示从自定义内容获取具体值updateContent(context, notifyString);}/*** 接收通知点击的函数。** @param context 上下文* @param title 推送的通知的标题* @param description 推送的通知的描述* @param customContentString 自定义内容,为空或者json字符串*/@Overridepublic void onNotificationClicked(Context context, String title,String description, String customContentString) {String notifyString = "通知点击 onNotificationClicked title=\"" + title + "\" description=\""+ description + "\" customContent=" + customContentString;Log.d(TAG, notifyString);// 自定义内容获取方式,mykey和myvalue对应通知推送时自定义内容中设置的键和值if (!TextUtils.isEmpty(customContentString)) {JSONObject customJson = null;try {customJson = new JSONObject(customContentString);String myvalue = null;if (!customJson.isNull("mykey")) {myvalue = customJson.getString("mykey");}} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();}}// Demo更新界面展示代码,应用请在这里加入自己的处理逻辑updateContent(context, notifyString);}/*** setTags() 的回调函数。** @param context 上下文* @param errorCode 错误码。0表示某些tag已经设置成功;非0表示所有tag的设置均失败。* @param successTags 设置成功的tag* @param failTags 设置失败的tag* @param requestId 分配给对云推送的请求的id*/@Overridepublic void onSetTags(Context context, int errorCode,List<String> successTags, List<String> failTags, String requestId) {String responseString = "onSetTags errorCode=" + errorCode+ " successTags=" + successTags + " failTags=" + failTags+ " requestId=" + requestId;Log.d(TAG, responseString);// Demo更新界面展示代码,应用请在这里加入自己的处理逻辑updateContent(context, responseString);}/*** delTags() 的回调函数。** @param context 上下文* @param errorCode 错误码。0表示某些tag已经删除成功;非0表示所有tag均删除失败。* @param successTags 成功删除的tag* @param failTags 删除失败的tag* @param requestId 分配给对云推送的请求的id*/@Overridepublic void onDelTags(Context context, int errorCode,List<String> successTags, List<String> failTags, String requestId) {String responseString = "onDelTags errorCode=" + errorCode+ " successTags=" + successTags + " failTags=" + failTags+ " requestId=" + requestId;Log.d(TAG, responseString);// Demo更新界面展示代码,应用请在这里加入自己的处理逻辑updateContent(context, responseString);}/*** listTags() 的回调函数。** @param context 上下文* @param errorCode 错误码。0表示列举tag成功;非0表示失败。* @param tags 当前应用设置的所有tag。* @param requestId 分配给对云推送的请求的id*/@Overridepublic void onListTags(Context context, int errorCode, List<String> tags,String requestId) {String responseString = "onListTags errorCode=" + errorCode + " tags="+ tags;Log.d(TAG, responseString);// Demo更新界面展示代码,应用请在这里加入自己的处理逻辑updateContent(context, responseString);}/*** PushManager.stopWork() 的回调函数。** @param context 上下文* @param errorCode 错误码。0表示从云推送解绑定成功;非0表示失败。* @param requestId 分配给对云推送的请求的id*/@Overridepublic void onUnbind(Context context, int errorCode, String requestId) {String responseString = "onUnbind errorCode=" + errorCode+ " requestId = " + requestId;Log.d(TAG, responseString);if (errorCode == 0) {// 解绑定成功Log.d(TAG, "解绑成功");}// Demo更新界面展示代码,应用请在这里加入自己的处理逻辑updateContent(context, responseString);}private void updateContent(Context context, String content) {Log.i("xiaodidaoda=====", "updateContent"+content);}}
6、复制整个jniLibs文件到当前项目main下.。还有整个assets文件复制到main下
7、application下运行
UfoSDK.init(this);
UfoSDK.openRobotAnswer();// 设置用户的头像
UfoSDK.setCurrentUserIcon(getMeIconBitmap());
// 在聊天界面中获取聊天信息的时间间隔
UfoSDK.setChatThreadTime(10);
// 设置当前用户名
UfoSDK.setBaiduCuid(DeviceId.getCUID(this));
Log.i("lgq","iddddd=== "+DeviceId.getCUID(this));
// 我的反馈按钮颜色
UfoSDK.setRootBackgroundColor(getResources().getColor(R.color.gray));
8、MainActivity下运行
// 启动百度push
PushManager.startWork(getApplicationContext(), PushConstants.LOGIN_TYPE_API_KEY,Utils.getMetaValue(PushDemoActivity.this, "api_key"));
9、创建推送,创建通知,发送通知,即可收到通知
在线交流bug:qq1085220040