简介
本文介绍如何通过 COS SDK 使用 HTTPDNS 服务访问 COS。
功能说明
移动端 COS SDK 默认使用的是 LocalDNS,DNS 解析过程中可能会遇到解析异常、域名劫持、跨网访问等问题,通过接入 HTTPDNS 可以避免上述问题,解决移动互联网服务中域名解析异常带来的困扰。
因此,如果您对上传、下载等 COS 操作的成功率、延迟较为敏感,您可以使用 HTTPDNS 服务访问 COS。
前提条件
在开始执行操作前,您需要开通 HTTPDNS 服务,并添加对应的 COS 域名。详细操作步骤如下:
1. 前往 移动解析 HTTPDNS 控制台 开通,具体操作请参见 开通移动解析 HTTPDNS。
2. 在移动解析 HTTPDNS 控制台添加 COS 主域名 myqcloud.com,具体操作请参见 添加域名。
3. 获取 HTTPDNS 配置信息,具体说明请参见 配置信息说明。
注意:
操作步骤
步骤1:HTTPDNS 配置
请您参考 HTTPDNS SDK 配置(Android、iOS) 进行 HTTPDNS SDK 的集成和配置。COS SDK 默认自动配置了 SDK 接入业务方式,您在配置 HTTPDNS SDK 过程中无需关注 SDK 接入业务方式(Android、iOS)。
步骤2:COS SDK 中集成
1. 通过 初始化 COS 服务 获取 CosXmlService。
2. 通过 CosXmlService 的 addCustomerDNSFetch 方法接入 HTTPDNS。
// 获取到CosXmlServicecosXmlService.addCustomerDNSFetch(hostname -> {String ips = MSDKDnsResolver.getInstance().getAddrByName(hostname);String[] ipArr = ips.split(";");if (0 == ipArr.length) {return Collections.emptyList();}List<InetAddress> inetAddressList = new ArrayList<>(ipArr.length);for (String ip : ipArr) {if ("0".equals(ip)) {continue;}try {InetAddress inetAddress = InetAddress.getByName(ip);inetAddressList.add(inetAddress);} catch (UnknownHostException ignored) {}}return inetAddressList;});
1. 接入 HTTPDNS,首先需要在 Podfile 文件中添加 HTTPDNS 库依赖。
pod 'QCloudCore/DNSLoader' // DNSLoader 模块,内部已封装腾讯 HTTPDNS
2. 导入头文件,并定义成员变量 dnsloader。
#import "QCloudHTTPDNSLoader.h"@property (nonatomic,strong)QCloudHTTPDNSLoader * dnsloader;
3. 设置 HTTPDNS 参数,将步骤一生成的配置参数依次设置给对应字段。
QCloudDnsConfig config;config.appId = @"******"; // 可选,应用 ID,腾讯云控制台申请获得,用于灯塔数据上报(未集成灯塔时该参数无效)config.dnsIp = @"0.0.0.0"; // HTTPDNS 服务器 IPconfig.dnsId = 1; // 授权 ID,腾讯云控制台申请后,通过邮件发送,用于域名解析鉴权config.dnsKey = @"*******";// des 的密钥config.encryptType = QCloudHttpDnsEncryptTypeDES; // 控制加密方式config.debug = YES; // 是否开启 Debug 日志,YES:开启,NO:关闭。建议联调阶段开启,正式上线前关闭config.timeout = 5000; // 可选,超时时间,单位ms,如设置0,则设置为默认值2000msself.dnsloader = [[QCloudHTTPDNSLoader alloc] initWithConfig:config];[QCloudHttpDNS shareDNS].delegate = self.dnsloader;
示例工程
Android 示例 Demo 请参见 COS SDK 网络优化 Demo 下的 CosServiceFactory。
iOS 示例 Demo 请参见 COS SDK 网络优化 Demo 下的 AppDelegate。