友盟官方文档 https://developer.umeng.com/docs/143070/detail/144783
代码中用到的友盟appKey 获取方式 要区分安卓和ios
代码中用到的阿里appKey和appSecret 获取方式
代码
package com.alibaba.umeng.databankprivate;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.http.Header;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class MyTest {
public static void getToken() throws Exception {
String umAppkey = ""; //友盟appkey ios 需要区分是安卓还是IOS
String umAppkey = ""; //友盟appkey 安卓 需要区分是安卓还是IOS
String appKey = "203915191"; //阿里key
String appSecret = "rtopEPaS6LhU5pkmdpngfy6ToEIhwLJx"; //阿里secret
String token = "eyJjIjoiT2VxeUFHVDZYS1R3bXBJN3Z6SHNJK2JacUJjYk1IcjM3elNSSkhkU0ZQWGFwUDdYdDlwZFB4OGZoMGcwNlBkcU5zZGJFZGJkdlI0clxuMXA3VzRqMlJsSHBROEx0QUowQURobjFtOHlrSU1oTGxudDdvaTUzcjhyZGFoWXlmWkhzcTd3Zk9WY0s2SzhIMVQxaERiV1wvd2wzUmNcbisrNEkwMG1GZHJXQngwU0VTakdJcDBPTlFmRTg2TTVEQityNzJHVktCSHR0dkdETzFIYys2ZkJpMVRDc2pmb2htQzFXVXIrTE1HSDVcbjhDcWd2K0RtbGc3NGhNSTYwOTFjRzVTXC92XC9xN2NwMnVCVXdmTWlweU5iOXpyNTIweTZDSDRxamVoeVpoTkdZelhaN3JkVlZuS1dxUlxueHhURlQrTUZEYmlVYzkrUmxvOERyOE9hXC9jbXlRSk55eXB1bkw0NDJHMWZsekNPK0p6STVjMGF5ZEdLSnlGTkVaR2krUXdDMHJuY2lcbnJEYUpEaVlBUXpkME51eWJLb1NvQ3ViZE5TcUcyc2p5dmErUkFISmN6K0dFWFJBaVdQQytnekxweWs1ZWE5d2tZaGdlZk8ybE8wYUdcbkFwSFYzTEJzeldwbkZjanhhcG1raFhISlllSlM1RXQ3MVNwb1lFb09heVFYWDhaRFU4bERIYld3aW5oMGZLR3p6RE5CYjYzNVdUbVpcbmRZSTlQZmdmQ0FFczdhT09XNVZEN0FYcVpwK3hSQVQ2cjd2dFlFTTA4a2JBNkxXRTZldGM3ZUw4aFpqbWhjV3k0ZE9PVVp4V3pPVWZcbnliMEtHQkV4ZjdzPVxuIiwiayI6ImdscENSSjl3REpoS2xxNUdJR1FOZEZqOHhvTDMwUDg0WVhTa3QzZHd3ZHA3UVFoeG5nUXdaN25rYklOYTY5UXpZUWo0TnBUUk1WQmoxSHFYdjZFQ2I1V1wvVEJkU1dCeVJvbXkySEFybXhFc3BTSHUrUlJmemF1bVRIRG0wMDZcL2p3OXNYWklyUG5uYVJ5a2pnN3h1M2t5NVRidTJiQVlrek9Fb09TYTBCZGU4Yk9rSjY1bUJtMnFxSit1M0RVWCtOOUJKWW1NV1hvWmJ4N0JKZzlVeU0xRXlocjZMSkFUYURaNHV0N1BRcXNZdmF1eEM3RjBKYW0rRkd3ZUZXRjNoXC9Od2U2MXhQak9qa1wvSWl2TjFBSkpTRUhWd3ZMKzV6SnZKbE9PQUVlYzVYbVhrZXUrOXh3aW16TmFjTENYV3JLdTFkTWNyOElhYkhqM292TmFqUlpVbGc9PSIsIm8iOiJBbmRyb2lkIn0=";
String url = "https://verify5.market.alicloudapi.com/api/v1/mobile/info?appkey=" + umAppkey;
HttpPost httpPost = new HttpPost(url);
/**
* body
*/
JSONObject object = new JSONObject();
object.put("token", token);
StringEntity stringEntity = new StringEntity(object.toJSONString(), StandardCharsets.UTF_8);
httpPost.setEntity(stringEntity);
/**
* header
*/
httpPost.setHeader("Content-Type", "application/json; charset=UTF-8");
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("X-Ca-Version", "1");
httpPost.setHeader("X-Ca-Stage", "RELEASE");
httpPost.setHeader("X-Ca-Key", appKey);
httpPost.setHeader("X-Ca-Timestamp", String.valueOf(System.currentTimeMillis()));
httpPost.setHeader("X-Ca-Nonce", UUID.randomUUID().toString());
httpPost.setHeader("Content-MD5", Base64.encodeBase64String(DigestUtils.md5(object.toJSONString())));
httpPost.setHeader("X-Ca-Signature-Headers", "X-Ca-Version,X-Ca-Stage,X-Ca-Key,X-Ca-Timestamp");
/**
* sign
*/
String stringToSign = getSignString(httpPost);
System.out.println(stringToSign);
Mac hmacSha256 = Mac.getInstance("HmacSHA256");
byte[] keyBytes = appSecret.getBytes(StandardCharsets.UTF_8);
hmacSha256.init(new SecretKeySpec(keyBytes, 0, keyBytes.length, "HmacSHA256"));
String sign = new String(Base64.encodeBase64(hmacSha256.doFinal(stringToSign.getBytes(StandardCharsets.UTF_8))));
httpPost.setHeader("X-Ca-Signature", sign);
/**
* execute
*/
CloseableHttpClient httpclient = HttpClients.createDefault();
try {
CloseableHttpResponse response = httpclient.execute(httpPost);
System.out.println(response);
} catch (Exception e) {
e.printStackTrace();
}
}
private static String getSignString(HttpPost httpPost) {
Header[] headers = httpPost.getAllHeaders();
Map<String, String> map = new HashMap<>();
for (Header header : headers) {
map.put(header.getName(), header.getValue());
}
return httpPost.getMethod() + "\n" +
map.get("Accept") + "\n" +
map.get("Content-MD5") + "\n" +
map.get("Content-Type") + "\n\n" +
"X-Ca-Key:" + map.get("X-Ca-Key") + "\n" +
"X-Ca-Stage:" + map.get("X-Ca-Stage") + "\n" +
"X-Ca-Timestamp:" + map.get("X-Ca-Timestamp") + "\n" +
"X-Ca-Version:" + map.get("X-Ca-Version") + "\n" +
httpPost.getURI().getPath() + "?" + httpPost.getURI().getQuery();
}
public static void main(String[] args) throws Exception {
getToken();
}
}