您可以下载并运行示例项目,参考不同技术场景下的集成方案。
www.volcengine.com
*.toutiaoapi.com
警告
示例项目会向这些域名发送请求。如果您没有在控制台添加这些域名,HTTPDNS SDK 无法返回 HTTPDNS 服务端的解析结果,只能返回 Local DNS 的解析结果。
如果您需要在示例项目中向其他域名,例如 www.douyin.com
,发送请求,您也需要在控制台添加这些域名。
下载并解压缩示例项目。
使用 Android Studio 打开项目。Gradle 会自动同步项目。
Gradle 同步完成后,打开 app > java > com.bytedance.vehttpdns.demo > TestHttpDnsDepend.java。在 getHttpdnsAccountID
方法和 getHttpdnsSecretKey
方法的返回值中分别填入您的 Service ID 和 Secret Key。Service ID 和 Secret Key 的获取方法参考 获取鉴权密钥 。
警告
示例代码了方便功能演示,直接在返回值传入 Service ID 和 Secret Key。在生产环境中,您需要避免直接传入明文。例如,您可以预先把明文进行编码或加密处理,在传值的时候再对已编码或加密的明文进行解码或解密。同时,您必须对 app 进行代码混淆处理。否则,您的 Service ID 和 Secret Key 可能会被第三方通过反编译的方式获得。
@Override public String getHttpdnsAccountID() { return "xxxxx"; } @Override public String getHttpdnsSecretKey() { return "xxxxx"; }
连接 Android 真机或模拟器。编译并运行项目。
示例项目展示了以下场景:
OkHttpActivity.java
中实现。URLConnectionActivity.java
中实现。WebViewOKHTTPActivity.java
中实现。WebViewURLConnectionActivity.java
中实现。您可以查看界面上打印的日志。如果 dns source 返回的结果是 HTTPDNS_CACHE
、HTTPDNS_STALE_CACHE
或 HTTPDNS_REQUEST
,则说明 HTTPDNS 解析成功。详细信息参考 DnsResult 类。
您可以查看界面上打印的日志。如果 dns source 返回的结果是 HTTPDNS_CACHE
、HTTPDNS_STALE_CACHE
或 HTTPDNS_REQUEST
,则说明 HTTPDNS 解析成功。详细信息参考 DnsResult 类。
以使用 OkHttp 的 Activity 为例,您可以查看 Logcat 上打印的日志。如果 dns source 返回的结果是 HTTPDNS_CACHE
、HTTPDNS_STALE_CACHE
或 HTTPDNS_REQUEST
,则说明 HTTPDNS 解析成功。详细信息参考 DnsResult 类。
dns result : host : www.volcengine.com, getHttpDnsResultForHostSyncBlock cost : 1, dns source : HTTPDNS_CACHE, ipv4 list : [27.221.123.129, 101.71.160.113, 27.221.123.136, 218.57.18.239, 112.122.156.223, 112.85.251.186, 112.85.251.187, 112.132.37.225, 112.122.156.221, 218.57.18.241, 101.71.160.114, 124.160.174.168, 112.85.251.185, 112.132.37.228, 124.160.174.173, 112.85.251.180], ipv6 list : [], dns result ttl : 46, dns request cost : 46, client ip : 211.95.47.98
同时,由于您在控制台只添加了 www.volcengine.com 域名,而没有添加 portal.volccdn.com 域名,portal.volccdn.com 域名相关的资源无法获得 HTTPDNS 服务端的解析结果。在日志中,您可以看到 SDK 会执行两次解析:
{"type":0,"duration":55,"error":403,"httpdns_subtype":0}
:SDK 使用 HTTPDNS 服务端解析域名。解析失败,返回 403 错误码。{"type":1,"duration":55,"error":0}
:SDK 使用 Local DNS 解析域名。解析成功。日志的详细信息如下:
dns result : host : portal.volccdn.com, getHttpDnsResultForHostSyncBlock cost : 56, dns source : LOCALDNS_CACHE, ipv4 list : [116.162.166.229, 116.162.166.230, 116.162.166.231, 116.162.166.232, 116.162.166.233, 116.162.166.226, 116.162.166.227, 116.162.166.228], ipv6 list : [2408:8752:e00:44:3::3f8, 2408:8752:e00:44:3::3f7], dns result ttl : 30, dns request cost : 51, client ip : {"type":0,"duration":55,"error":403,"httpdns_subtype":0 {"type":1,"duration":55,"error":0}
参考 查看解析请求统计数据 查看您发送的解析请求信息。
HTTPDNS Android SDK 支持您通过 DoH 协议接入 HTTPDNS 服务端。
示例项目默认发送 HTTPDNS 请求。参见以下步骤为示例项目配置 DoH 地址。配置完成后,示例项目会发送 DoH 请求。
参见以下步骤通过示例项目发送 DoH 请求。
在控制台开启 DoH 功能并获取 DoH 地址。参见 开启 DoH 并获取接入域名。
在 MainActivity.java
文件中,在 setHttpDnsDepend
前设置 DoH 地址。
// 设置 DoH 地址 ArrayList<String> DoHDomains = new ArrayList<String>(); // 为 SDK 设置 DoH 接入域名 DoHDomains.add("doh-xxxxxxxxxxxxxxx.volcdns.pub"); HttpDns.getService().setHttpDnsDomainList(DoHDomains); HttpDns.getService().setHttpDnsDepend(new TestHttpDnsDepend(getApplicationContext()));
在 TestHttpDnsDepend.java
文件中,把 useDoh
的返回值设置为 true。
public class TestHttpDnsDepend extends AbsOptionalHttpDnsDepend implements IHttpDnsDepend { ... // 开启 Android SDK 的 DoH 功能 @Override public boolean useDoh() { return true; } }
如果您在运行示例项目时,无法获取 HTTPDNS 服务端的解析结果,您可以参考 常见问题。