您的位置:首页 > 其它

百度推送

2016-05-23 11:39 239 查看
先在官网注册开发者账号,得到api_key

<!-- 百度推送需要增加的权限 begin-->

<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.DISABLE_KEYGUARD"/>

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

<uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER"/>

<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/>

<uses-permission android:name="android.permission.EXPAND_STATUS_BAR"/>

<!-- 百度推送需要增加的权限 end-->

<!-- 在百度开发者中心查询应用的API Key -->

<meta-data android:name="api_key" android:value="api_value"/>

<!-- 百度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"/>

<!-- 4.6版本新增的Activity声明,提升Push后台存活率 -->

<activity

android:launchMode="singleInstance"

android:name="com.baidu.android.pushservice.PushKeepAlive"

android:theme="@android:style/Theme.Translucent.NoTitleBar"/>

<!-- 百度push结束 -->

<!-- 定义接收百度推送消息 -->

<receiver android:name="com.tiange.miaolive.notify.PushReceiver">

<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>

/**

* 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

*/

public class PushReceiver extends PushMessageReceiver {

/** TAG to Log */

public static final String TAG = PushReceiver.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.e(TAG, responseString);

//

// if (errorCode == 0) {

// // 绑定成功

// Log.e(TAG, "绑定成功");

// }

BaseSocket.getInstance().setPushToken(channelId.getBytes());

}

/**

* 接收透传消息的函数。

*

* @param context

* 上下文

* @param message

* 推送的消息

* @param customContentString

* 自定义内容,为空或者json字符串

*/

@Override

public void onMessage(Context context, String message,

String customContentString) {

String messageString = "透传消息 onMessage=\"" + message

+ "\" customContentString=" + customContentString;

// Log.e(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();

}

}*/

}

/**

* 接收通知到达的函数。

*

* @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.e(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) {

e.printStackTrace();

}

}

}

/**

* 接收通知点击的函数。

*

* @param context

* 上下文

* @param title

* 推送的通知的标题

* @param description

* 推送的通知的描述

* @param customContentString

* 自定义内容,为空或者json字符串

*/

@Override

public void onNotificationClicked(Context context, String title,

String description, String customContentString) {

String notifyString = "通知点击 onNotificationClicked title=\"" + title + "\" description=\""

+ description + "\" customContent=" + customContentString;

Log.e(TAG, notifyString);

String roomid = null;

String serverid=null;

String useridx=null;

// 自定义内容获取方式,mykey和myvalue对应通知推送时自定义内容中设置的键和值

if (!TextUtils.isEmpty(customContentString)) {

JSONObject customJson = null;

try {

customJson = new JSONObject(customContentString);

//customContent={"roomid":"10000","serverid":"0","useridx":"0"}

if (!customJson.isNull("roomid")) {

roomid = customJson.getString("roomid");

}

if (!customJson.isNull("serverid")) {

serverid = customJson.getString("serverid");

}

if (!customJson.isNull("useridx")) {

useridx = customJson.getString("useridx");

}

} catch (JSONException e) {

e.printStackTrace();

}

}

Intent intent = new Intent();

intent.setClass(context.getApplicationContext(), *****.class);

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

intent.putExtra(***);

context.getApplicationContext().startActivity(intent);

}

/**

* 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> successTags, List<String> failTags, String requestId) {

String responseString = "onSetTags errorCode=" + errorCode

+ " successTags=" + successTags + " failTags=" + failTags

+ " requestId=" + requestId;

// Log.e(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> successTags, List<String> failTags, String requestId) {

String responseString = "onDelTags errorCode=" + errorCode

+ " successTags=" + successTags + " failTags=" + failTags

+ " requestId=" + requestId;

// Log.e(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.e(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.e(TAG, responseString);

// if (errorCode == 0) {

// // 解绑定成功

// Log.e(TAG, "解绑成功");

// }

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: