Azure 下通知(百度推送)

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

你可能感兴趣的:(Azure 下通知(百度推送))