關於極光鑑權認證一鍵登錄請求接口的3個相關問題的解決方案

今天開始準備調用極光推送的REST API發現報了很多錯。postman和idea都試過了

 

報錯1: post請求接口,返回{"code":9010,"content":"missing auth"}

出這個錯,請仔細查看官方文檔https://docs.jiguang.cn/jverification/server/rest_api/rest_api_summary/

鑑權方式

極光 REST API採用 HTTP 基本認證的驗證方式。基本做法爲,HTTP Header 中加 Authorization:

   Authorization: Basic ${base64_auth_string} 

Header 名稱是 "Authorization", 值是 base64轉換過的 "appKey:masterSecret"(中間有個冒號)。這兩者可以在極光開發者服務的Web控制檯[應用設置]-[應用信息]中查看。

 

報錯2:

{

"code": 9011,

"content": "auth failed"

}

出現這個錯誤,十有八九是你通過postMan請求,把Authorization放到header裏面了。。。具體的做法如圖

而不是直接在headers裏面加個Content-Type:application/json

Authorization Basic MDQzNDdkNDU5Y2QwODZhOTFjNWRlNjU1OjY5YThmODM4ZGV-----------------------

官方給出的解釋是:文檔裏面提供的方式是restapi的方式,postmen是封裝好了的

post此時應該可以請求了。

那麼java代碼怎麼寫呢?

 /**
     * @Description  極光推送專用post
     * @Author PrinceCharmingDong
     * @Date 2020/3/4
     */
	public static String doPostForJpush (String url, String JSONBody,String appKey,String masterKey) {
		CloseableHttpResponse response = null;
		CloseableHttpClient httpClient = null;
		String responseContent = "";
		try {
			httpClient = HttpClients.createDefault();
			HttpPost httpPost = new HttpPost(url);
			httpPost.addHeader("Content-Type", "application/json");
			httpPost.addHeader("Authorization", "Basic " + Base64.getUrlEncoder()
				.encodeToString((appKey+ ":" + masterKey).getBytes()));
			httpPost.setEntity(new StringEntity(JSONBody));
			response = httpClient.execute(httpPost);
			HttpEntity entity = response.getEntity();
			responseContent = EntityUtils.toString(entity, "UTF-8");
			response.close();
			httpClient.close();
			System.out.println(responseContent);
		} catch (ClientProtocolException e) {
			log.error(e);
		} catch (IOException e) {
			log.error(e);
		} finally {
			close(response, httpClient);
		}
		return responseContent;
	}



 private static void close(Closeable... closeables) {
        if (closeables != null && closeables.length > 0) {
            try {
                for (Closeable closeable : closeables) {
                    if (closeable != null) {
                        closeable.close();
                    }
                }
            } catch (IOException e) {
                log.error(e);
            }
        }
    }




JSONBody是

{
    "loginToken":"v3NMGQPG4x7XkKDEazzhJHoY-JdZfilhodyW5bV2U8C8pUxoCRnRoi3lkUQKjUJKD31pxPJRcO2PEdGEs04jRRbC3kHdDl5tLkACD-_I_NtcMOsEXtl3e7xnz8KpcxracnX_iXI6CPIJ5wBY9WfYaPtp30zdEy7ffcOk2F5NyWFKeup1y1k4s8aWsfGulFffE8Mzd7uQMmjCaYBm9x-------------"
}

這樣子的。

 

至於請求返回的數據怎麼處理,你應該會將 json 字符串轉爲 java bean,然後獲取裏面的內容。此處不過多贅述

報錯3:

{

    "id": 287637091930615808,

    "code": 9003,

    "content": "token expired or not exist",

    "exID": null,

    "phone": null

}

 

這個很明顯了,loginToken是一次性的,用了就沒了,叫客戶端再給個loginToken給你。

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章