Topik ini menjelaskan cara mengintegrasikan Anti-Bot SDK ke dalam aplikasi Android. Dalam topik ini, Anti-Bot SDK disebut sebagai SDK. Sebelum mengaktifkan fitur perlindungan aplikasi untuk aplikasi Android Anda, Anda harus mengintegrasikan SDK ke dalam aplikasi tersebut.
Batasan
Aplikasi Android Anda harus menggunakan Android 16 atau yang lebih baru. Jika versi API lebih lama dari 16, SDK tidak akan berfungsi sebagaimana mestinya.
Prasyarat
Fitur perlindungan aplikasi telah dibeli dan diaktifkan.
Untuk informasi lebih lanjut, lihat Prosedur untuk Mengaktifkan Perlindungan Aplikasi.
SDK untuk aplikasi Android telah diperoleh.
Setelah membeli fitur perlindungan aplikasi, Anda dapat menghubungi dukungan teknis di grup layanan DingTalk untuk mendapatkan SDK. Anda juga dapat mengirimkan Halaman Tiket Baru untuk mendapatkan SDK.
SDK untuk aplikasi Android mencakup file AAR, dengan format penamaan: AliTigerTally_X.Y.Z.aar. X.Y.Z menunjukkan nomor versi file tersebut.
Kunci autentikasi SDK, yaitu
app key, telah diperoleh.Untuk mendapatkan app key, masuk ke Konsol Web Application Firewall dan pilih . Pada tab Manajemen Bot halaman Perlindungan Situs Web, aktifkan App Protection dan klik Obtain and Copy Appkey. Kunci autentikasi SDK digunakan untuk mengirim permintaan inisialisasi SDK dan harus disertakan dalam kode integrasi.
CatatanSetiap akun Alibaba Cloud memiliki satu-satunya
app key, yang dapat digunakan untuk semua nama domain di instance WAF Anda. Anda dapat menggunakanapp keybaik untuk mengintegrasikan SDK ke dalam aplikasi Android maupun iOS.
Contoh kunci autentikasi:
****OpKLvM6zliu6KopyHIhmneb_****u4ekci2W8i6F9vrgpEezqAzEzj2ANrVUhvAXMwYzgY_****vc51aEQlRovkRoUhRlVsf4IzO9dZp6nN_****Wz8pk2TDLuMo4pVIQvGaxH3vrsnSQiK****
Informasi Latar Belakang
SDK digunakan untuk menandatangani permintaan yang dikirim oleh aplikasi. Web Application Firewall (WAF) memverifikasi tanda tangan dalam permintaan untuk mengidentifikasi risiko dalam layanan aplikasi dan memblokir permintaan jahat.
(Opsional) Buat proyek uji Android
Anda dapat mengintegrasikan SDK ke dalam proyek Android nyata atau proyek uji Android untuk membiasakan diri dengan operasi integrasi sebelum menerapkannya pada proyek nyata.
Dalam contoh ini, gunakan Android Studio untuk membuat proyek uji Android.
Gambar berikut menunjukkan proyek uji bernama TigerTally_sdk_test.
Sebelum mengintegrasikan SDK ke dalam aplikasi, pastikan bahwa proyek uji berjalan seperti yang diharapkan. 
Prosedur
Gunakan Android Studio untuk membuka proyek uji dan masuk ke direktori file.
Referensikan file AAR.
Salin file AliTigerTally.aar ke direktori libs. Anda juga dapat menyeret file ke direktori tersebut.

Buka file build.gradle dan modifikasi konfigurasi berdasarkan deskripsi berikut:
Tambahkan direktori libs sebagai sumber dependensi.
repositories{ flatDir { dirs 'libs' } }Tambahkan dependensi kompilasi.
PentingGanti nomor versi (X.Y.Z) dalam kode berikut dengan nomor versi file AAR yang Anda peroleh.
dependencies { compile(name: 'AliTigerTally_X.Y.Z', ext: 'aar') }
Klik Sync Now untuk menyinkronkan modifikasi ke proyek.
Referensikan file SO.
Jika file SO sudah termasuk dalam proyek, lewati langkah ini. Jika tidak, tambahkan konfigurasi berikut ke file build.gradle:
android { defaultConfig { ndk { abiFilters 'arm64-v8a', 'x86', "armeabi-v7a" //abiFilters "armeabi-v7a" } } }Ajukan izin berikut untuk aplikasi.
Izin
Diperlukan
Deskripsi
android.permission.INTERNET
Ya
Menghubungkan ke Internet.
android.permission.ACCESS_NETWORK_STATE
Tidak
Mendapatkan status jaringan perangkat.
android.permission.ACCESS_WIFI_STATE
Tidak
Mendapatkan status koneksi Wi-Fi perangkat.
android.permission.READ_PHONE_STATE
Tidak
Membaca status dan identitas perangkat.
PentingAnda harus secara dinamis mengajukan izin ini untuk aplikasi Android 6.0 atau yang lebih baru.
android.permission.BLUETOOTH
Tidak
Mendapatkan izin Bluetooth perangkat.
android.permission.READ_EXTERNAL_STORAGE
Tidak
Membaca penyimpanan eksternal perangkat.
PentingAnda harus secara dinamis mengajukan izin ini untuk aplikasi Android 6.0 atau yang lebih baru.
android.permission.CHANGE_NETWORK_STATE
Tidak
Mengubah status jaringan perangkat.
Tambahkan kode integrasi.
Tentukan ID pengguna.
Fungsi:
int setAccount(String account);Deskripsi: Menentukan ID pengguna dalam permintaan, memungkinkan konfigurasi kebijakan perlindungan WAF secara lebih efisien.
Parameter: <account>, menentukan ID pengguna. Tipe data: string. Disarankan untuk memasukkan ID pengguna yang telah dimasking.
Nilai kembali: Nilai yang menunjukkan apakah pengaturan berhasil. Tipe data: int. Nilai 0 menunjukkan keberhasilan, sedangkan nilai -1 menunjukkan kegagalan.
Contoh kode:
final String account="account"; TigerTallyAPI.setAccount(account); // Jika pengguna logon adalah tamu, Anda tidak perlu memanggil fungsi ini. Anda dapat langsung memanggil fungsi inisialisasi.Inisialisasi SDK.
Fungsi:
int init(Context context, String appkey, int type);Deskripsi: Menginisialisasi SDK dan melakukan pengumpulan informasi satu kali. Pengumpulan informasi satu kali memungkinkan pengumpulan informasi terminal sekali saja. Untuk pengumpulan ulang, panggil fungsi
init.Pengumpulan informasi satu kali mendukung dua mode: pengumpulan data lengkap dan pengumpulan data tanpa bidang sensitif. Bidang sensitif mencakup imei, imsi, simSerial, wifiMac, wifiList, dan bluetoothMac pengguna. Untuk mengumpulkan bidang sensitif, Anda harus mendapatkan izin.
CatatanSebelum pengguna menyetujui kebijakan privasi aplikasi, gunakan mode kedua. Setelah persetujuan diberikan, gunakan mode pertama. Pengumpulan data lengkap membantu mengidentifikasi risiko.
Parameter:
<context>: Menentukan konteks yang dilewatkan ke aplikasi.
<appkey>: Menentukan kunci autentikasi SDK. Tipe data: string.
<type>: Menentukan mode pengumpulan. Tipe data: CollectType. Nilai valid:
DEFAULT: Pengumpulan data lengkap.
NO_GRANTED: Pengumpulan data tanpa bidang sensitif.
Nilai kembali: Nilai yang menunjukkan apakah inisialisasi berhasil. Tipe data: int. Nilai 0 menunjukkan keberhasilan, sedangkan nilai -1 menunjukkan kegagalan.
Contoh kode:
final String appkey="your_appkey"; // Kumpulkan data lengkap. int ret = TigerTallyAPI.init(this.getApplicationContext(), appkey, TigerTallyAPI.CollectType.DEFAULT); // Kumpulkan data tanpa bidang sensitif. int ret = TigerTallyAPI.init(this.getApplicationContext(), appkey, TigerTallyAPI.CollectType.NOT_GRANTED); Log.d("AliSDK", "ret:" + ret);Tandatangani data permintaan.
Fungsi:
String vmpSign(int signType, byte[] input);Deskripsi: Menandatangani data input dan mengembalikan string tanda tangan.
Parameter:
<signType>: Menentukan algoritma tanda tangan. Tipe data: int. Atur nilainya menjadi 1, yang menunjukkan penggunaan algoritma tanda tangan default.
<input>: Menentukan data yang akan ditandatangani. Tipe data: byte[].
Dalam kebanyakan kasus, data yang akan ditandatangani adalah seluruh badan permintaan. Jika badan permintaan POST kosong atau badan permintaan GET digunakan, masukkan
nullatau array byte[] yang dikonversi dari string kosong. Contoh:"".getBytes("UTF-8").
Nilai kembali: String tanda tangan. Tipe data: string.
Contoh kode:
CatatanDalam contoh kode berikut, string tanda tangan didefinisikan sebagai wToken.
String request_body = "i am the request body, encrypted or not!"; String wToken = null; try { wToken = TigerTallyAPI.vmpSign(1, request_body.getBytes("UTF-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } Log.d("AliSDK", "wToken:" + wToken);Tambahkan string tanda tangan ke header HTTP.
Sebagai contoh, jika proyek Anda menggunakan kelas
HttpURLConnection, Anda dapat menambahkan isi string tanda tangan wToken ke objek kelasHttpURLConnection.Contoh kode:
String request_body = "i am the request body, encrypted or not!"; new Thread(new Runnable() { @Override public void run() { try { URL url = new URL("https://www.aliyundoc.com"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setReadTimeout(5000); conn.setRequestMethod("POST"); // set info wToken ke header conn.setRequestProperty("wToken", wToken); OutputStream os = conn.getOutputStream(); // set info badan permintaan byte[] requestBody = request_body.getBytes("UTF-8"); os.write(requestBody); os.flush(); os.close(); int code = conn.getResponseCode(); Log.d("respCode", Integer.toString(code)); } catch (MalformedURLException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }; }).start();Kirim permintaan yang menggunakan header HTTP baru ke server aplikasi.
WAF menerima permintaan yang ditujukan ke server, mengurai string tanda tangan wToken untuk mengidentifikasi dan memblokir permintaan jahat, kemudian meneruskan permintaan normal ke server.
Ofuskan kode
Jika Anda menggunakan ProGuard untuk mengofuskan kode, Anda dapat menggunakan -keep untuk mengonfigurasi fungsi SDK. Ini membantu mencegah fungsi SDK dihapus.
Contoh kode:
-keep class com.aliyun.TigerTally.* {*;}