偏好设置接口

校正App签名时间

进行该操作后,如果有偏差,每次网络请求都会对设备进行时间校正;不进行该操作的话将以设备时间为准。

注意

  • 使用场景:有可能手机上的时间不太准确。

  • 校正操作在App的一个生命周期内生效,App重启后需要重新设置才能重新生效,可以重复设置。

  • 您需要一个时间服务,可以自建,简单的时间戳接口就可以,请求这个时间服务返回正确的时间,然后将时间填入本接口,SDK就能知道和正确时间差了多少。

接口定义

void setAuthCurrentTime(long time);

参数说明

参数

类型

是否必填

说明

time

long

用于校正的时间戳。

代码示例

// httpdns为初始化获取的服务实例
httpdns.setAuthCurrentTime(System.currentTimeMillis());

是否允许HTTPDNS打印Log

接口定义

public static void enable(boolean enable)

参数说明

参数

类型

是否必填

说明

enable

boolean

是否打印Log到logcat。

代码示例

HttpDnsLog.enable(shouldPrintLog);

设置接收SDK日志的回调类

注意

  • 该功能仅适用于SDK V1.2.3及以上版本。

  • SDK V2.0.0及以上版本进行改版,需使用HttpDnsLog进行设置。

接口定义

    /**
     * 设置日志接口
     * 不受{@link #printToLogcat} 控制
     *
     * @param logger
     */
    public static void setLogger(ILogger logger) {
        if (logger != null) {
            loggers.add(logger);
        }
    }

    /**
     * 移除日志接口
     *
     * @param logger
     */
    public static void removeLogger(ILogger logger) {
        if (logger != null) {
            loggers.remove(logger);
        }
    }
ILogger接口如下:
public interface ILogger {
    void log(String msg);
}

参数说明

参数

类型

是否必填

说明

logger

ILogger

设置该接口后,SDK本身的日志将不会打印,都会通过ILogger接口进行回调,便于自行控制日志的打印和存储日志。

代码示例

// SDK V2.0.0以下版本,httpdns为初始化获取的服务实例
httpdns.setLogger(new ILogger() {
            @Override
            public void log(String s) {
                Log.d("HttpDnsSDK", "resultILogger:" + s);
            }
        });

// SDK V2.0.0及以上版本
HttpDnsLog.setLogger(new ILogger() {
            @Override
            public void log(String s) {
                Log.d("HttpDnsSDK", "resultILogger:" + s);
            }
        });

设置是否使用HTTPS协议解析域名

设置是否通过HTTPS协议解析域名,默认设置为false,即通过HTTP协议解析。

接口定义

void setHTTPSRequestEnabled(boolean enabled);

参数说明

参数

类型

是否必填

说明

enable

boolean

设置是否通过HTTPS协议解析域名,取值如下: true:使用https请求解析域名。 false:使用http请求解析域名。

默认设置为false,即通过HTTP协议解析。

代码示例

// httpdns为初始化获取的服务实例
httpdns.setHTTPSRequestEnabled(true);

是否允许启用持久化缓存

该功能旨在提升首屏加载速度,但持久化缓存会将上一次解析到的结果保存在本地持久层,App重启后,如果启动持久化缓存会优先从持久层加载解析结果。所以存在第一次使用的IP为过期IP(TTL过期,大多数情况下该IP依然可以正常使用)的可能性。如果业务服务器IP变化较频繁,建议谨慎接入该功能,以免对业务造成影响。另外,持久化缓存影响首次启动/网络切换后域名解析结果,后续解析仍会请求HTTPDNS服务器,并更新本地缓存。

接口定义

void setCachedIPEnabled(boolean enable);

参数说明

参数

类型

是否必填

说明

enable

boolean

取值如下:

  • true:启用持久化缓存。

  • false:关闭持久化缓存。

代码示例

// httpdns为初始化获取的服务实例
httpdns.setCachedIPEnabled(true);

是否允许启用持久化缓存-是否清除本地缓存

该功能旨在提升首屏加载速度,但持久化缓存会将上一次解析到的结果保存在本地持久层,App重启后,如果启动持久化缓存会优先从持久层加载解析结果。所以存在第一次使用的IP为过期IP(TTL过期,大多数情况下该IP依然可以正常使用)的可能性。如果业务服务器IP变化较频繁,建议谨慎接入该功能,以免对业务造成影响。另外,持久化缓存影响首次启动/网络切换后域名解析结果,后续解析仍会请求HTTPDNS服务器,并更新本地缓存。

接口定义

void setCachedIPEnabled(boolean enable, boolean enable2);

参数说明

参数

类型

是否必填

说明

enable

boolean

取值如下:

  • true:启用持久化缓存。

  • false:关闭持久化缓存。

enable2

boolean

启用持久化缓存时生效:

  • true:读取本地缓存之后,清除本地缓存。

  • false:读取本地缓存之后,不清除本地缓存。

代码示例

// httpdns为初始化获取的服务实例
httpdns.setCachedIPEnabled(true);

设置是否允许返回TTL过期域名的IP

设置是否允许HTTPDNS返回TTL过期的域名,建议设置为YES(允许)(默认为NO)。

说明

  • 当设置为YES时,SDK在实时返回过期IP的同时依然会进行异步更新以获取最新的IP信息。

  • 当设置为NO时,假设已有某个域名的缓存,IP的TTL时间为60s,60s内调用getIpByHostAsync等异步解析接口可以拿到缓存结果;但是在60s之后,首次调用getIpByHostAsync等异步解析接口会直接返回null并且进行异步域名解析更新缓存。

接口定义

void setExpiredIPEnabled(boolean enable);

参数说明

参数

类型

是否必填

说明

enable

boolean

是否返回TTL过期域名。

  • YES:允许

  • NO:不允许

代码示例

// httpdns为初始化获取的服务实例
httpdns.setExpiredIPEnabled(true);

网络切换自动刷新

设置网络切换时是否自动刷新所有域名解析结果,如果打开此开关,在网络切换时,会自动刷新所有域名的解析结果,但会产生一些流量消耗。

注意

  • WiFi、蜂窝、无网这三个状态的切换算网络切换。

  • 4G与3G切换不算网络切换。

  • SIM卡切换也不会单独处理。

接口定义

void setPreResolveAfterNetworkChanged(boolean enable);

参数说明

参数

类型

是否必填

说明

enable

boolean

  • 如果设置为true,那么网络切换时就会刷新缓存中的所有域名。

  • 如果设置为false或不设置,那么网络切换时SDK仅仅会删除所有域名的缓存,只有当下次访问域名时,才会去重新解析。

代码示例

// httpdns为初始化获取的服务实例
httpdns.setPreResolveAfterNetworkChanged(true);

设置网络请求超时时间

设置自定义请求超时时间,默认为15s。

接口定义

void setTimeoutInterval(int timeoutInterval);

参数说明

参数

类型

是否必填

说明

timeoutInterval

int

单位是毫秒(ms)

代码示例

// httpdns为初始化获取的服务实例
httpdns.setTimeoutInterval(15 * 1000);

设置region节点

设置region节点,调用后,会按照region更新服务IP。

注意

该功能仅适用于SDK V1.3.2及以上版本。

接口定义

void setRegion(String region);

参数说明

参数

类型

是否必填

说明

region

String

region为节点,设置海外region,用于海外服务区域选择,当前仅支持hk(香港节点)和sg(新加坡节点),填写后返回当地的服务节点; 缺省时,使用中国大陆服务节点。

代码示例

// httpdns为初始化获取的服务实例
httpdns.setRegion("hk");

清空指定域名缓存

使用阿里云域名解析服务的用户,调用该接口主动清除本地缓存,可实现秒级域名配置生效。 例如:假设域名xxx.com,解析IP地址为ip1, 当ip1遭受攻击,需要将流量迁移至ip2,实现流程如下:

  1. 首先,用户在云解析控制台将域名对应IP修改为ip2,此时在HTTPDNS服务端会立即获取到此变更信息,并清除服务端该域名的ip1缓存。

  2. 用户手动调用此接口,清空xxx.com域名的本地缓存。

  3. App端清空缓存后的下一次请求,会使得服务端重新请求权威服务器,获取最新解析IP地址ip2,从而使前端解析结果立即生效为ip2。

注意

  • 该功能仅适用于SDK V2.0.3及以上版本。

  • 清空操作会同步清空内存缓存和本地缓存。

接口定义

void cleanHostCache(ArrayList<String> hosts);

参数说明

参数

类型

是否必填

说明

hosts

ArrayList<String>

需要清除的host域名数组。如果需要清空全部数据,传null或者空数组即可。