All Products
Search
Document Center

HTTPDNS:Praktik terbaik untuk menggunakan HTTPDNS dengan Alibaba Cloud OSS SDK di Android

Last Updated:Nov 10, 2025

Topik proses integrasi Android SDK menjelaskan cara mengimpor dan mengonfigurasi Android SDK, menyelesaikan alamat IP, menerapkan SDK ke pustaka jaringan, serta memverifikasi integrasi. Topik ini menjelaskan solusi spesifik untuk mengintegrasikan Alibaba Cloud OSS SDK dengan HTTPDNS pada klien Android.

1. Latar Belakang

Alibaba Cloud Object Storage Service (OSS) adalah layanan penyimpanan cloud universal yang memungkinkan pengembang menyimpan dan mengakses berkas—seperti foto profil, citra, audio, dan video—dalam berbagai aplikasi. Di Android, Anda dapat mengintegrasikan OSS Android SDK untuk menggunakan layanan ini.

Untuk meningkatkan stabilitas dan kecepatan transfer berkas, Anda dapat menggabungkan HTTPDNS SDK dengan OSS Android SDK guna mengurai nama domain OSS. Pendekatan ini mencegah pembajakan nama domain dan mempercepat penguraian DNS, sehingga mengoptimalkan pengalaman jaringan saat aplikasi mengakses OSS.

2. Integrasikan HTTPDNS SDK berbasis OkHttp

Anda dapat mengimplementasikan antarmuka DNS kustom OkHttp untuk mengintegrasikan HTTPDNS. Untuk informasi lebih lanjut, lihat Praktik Terbaik untuk Menggunakan HTTPDNS dengan OkHttp di Android.

class OkHttpDns constructor(context: Context): Dns {
    private var mContext: Context

    init {
        mContext = context
    }
    @Throws(UnknownHostException::class)
    override fun lookup(host: String): List<InetAddress> {
        val httpdnsResult: HTTPDNSResult = HttpDns.getService(accountID)
            .getHttpDnsResultForHostSync(host, RequestIpType.both)
        val inetAddresses: MutableList<InetAddress> = ArrayList()
        var address: InetAddress
        try {
            if (httpdnsResult.ips != null) {
                // Proses alamat IPv4
                for (ipv4 in httpdnsResult.ips) {
                    address = InetAddress.getByName(ipv4)
                    inetAddresses.add(address)
                }
            }
            if (httpdnsResult.ipv6s != null) {
                // Proses alamat IPv6
                for (ipv6 in httpdnsResult.ipv6s) {
                    address = InetAddress.getByName(ipv6)
                    inetAddresses.add(address)
                }
            }
        } catch (e: UnknownHostException) {
        }
        return if (!inetAddresses.isEmpty()) {
            inetAddresses
        } else Dns.SYSTEM.lookup(host)
    }
}
public class OkHttpDns implements Dns {
    private Context mContext;
    public OkHttpDns(Context context) {
        mContext = context;
    }
    @Overridepublic List<InetAddress> lookup(String host) throws UnknownHostException {
        HTTPDNSResult httpdnsResult = HttpDns.getService(accountID).getHttpDnsResultForHostSync(host, RequestIpType.both);
        List<InetAddress> inetAddresses = new ArrayList<>();
        InetAddress address;
        try {
            if (httpdnsResult.getIps() != null) {
                // Proses alamat IPv4
                for (String ipv4 : httpdnsResult.getIps()) {
                    address = InetAddress.getByName(ipv4);
                    inetAddresses.add(address);
                }
            }

            if (httpdnsResult.getIpv6s() != null) {
                // Proses alamat IPv6
                for (String ipv6 : httpdnsResult.getIpv6s()) {
                    address = InetAddress.getByName(ipv6);
                    inetAddresses.add(address);
                }
            }
        } catch (UnknownHostException e) {

        }

        if (!inetAddresses.isEmpty()) {
            return inetAddresses;
        }

        return okhttp3.Dns.SYSTEM.lookup(host);
    }
}

3. Integrasikan OSS SDK dan gunakan HTTPDNS

Anda dapat membuat instans OkHttpClient dan mengonfigurasikannya untuk OSS guna menggantikan layanan DNS default. Untuk informasi lebih lanjut tentang cara mengintegrasikan dan menggunakan OSS SDK, lihat OSS Android SDK.

// Buat konfigurasi klien OSS.
val conf = ClientConfiguration()
conf.connectionTimeout = 15 * 1000 // Batas waktu koneksi. Nilai default: 15 detik.
conf.socketTimeout = 15 * 1000 // Batas waktu socket. Nilai default: 15 detik.
conf.maxConcurrentRequest = 5 // Jumlah maksimum permintaan bersamaan. Nilai default: 5.
conf.maxErrorRetry = 2 // Jumlah maksimum percobaan ulang saat gagal. Nilai default: 2.

val builder = OkHttpClient.Builder()
    .dns(OkHttpDns(applicationContext))

// Jika Anda menetapkan okHttpClient kustom, beberapa pengaturan dari ClientConfiguration akan menjadi tidak valid. Anda perlu menetapkannya secara manual pada pembuat.
if (conf != null) {
    val dispatcher = Dispatcher()
    dispatcher.maxRequests = conf.maxConcurrentRequest

    builder.connectTimeout(conf.connectionTimeout.toLong(), TimeUnit.MILLISECONDS)
        .readTimeout(conf.socketTimeout.toLong(), TimeUnit.MILLISECONDS)
        .writeTimeout(conf.socketTimeout.toLong(), TimeUnit.MILLISECONDS)
        .followRedirects(conf.isFollowRedirectsEnable)
        .followSslRedirects(conf.isFollowRedirectsEnable)
        .dispatcher(dispatcher)

    if (conf.proxyHost != null && conf.proxyPort != 0) {
        builder.proxy(Proxy(Proxy.Type.HTTP, InetSocketAddress(conf.proxyHost, conf.proxyPort)))
    }
}

// Hanya Android OSS SDK versi 2.9.12 atau lebih tinggi yang mendukung metode conf.setOkHttpClient().
conf.okHttpClient = builder.build()

val oss = OSSClient(applicationContext, endpoint, credentialProvider, conf)
// Buat konfigurasi klien OSS.
ClientConfiguration conf = new ClientConfiguration();
conf.setConnectionTimeout(15 * 1000); // Batas waktu koneksi. Nilai default: 15 detik.
conf.setSocketTimeout(15 * 1000); // Batas waktu socket. Nilai default: 15 detik.
conf.setMaxConcurrentRequest(5); // Jumlah maksimum permintaan bersamaan. Nilai default: 5.
conf.setMaxErrorRetry(2); // Jumlah maksimum percobaan ulang saat gagal. Nilai default: 2.

OkHttpClient.Builder builder = new OkHttpClient.Builder()
        .dns(new OkHttpDns(getApplicationContext()));
        
// Jika Anda menetapkan okHttpClient kustom, beberapa pengaturan dari ClientConfiguration akan menjadi tidak valid. Anda perlu menetapkannya secara manual pada pembuat.
if (conf != null) {
    Dispatcher dispatcher = new Dispatcher();
    dispatcher.setMaxRequests(conf.getMaxConcurrentRequest());

    builder.connectTimeout(conf.getConnectionTimeout(), TimeUnit.MILLISECONDS)
            .readTimeout(conf.getSocketTimeout(), TimeUnit.MILLISECONDS)
            .writeTimeout(conf.getSocketTimeout(), TimeUnit.MILLISECONDS)
            .followRedirects(conf.isFollowRedirectsEnable())
            .followSslRedirects(conf.isFollowRedirectsEnable())
            .dispatcher(dispatcher);

    if (conf.getProxyHost() != null && conf.getProxyPort() != 0) {
        builder.proxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(conf.getProxyHost(), conf.getProxyPort())));
    }
}

// Hanya Android OSS SDK versi 2.9.12 atau lebih tinggi yang mendukung metode conf.setOkHttpClient().
conf.setOkHttpClient(builder.build());

OSS oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider, conf);
Penting

HTTPDNS SDK harus diinisialisasi sebelum OSS SDK diinisialisasi.

4. Ringkasan

Menggabungkan HTTPDNS SDK dengan OSS SDK mencegah pembajakan DNS dan mempercepat transfer berkas, sehingga meningkatkan stabilitas dan keamanan akses.

Inti dari implementasi ini adalah mengonfigurasi OkHttpClient kustom yang menggunakan logika penguraian HTTPDNS untuk OSS.

Poin-poin penting:

  • Setelah menyesuaikan OkHttpClient, Anda harus mentransfer konfigurasi secara manual, seperti batas waktu dan konkurensi, dari ClientConfiguration ke OkHttpClient.Builder. Jika tidak, konfigurasi asli menjadi tidak valid.

  • Pastikan versi OSS SDK adalah 2.9.12 atau lebih tinggi, dan inisialisasi HTTPDNS dilakukan sebelum menginisialisasi OSS.