Topik proses integrasi Android SDK menyediakan panduan lengkap untuk mengimpor dan mengonfigurasi kit pengembangan perangkat lunak (SDK) Android, melakukan resolusi alamat IP, menerapkannya pada pustaka jaringan Anda, serta memverifikasi integrasinya. Topik ini berfokus pada solusi spesifik untuk mengintegrasikan HTTPDNS dengan OkHttp.
1. Latar Belakang
Jika Anda menggunakan OkHttp sebagai kerangka kerja jaringan di Android, Anda dapat secara efisien mengintegrasikan layanan HTTPDNS melalui antarmuka DNS kustom yang disediakan oleh OkHttp.
OkHttp adalah kerangka kerja Android ringan sumber terbuka untuk memproses permintaan jaringan. Ini dikembangkan oleh Square sebagai alternatif dari HttpURLConnection dan Apache HttpClient. Sejak dirilis, OkHttp telah mendapatkan popularitas di kalangan pengembang Android karena semakin matang.
Secara default, OkHttp menggunakan layanan DNS sistem InetAddress untuk resolusi nama domain. Namun, OkHttp juga menyediakan antarmuka untuk menyesuaikan layanan DNS, yang dapat Anda gunakan guna mengintegrasikan HTTPDNS.
Metode ini juga berlaku untuk Retrofit+OkHttp. Anda dapat meneruskan OkHttpClient yang telah dikonfigurasi sebagai parameter ke Retrofit.Builder::client(OkHttpClient).
2. Antarmuka DNS Kustom
OkHttp menyediakan API Dns yang memungkinkan pengembang menyesuaikan resolusi DNS:
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)
.getHttpDnsResultForHostSyncNonBlocking(host, RequestIpType.auto)
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;
}
@Override
public 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);
}
}Mekanisme pengulangan internal di okhttp dapat memilih alamat IP yang berbeda untuk membuat koneksi selama proses pengulangan. Oleh karena itu, metode lookup() dalam antarmuka Dns dapat mengembalikan List<InetAddress> yang berisi beberapa alamat IP. Pendekatan ini mencegah kegagalan permintaan yang dapat terjadi jika hanya satu alamat IP yang tidak tersedia dikembalikan.
3. Konfigurasikan OkHttpClient
Buat objek OkHttpClient dan teruskan objek OkHttpDns sebagai pengganti layanan DNS default:
private fun initOkHttp(context: Context) {
val client = OkHttpClient.Builder()
// Konfigurasikan pengaturan inisialisasi lainnya dari OkHttp sesuai kebutuhan
.dns(OkHttpDns(context))
.build()
}private void initOkHttp(Context context) {
OkHttpClient client = new OkHttpClient.Builder()
// Konfigurasikan pengaturan inisialisasi lainnya dari OkHttp sesuai kebutuhan
.dns(new OkHttpDns(context))
.build();
}Berikut ini adalah kode lengkap untuk implementasi OkHttp dan HTTPDNS.
4. Verifikasi
Setelah integrasi selesai, Anda harus memverifikasi keberhasilannya. Anda dapat menggunakan metode seperti simulasi pembajakan atau pengujian injeksi kesalahan. Untuk informasi selengkapnya, lihat Memverifikasi integrasi pustaka jaringan.
5. Ringkasan
Integrasi OkHttp dan HTTPDNS memberikan manfaat berikut:
Anda dapat dengan mudah mengakses layanan HTTPDNS dengan mengimplementasikan antarmuka DNS.
Solusi ini kompatibel dengan skenario yang melibatkan HTTPS, Server Name Indication (SNI), dan cookie. Solusi ini menghilangkan kebutuhan untuk verifikasi sertifikat dan pemeriksaan nama domain.