通用流程
以崩溃分析Java SDK查询崩溃趋势方法QueryCrashTrend为例,介绍编写崩溃分析Java SDK的通用流程。
前提条件
您已经创建了AccessKey。详细步骤请参见获取AccessKey。
为避免主账号泄露AccessKey带来的安全风险,建议您创建RAM用户,授予RAM崩溃分析相关的访问权限,再使用RAM用户的AccessKey调用SDK。
背景信息
本文示例中,IClientProfile和IAcsClient两个类包含在aliyun-java-sdk-core中,其他的类均包含在aliyun-java-sdk-emas-appmonitor中。
更多代码示例请参见阿里云代码示例库(CodeSample)。
操作步骤
从IClientProfile类中生成对象Profile。
Profile对象存放地域、AccessKeyID和AccessKeySecret,如示例中的cn-shanghai。
IClientProfile profile = DefaultProfile.getProfile("cn-shanghai", "<yourAccessKeyID>", "<yourAccessKeySecret>");
从IClientProfile类中生成IAcsClient的对象client。后续获得response从IClientProfile中获得。
IAcsClient client = new DefaultAcsClient(profile);
创建一个对应方法的Request,使用构造函数生成一个默认的类request。
类的命名规则为API方法名加上Request。查询崩溃趋势的API方法名为QueryCrashTrend,对应的请求类名就是QueryCrashTrendRequest。
QueryCrashTrendRequest request = new QueryCrashTrendRequest();
设置请求类request的参数。
通过request类的setXxx方法设置必要的信息,即API中必须要提供的信息,通过setXxx方法设置参数。示例中:
request.setUniqueAppId("24781204@android"); request.setAppVersionStrategy("LATEST_3"); request.setStartTime(1609430400000L); request.setEndTime(1609916400000L); request.setCrashStatType("crash_count"); request.setErrorCategory("Crash");
通过client对象获得对应request响应。
QueryCrashTrendResponse response = client.getAcsResponse(request); System.out.println(JSON.toJSONString(response));
使用catch()处理服务器报错和客户端报错。
服务端报错
catch (ServerException e) { e.printStackTrace();
客户端报错
catch (ClientException e) { System.out.println("ErrCode:" + e.getErrCode()); System.out.println("ErrMsg:" + e.getErrMsg()); System.out.println("RequestId:" + e.getRequestId());
执行结果
全部返回信息如下所示:
{ "RequestId":"C93F3D9F-CF25-47DF-9C0F-614395E5DCAC", "MetricResultList":[ { "data":[ { "data":10, "time":1609776000000 }, { "data":3, "time":1609862400000 } ], "tags":{ "appVersion":"1.0", "errorType":"ANDROID_CRASH", "uniqueAppId":"24781204@android" } } ] }
完整代码示例
以下为本文示例的完整Java SDK代码。
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.alibaba.fastjson.JSON;
import java.util.*;
import com.aliyuncs.emas_appmonitor.model.v20190611.*;
public class QueryCrashTrend {
public static void main(String[] args) {
DefaultProfile profile = DefaultProfile.getProfile("cn-shanghai", "LTAjVUwKznS*****", "BNPO1zoNSi484oizGM9fzzwJJ*****");
IAcsClient client = new DefaultAcsClient(profile);
QueryCrashTrendRequest request = new QueryCrashTrendRequest();
request.setUniqueAppId("24781204@android");
request.setAppVersionStrategy("LATEST_3");
request.setStartTime(1609430400000L);
request.setEndTime(1609916400000L);
request.setCrashStatType("crash_count");
request.setErrorCategory("Crash");
try {
QueryCrashTrendResponse response = client.getAcsResponse(request);
System.out.println(JSON.toJSONString(response));
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
}
}
}