您好,登錄后才能下訂單哦!
這篇文章主要介紹“java怎么集成華為推送”,在日常操作中,相信很多人在java怎么集成華為推送問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”java怎么集成華為推送”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
這類推送一般官方文檔都比較詳細,如果想要更加詳細的了解建議查看官方文檔。
官方文檔地址:https://developer.huawei.com/consumer/cn/service/hms/pushservice.html
華為推送服務在開發前需要些準備
1.注冊認證成為開發者
2.配置應用簽名
3.創建產品和應用
4.開通推送服務
這些步驟按照官方文檔一步步來就行,我這邊是直接拿到了開發所需要的APPID,APP SECRET,PACKAGE NAME
注冊和準備工作完成后就可以開始進行后臺的代碼編寫了
想要訪問華為的服務接口必須需要一個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我們就可以開始推送代碼的編寫了。
通過前面的代碼我們獲取到了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怎么集成華為推送”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。