You need to enable JavaScript to run this app.
导航
获取并运行 Android 示例项目
最近更新时间:2024.07.31 17:02:11首次发布时间:2023.03.22 20:49:16

您可以下载并运行示例项目,参考不同技术场景下的集成方案。

前提条件

  • 参考 快速入门 在火山引擎移动解析(HTTPDNS)控制台添加以下域名:
    • www.volcengine.com
    • *.toutiaoapi.com

    警告

    示例项目会向这些域名发送请求。如果您没有在控制台添加这些域名,HTTPDNS SDK 无法返回 HTTPDNS 服务端的解析结果,只能返回 Local DNS 的解析结果。
    如果您需要在示例项目中向其他域名,例如 www.douyin.com,发送请求,您也需要在控制台添加这些域名。

  • 准备开发环境:
    • 一台 Windows、macOS 或 Linux 主机。主机上安装了 Android Studio
    • 与主机连接的 Android 设备或 Android 模拟器,用于运行示例项目。Android 的版本是 4.1(API level 16)或以上。

操作步骤

  1. 下载并解压缩示例项目。

    veHttpDnsDemo.zip
    202.57KB

  2. 使用 Android Studio 打开项目。Gradle 会自动同步项目。

  3. 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";
    }
    
  4. 连接 Android 真机或模拟器。编译并运行项目。
    图片

示例项目展示了以下场景:

  • OkHttp 网络库场景:在 OkHttpActivity.java 中实现。
  • HttpURLConnection 网络库场景:在 URLConnectionActivity.java 中实现。
  • WebView 场景(使用 OkHttp):在 WebViewOKHTTPActivity.java 中实现。
  • WebView 场景(使用 HttpURLConnection):在 WebViewURLConnectionActivity.java 中实现。

结果验证

OkHttp 网络库场景

您可以查看界面上打印的日志。如果 dns source 返回的结果是 HTTPDNS_CACHEHTTPDNS_STALE_CACHEHTTPDNS_REQUEST,则说明 HTTPDNS 解析成功。详细信息参考 DnsResult 类
图片

HttpURLConnection 网络库场景

您可以查看界面上打印的日志。如果 dns source 返回的结果是 HTTPDNS_CACHEHTTPDNS_STALE_CACHEHTTPDNS_REQUEST,则说明 HTTPDNS 解析成功。详细信息参考 DnsResult 类
图片

WebView 场景

以使用 OkHttp 的 Activity 为例,您可以查看 Logcat 上打印的日志。如果 dns source 返回的结果是 HTTPDNS_CACHEHTTPDNS_STALE_CACHEHTTPDNS_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}

查看解析请求统计数据

参考 查看解析请求统计数据 查看您发送的解析请求信息。

(可选)通过示例项目发送 DoH 请求

HTTPDNS Android SDK 支持您通过 DoH 协议接入 HTTPDNS 服务端。
示例项目默认发送 HTTPDNS 请求。参见以下步骤为示例项目配置 DoH 地址。配置完成后,示例项目会发送 DoH 请求。
参见以下步骤通过示例项目发送 DoH 请求。

  1. 在控制台开启 DoH 功能并获取 DoH 地址。参见 开启 DoH 并获取接入域名

  2. 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()));
    
    
  3. TestHttpDnsDepend.java 文件中,把 useDoh 的返回值设置为 true。

    public class TestHttpDnsDepend  extends AbsOptionalHttpDnsDepend implements IHttpDnsDepend {
    
        ...
    
        // 开启 Android SDK 的 DoH 功能
        @Override
        public boolean useDoh() {
            return true;
        }
    
    }
    

排障指南

如果您在运行示例项目时,无法获取 HTTPDNS 服务端的解析结果,您可以参考 常见问题

接下来您可以

在自己的项目里集成 HTTPDNS SDK