亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java怎么集成華為推送

發布時間:2021-11-16 15:16:36 來源:億速云 閱讀:315 作者:iii 欄目:大數據

這篇文章主要介紹“java怎么集成華為推送”,在日常操作中,相信很多人在java怎么集成華為推送問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”java怎么集成華為推送”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

集成華為推送

這類推送一般官方文檔都比較詳細,如果想要更加詳細的了解建議查看官方文檔。

官方文檔地址:https://developer.huawei.com/consumer/cn/service/hms/pushservice.html

華為推送服務在開發前需要些準備

1.注冊認證成為開發者

2.配置應用簽名

3.創建產品和應用

4.開通推送服務

這些步驟按照官方文檔一步步來就行,我這邊是直接拿到了開發所需要的APPID,APP SECRET,PACKAGE NAME

注冊和準備工作完成后就可以開始進行后臺的代碼編寫了

第一步 應用服務器獲取AccessToken

想要訪問華為的服務接口必須需要一個Token,我們第一步就是獲取這個Token。

    private static String appSecret = "appSecret";//用戶在華為開發者聯盟申請Push服務獲取的服務參數
    private static  String appId = "12345678";//用戶在華為開發者聯盟申請Push服務獲取的服務參數
    private static  String tokenUrl = "https://login.cloud.huawei.com/oauth3/v2/token"; //獲取認證Token的URL
    private static  String apiUrl = "https://api.push.hicloud.com/pushsend.do"; //應用級消息下發API
    private static  String accessToken;//下發通知消息的認證Token
    private static  long tokenExpiredTime;  //accessToken的過期時間

首先定義好需要的參數,在實際開發中這些參數可以存放在數據庫,也可以存放在配置文件中,看個人需求。

接下來就是獲取Token

private void refreshToken() {
        try {
            String msgBody = MessageFormat.format("grant_type=client_credentials&client_secret={0}&client_id={1}", URLEncoder.encode(appSecret, "UTF-8"), appId);
            String response = HttpUtil.post(tokenUrl, msgBody);
            JSONObject obj = JSONObject.parseObject(response);
            accessToken = obj.getString(“access_token”);
            tokenExpiredTime = System.currentTimeMillis()+(obj.getLong(“expires_in”)-5 * 60)*1000;
        } catch (Exception e) {
            LOGGER.error("HvPush -- >> 認證Token獲取失敗!原因:e = {}", ExceptionUtil.getMessage(e));
        }
    }

獲取到了訪問Token我們就可以開始推送代碼的編寫了。

第二步 應用服務器發送PUSH消息

通過前面的代碼我們獲取到了AccessToken,Token的存放按照不同的需求可以放在redis或者數據庫。

在發送消息之前首先先驗證AccessToken是否已經過期

if(tokenExpiredTime <=System.currentTimeMillis())
    {
        refreshToken();
    }

接下來進行消息體的封裝

    // 封裝推送消息body,用于顯示通知欄消息顯示的標題和內容
    JSONObject body = new JSONObject();//僅通知欄消息需要設置標題和內容,透傳消息key和value為用戶自定義
    body.put("title","Push message title");//消息標題
    body.put("content","Push message content");//消息內容體

    // 封裝消息點擊動作的參數,“com.huawei.hms.hmsdemo”為推送消息中需要打開的應用APK包名。請根據實際包名來修改。
    JSONObject param = new JSONObject(); 
    param.put("appPkgName","com.huawei.hms.hmsdemo");//定義需要打開的appPkgName,這個參數在推送服務管理頁面可以看到

    // 封裝消息點擊動作,用于定義通知欄點擊行為
    JSONObject action = new JSONObject();
    action.put("type",3);//類型3為打開APP,其他行為請參考接口文檔設置
    action.put("param",param);//消息點擊動作參數
	
	// type為1時可以自定義行為,自定義行為需要app開發者事先給號參數
	// param.put("intent", "自定義行為,動作需要app開發者編輯好給你");

    // 封裝消息類型,用于定義消息類型,區分是通知欄消息還是透傳消息。
    JSONObject msg = new JSONObject();
    msg.put("type",3);//3: 通知欄消息,異步透傳消息請根據接口文檔設置
    msg.put("action",action);//消息點擊動作
    msg.put("body",body);//通知欄消息body內容示例代碼

    // 封裝擴展消息,擴展消息中可以設置biTag用于消息打點,也可以攜帶customize參數用于觸發通知欄點擊事件的onEvent回調。
    JSONObject ext = new JSONObject();//擴展信息,含BI消息統計,特定展示風格,消息折疊。
    ext.put("biTag","Trump");//設置消息標簽,如果帶了這個標簽,會在回執中推送給CP用于檢測某種類型消息的到達率和狀態
    JSONObject temp = new JSONObject();
    temp.put("season","Spring");
    temp.put("weather","raining");
    JSONArray customize = new JSONArray();
    customize.add(temp);
    ext.put("customize",customize);
    // ext擴展信息這個參數我并沒理解到到底是干嘛的 ,在實際的開發中我只使用了ext.put("biTag", "Trump"); 并沒有進行customize參數的攜帶

    // 最后將以上信息全部封裝整個消息體
    JSONObject hps = new JSONObject();//華為PUSH消息總結構體
    hps.put("msg",msg);
    hps.put("ext",ext);
    JSONObject payload = new JSONObject();
    payload.put("hps",hps);

消息體參數詳細文檔地址:https://developer.huawei.com/consumer/cn/service/hms/catalog/huaweipush_agent.html?page=hmssdk_huaweipush_api_reference_agent_s2

消息體封裝完成后就可以開始發送推送消息了。

	// 創建一個數組json用于存放需要推送的設備id,一般是由前段傳過來,或者數據庫查詢出來
	JSONArray deviceTokens = new JSONArray();//目標設備Token
        deviceTokens.add(regId);

	// 封裝整個http消息并發送
	String postBody = MessageFormat.format(
         "access_token={0}&nsp_svc={1}&nsp_ts={2}&device_token_list={3}&payload={4}",
            URLEncoder.encode(accessToken,"UTF-8"),
            URLEncoder.encode("openpush.message.api.send","UTF-8"),
            URLEncoder.encode(String.valueOf(System.currentTimeMillis() / 1000),"UTF-8"),
            URLEncoder.encode(deviceTokens.toString(),"UTF-8"),
            URLEncoder.encode(payload.toString(),"UTF-8"));

String postUrl = apiUrl + "?nsp_ctx=" + URLEncoder.encode("{\"ver\":\"1\", \"appId\":\"" + appId + "\"}", "UTF-8");

	// 發送消息 這里我用的是hutool的HttpUtil工具類發的post請求
        String post = HttpUtil.post(postUrl, postBody);
        LOGGER.info("華為推送 -- >> 返回結果:" + post);

到此,關于“java怎么集成華為推送”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

兰西县| 大丰市| 樟树市| 宜川县| 巩留县| 吕梁市| 鞍山市| 镇雄县| 宁津县| 定南县| 碌曲县| 新密市| 庆城县| 吴江市| 民权县| 龙陵县| 于田县| 英吉沙县| 乌审旗| 依安县| 桓台县| 贵定县| 平山县| 高阳县| 山西省| 合水县| 衡山县| 伊川县| 咸丰县| 涟水县| 中西区| 开阳县| 监利县| 无极县| 合阳县| 六安市| 定边县| 项城市| 克拉玛依市| 新田县| 拉萨市|