1. 从 Bintray 上 Notification-Hubs-Android-SDK 的“文件”选项卡下载 notification-hubs-0.4.jar 文件。 libs 文件夹,然后刷新 libs 文件夹。
2. 下载并解压缩百度推送 Android SDK,打开 libs 文件夹,然后将 pushservice-x.y.z jar 文件以及 armeabi & mips 文件夹复制到 Android 应用程序的 jniLibs 文件夹。
3. 打开 Android 项目的 AndroidManifest.xml 文件,并添加百度 SDK 所需的权限。
向 AndroidManifest.xml 中的 application 元素添加 android:name 属性,并替换 yourprojectname(例如 com.skypine.skypine)。 确保此项目名称与你在百度控制台中配置的项目名称匹配。
4. 在 .MainActivity 活动元素后的 application 元素内添加以下配置,并替换 yourprojectname(例如 com.example.BaiduTest):
5. 将一个名为 ConfigurationSettings.java 的新类添加到项目中。
/**
* 百度推送
* Created by syhuang on 2017/7/14.
*/
public class ConfigurationSettings {
public static String API_KEY = "zrHB4m1yzwHDNFxI8uBAHxhi";
public static String NotificationHubName = "daisy-notification";
public static String NotificationHubConnectionString = "Endpoint=sb://daisy-ns.servicebus.chinacloudapi.cn/;SharedAccessKeyName=DefaultListenSharedAccessSignature;SharedAccessKey=wJTvYJB4wG1GJOvEtdKwxEPT6rGOdLbcmBb+lEtzt7k=";
}
6. 将以下代码添加到该类中:
public class ConfigurationSettings {
public static String API_KEY = "...";
public static String NotificationHubName = "...";
public static String NotificationHubConnectionString = "...";
}
使用前面从百度云项目中检索到的内容设置 API_KEY 的值,使用 Azure 经典门户中的通知中心名称设置 NotificationHubName,并使用 Azure 经典门户中的 DefaultListenSharedAccessSignature 设置 NotificationHubConnectionString。
7. 添加另一个名为 MyPushMessageReceiver.java的新类,并向此类中添加以下代码。 此类用于处理从百度推送服务器收到的推送通知。
/**
* Created by syhuang on 2017/7/14.
*/
public class MyPushMessageReceiver extends PushMessageReceiver {
/**
* TAG to Log
*/
public static NotificationHub hub = null;
public static String mChannelId, mUserId;
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
*/
@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);
mChannelId = channelId;
mUserId = userId;
try {
if (hub == null) {
hub = new NotificationHub(
ConfigurationSettings.NotificationHubName,
ConfigurationSettings.NotificationHubConnectionString,
context);
Log.i(TAG, "Notification hub initialized");
}
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
registerWithNotificationHubs();
}
private void registerWithNotificationHubs() {
new AsyncTask() {
@Override
protected Void doInBackground(Void... params) {
try {
hub.registerBaidu(mUserId, mChannelId);
Log.i(TAG, "Registered with Notification Hub - '"
+ ConfigurationSettings.NotificationHubName + "'"
+ " with UserId - '"
+ mUserId + "' and Channel Id - '"
+ mChannelId + "'");
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
return null;
}
}.execute(null, null, null);
}
/**
* 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 successTags, List failTags, String requestId) {
String responseString = "onSetTags errorCode=" + errorCode
+ " sucessTags=" + successTags + " 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 successTags, List failTags, String requestId) {
String responseString = "onDelTags errorCode=" + errorCode
+ " sucessTags=" + successTags + " 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 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);
// Demo更新界面展示代码,应用请在这里加入自己的处理逻辑
}
/**
* 接收通知点击的函数。
*
* @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 messageString = "title" + title + "message=\"" + description + "\" customContentString=" + customContentString;
Log.d(TAG, messageString);
}
/**
* 接收透传消息的函数。
*
* @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);
}
}
8. 打开 MainActivity.java,并将以下内容添加到 onCreate 方法中:
PushManager.startWork(getApplicationContext(),
PushConstants.LOGIN_TYPE_API_KEY, ConfigurationSettings.API_KEY);