集成操作步骤:

重要

上线前测试阶段,请检查以下几项:

  1. 在控制台配置的网络探测规则是否成功触发,以在控制台中看到对应的探测数据为准。

  2. 检查客户端主动发起的探测是否成功上报,以在控制台中看到对应的探测数据为准,建议和控制台配置的探测规则的探测目标不同,以便区分。

  3. 针对步骤1、2分别检查不同平台,如Android、iOS等。

  4. 有条件的话,海外和中国内地不同终端都验证下是否能成功上报数据。

1、iOS SDK 接入

第一步:Podfile文件添加以下配置。

source 'https://github.com/aliyun/aliyun-specs.git'
pod 'AliNetworkDiagnosis', '~> 0.1'

第二步:AppDelegate类中引入以下头文件。

#import <AliNetworkDiagnosis/AliNetworkDiagnosis.h>

第三步:AppDelegate类的application: didFinishLaunchingWithOptions:方法中添加以下SDK初始化代码。

// 应用的密钥,必填
NSString *secretKey = @"控制台获取的应用密钥";
// 设备唯一标识,选填,传入nil时SDK会自动生成
NSString *deviceId = nil;
// 两字母国家标识,选填,如中国是CN,传入nil,SDK会根据客户端出口公网IP确定所在国家
NSString *siteId = nil;
// 设置自定义信息,选填,会在探测结果数据中带上,可设置多组key-value;可以传入nil
NSDictionary *extension = [NSDictionary dictionaryWithObjectsAndKeys:
                           @"value1", @"key1",
                           @"value2", @"key2",
                           nil];
[AliNetworkDiagnosis init:secretKey deviceId:deviceId siteId:siteId extension:extension];

客户端如需发起主动探测,见文档附录。

2、Android SDK接入

第一步:根据build.gradle文件添加以下配置。

repositories {
  google()
  jcenter()
  mavenCentral()
  maven { url 'https://maven.aliyun.com/repository/public/' }
}

第二步:添加下面两个依赖。

implementation 'com.aliyun.ais:network-diagnosis:0.1+'
// 如需要 http 探测,需引入 okhttp 依赖
implementation 'com.squareup.okhttp3:okhttp:4+'

第三步:初始化SDK。

// 应用的密钥,必填
String secretKey = "控制台获取的应用密钥";
// 设备唯一标识,选填,传入null时SDK会自动生成
String deviceId = null;
// 两字母国家标识,选填,如中国是CN,传入null,SDK会根据客户端出口公网IP确定所在国家
String siteId = null;
// 设置自定义信息,选填,会在探测结果数据中带上,可设置多组key-value;可以传入null
Map<String,String> extension = new HashMap<>();
extension.put("key1", "value1");
extension.put("key2", "value2");
Diagnosis.init(secretKey, deviceId, siteId, extension);

附录

如App侧需主动发起探测,可直接调用SDK接口如下。

Android:

// http
HttpConfig httpConfig = new HttpConfig(null, "https://www.aliyun.com", null, null);
Diagnosis.startHttpPing(httpConfig);

// ping, 1000ms超时,ping 10次,目标地址:www.aliyun.com
PingConfig pingConfig = new PingConfig(null, "www.aliyun.com", 10, 1000,null,null);
Diagnosis.startPing(pingConfig);

// tcpping, 1000ms超时,ping 10次,目标地址:www.aliyun.com:443
PingConfig tcpPingConfig = new PingConfig(null, "www.aliyun.com", 443, 10, 1000,null,null);
Diagnosis.startTcpPing(tcpPingConfig);

// mtr,目标www.aliyun.com,路径最长长度30,探测1条路径,每个节点测试10次,超时时间1000ms
MtrConfig mtrConfig = new MtrConfig(null, "www.aliyun.com", 30,1, 10,1000,null,null);
Diagnosis.startMtr(mtrConfig);

// dns, nameServer可以传null,默认会用localdns,请求A记录,1000ms超时
DnsConfig dnsConfig = new DnsConfig(null, null, "www.aliyun.com", "A",1000,null,null);
Diagnosis.startDns(dnsConfig);

iOS:接口

// 引入以下头文件
#import <AliNetworkDiagnosis/AliNetworkDiagnosis.h>
// http
AliHttpPingConfig *httpPingConfig = [[AliHttpPingConfig alloc] init:@"www.aliyun.com" traceId:nil context:nil complete:nil];
[AliHttpPing execute:httpPingConfig];

// ping, 1000ms超时,ping 10次,报文大小20字节,目标地址:www.aliyun.com
AliPingConfig *pingConfig = [[AliPingConfig alloc] init:@"www.aliyun.com" timeout:1000 interfaceType:AliNetDiagNetworkInterfaceDefault prefer:1 context:nil traceID:nil size:20 count:10 interval:200 complete:nil combineComplete:nil];
[AliPing execute:pingConfig];

// tcpping,1000ms超时,ping 10次,端口443,每包间隔200ms
AliTcpPingConfig *tcpConfig = [[AliTcpPingConfig alloc] init:@"www.aliyun.com" timeout:1000 interfaceType:AliNetDiagNetworkInterfaceDefault prefer:0 context:nil traceID:nil port:443 count:10 interval:200 complete:nil combineComplete:nil];
[AliTcpPing execute:tcpConfig];

// mtr,目标www.aliyun.com,路径最长长度30,探测1条路径,每个节点测试10次,超时时间1000ms
AliMTRConfig *config = [[AliMTRConfig alloc] init:@"www.aliyun.com" maxTtl:30 maxPaths:1 maxTimeEachIP:10 timeout:1000 interfaceType:AliNetDiagNetworkInterfaceDefault prefer:1 context:nil traceID:nil complete:nil combineComplete:nil];

// dns, nameServer可以传null,默认会用localdns,请求A记录,1000ms超时
AliDnsConfig *dnsConfig = [[AliDnsConfig alloc] init:@"www.taobao.com" nameServer:nil type:@"A" timeout:2000 interfaceType:AliNetDiagNetworkInterfaceDefault traceID:nil complete:nil context:nil];
[AliDns execute:dnsConfig];