通用流程

以崩溃分析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)

操作步骤

  1. 从IClientProfile类中生成对象Profile。

    Profile对象存放地域、AccessKeyID和AccessKeySecret,如示例中的cn-shanghai。

    IClientProfile profile = DefaultProfile.getProfile("cn-shanghai", "<yourAccessKeyID>", "<yourAccessKeySecret>");
  2. 从IClientProfile类中生成IAcsClient的对象client。后续获得response从IClientProfile中获得。

    IAcsClient client = new DefaultAcsClient(profile);
  3. 创建一个对应方法的Request,使用构造函数生成一个默认的类request。

    类的命名规则为API方法名加上Request。查询崩溃趋势的API方法名为QueryCrashTrend,对应的请求类名就是QueryCrashTrendRequest。

    QueryCrashTrendRequest request = new QueryCrashTrendRequest();
  4. 设置请求类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");
  5. 通过client对象获得对应request响应。

    QueryCrashTrendResponse response = client.getAcsResponse(request);
    System.out.println(JSON.toJSONString(response));
  6. 使用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());
        }
    }
}
阿里云首页 移动研发平台 相关技术圈