Untuk mengaktifkan perlindungan aplikasi pada aplikasi Android Anda, integrasikan Anti-Bot SDK (selanjutnya disebut SDK dalam topik ini) sebelum mengaktifkan fitur tersebut.
Batasan
Diperlukan Android API level 16 atau lebih tinggi. Jika aplikasi Anda menargetkan API level yang lebih rendah, SDK tidak akan berfungsi sebagaimana mestinya.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
-
Perlindungan aplikasi yang telah dibeli dan diaktifkan. Lihat Prosedur mengaktifkan perlindungan aplikasi.
-
Paket SDK (file AAR) untuk Android. Hubungi dukungan teknis di grup layanan DingTalk atau kirimkan ticket untuk memintanya. Nama file tersebut adalah
AliTigerTally_X.Y.Z.aar, denganX.Y.Zsebagai nomor versi. -
Kunci aplikasi (kunci otentikasi SDK). Untuk mendapatkannya, login ke Konsol WAF, pilih Protection Config > Website Protection, buka tab Bot Management, aktifkan App Protection, lalu klik Obtain and Copy Appkey.
Setiap Akun Alibaba Cloud memiliki satu kunci aplikasi unik yang berlaku untuk semua nama domain dalam instans Web Application Firewall (WAF) Anda, serta untuk aplikasi Android dan iOS. Contoh kunci aplikasi:
****OpKLvM6zliu6KopyHIhmneb_****u4ekci2W8i6F9vrgpEezqAzEzj2ANrVUhvAXMwYzgY_****vc51aEQlRovkRoUhRlVsf4IzO9dZp6nN_****Wz8pk2TDLuMo4pVIQvGaxH3vrsnSQiK****
Cara kerja
SDK memberikan tanda tangan pada setiap permintaan keluar dari aplikasi Anda. WAF memverifikasi tanda tangan tersebut di sisi server untuk mendeteksi dan memblokir traffic berbahaya, lalu meneruskan permintaan yang sah ke server origin Anda.
(Opsional) Buat proyek Android uji coba
Jika Anda ingin berlatih langkah-langkah integrasi sebelum menerapkannya pada aplikasi produksi, buat terlebih dahulu proyek uji coba di Android Studio.
Gambar berikut menunjukkan contoh proyek uji coba bernama TigerTally_sdk_test.
Jalankan proyek uji coba tersebut untuk memverifikasi bahwa proyek berfungsi sebelum melanjutkan.
Integrasikan SDK
Langkah 1: Buka proyek di Android Studio
Buka proyek Anda di Android Studio dan navigasikan ke direktori file proyek.
Langkah 2: Tambahkan dependensi AAR
-
Salin
AliTigerTally.aarke direktorilibsproyek Anda. Anda juga dapat menyeret file tersebut langsung ke direktori tersebut. -
Buka
build.gradledan tambahkan konfigurasi berikut:-
Deklarasikan
libssebagai repositori lokal:repositories { flatDir { dirs 'libs' } } -
Tambahkan dependensi compile:
dependencies { compile(name: 'AliTigerTally_X.Y.Z', ext: 'aar') }Penting: Ganti
X.Y.Zdengan nomor versi aktual dari nama file AAR yang Anda unduh.
-
-
Klik Sync Now untuk menerapkan perubahan.
-
Jika Anda menggunakan ProGuard untuk mengacak kode aplikasi, tambahkan aturan berikut ke file konfigurasi ProGuard segera setelah menambahkan dependensi. Hal ini mencegah kelas SDK dihapus saat proses build, yang dapat menyebabkan kegagalan waktu proses.
-keep class com.aliyun.TigerTally.* {*;}
Langkah 3: Konfigurasikan filter library native (jika diperlukan)
Lewati langkah ini jika proyek Anda sudah mencakup file SO. Jika tidak, tambahkan blok ndk berikut ke build.gradle:
android {
defaultConfig {
ndk {
abiFilters 'arm64-v8a', 'x86', 'armeabi-v7a'
//abiFilters "armeabi-v7a"
}
}
}
Langkah 4: Ajukan izin
Tambahkan izin berikut ke AndroidManifest.xml. Hanya INTERNET yang wajib agar SDK dapat berfungsi.
| Izin | Wajib | Permintaan runtime (Android 6.0+) | Deskripsi |
|---|---|---|---|
android.permission.INTERNET |
Ya | Tidak — diberikan otomatis saat instalasi | Mengizinkan SDK mengirim permintaan bertanda tangan ke WAF. |
android.permission.ACCESS_NETWORK_STATE |
Tidak | Tidak — diberikan otomatis saat instalasi | Membaca status jaringan perangkat untuk sinyal risiko yang lebih baik. |
android.permission.ACCESS_WIFI_STATE |
Tidak | Tidak — diberikan otomatis saat instalasi | Membaca status koneksi Wi-Fi untuk sinyal risiko yang lebih baik. |
android.permission.READ_PHONE_STATE |
Tidak | Ya — harus diminta saat runtime | Membaca identitas perangkat untuk sinyal risiko yang lebih baik. |
android.permission.BLUETOOTH |
Tidak | Tidak — diberikan otomatis saat instalasi | Membaca informasi perangkat Bluetooth untuk sinyal risiko yang lebih baik. |
android.permission.READ_EXTERNAL_STORAGE |
Tidak | Ya — harus diminta saat runtime | Membaca penyimpanan eksternal untuk sinyal risiko yang lebih baik. |
android.permission.CHANGE_NETWORK_STATE |
Tidak | Tidak — diberikan otomatis saat instalasi | Memodifikasi status konektivitas jaringan untuk sinyal risiko yang lebih baik. |
Langkah 5: Tambahkan kode integrasi
5a. (Opsional) Tetapkan ID pengguna
Panggil setAccount() untuk mengaitkan ID pengguna dengan permintaan SDK. Hal ini membantu WAF menerapkan kebijakan perlindungan tingkat pengguna. Lewati pemanggilan ini jika pengguna belum login — panggil init() secara langsung.
// Signature: int setAccount(String account)
// Returns: 0 on success, -1 on failure
final String account = "account"; // Gunakan ID pengguna yang telah dimasking
TigerTallyAPI.setAccount(account);
| Parameter | Tipe | Deskripsi |
|---|---|---|
account |
String |
ID pengguna. Gunakan nilai yang telah dimasking untuk melindungi privasi pengguna. |
5b. Inisialisasi SDK
Panggil init() sekali saat aplikasi Anda dimulai. Ini melakukan pengumpulan informasi perangkat satu kali yang digunakan untuk analisis risiko.
Tersedia dua mode pengumpulan:
-
`DEFAULT`: Mengumpulkan semua data perangkat, termasuk bidang sensitif (
imei,imsi,simSerial,wifiMac,wifiList,bluetoothMac). Memerlukan izin yang sesuai. Gunakan mode ini setelah pengguna menerima kebijakan privasi aplikasi. -
`NOT_GRANTED`: Melewati bidang sensitif. Gunakan mode ini sebelum pengguna menerima kebijakan privasi.
// Signature: int init(Context context, String appkey, int type)
// Returns: 0 on success, -1 on failure
final String appkey = "your_appkey";
// Pengumpulan data lengkap (setelah pengguna menerima kebijakan privasi)
int ret = TigerTallyAPI.init(this.getApplicationContext(), appkey, TigerTallyAPI.CollectType.DEFAULT);
// Kecualikan bidang sensitif (sebelum pengguna menerima kebijakan privasi)
int ret = TigerTallyAPI.init(this.getApplicationContext(), appkey, TigerTallyAPI.CollectType.NOT_GRANTED);
Log.d("AliSDK", "ret:" + ret);
| Parameter | Tipe | Deskripsi |
|---|---|---|
context |
Context |
Konteks aplikasi. |
appkey |
String |
Kunci aplikasi yang diperoleh dari Konsol WAF. |
type |
CollectType |
Mode pengumpulan data: DEFAULT atau NOT_GRANTED. |
5c. Beri tanda tangan pada permintaan
Panggil vmpSign() sebelum setiap permintaan HTTP keluar. Teruskan badan permintaan sebagai array byte; untuk permintaan GET atau badan POST kosong, teruskan null atau "".getBytes("UTF-8").
// Signature: String vmpSign(int signType, byte[] input)
// Returns: the wToken signature string
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);
| Parameter | Tipe | Deskripsi |
|---|---|---|
signType |
int |
Algoritma tanda tangan. Atur ke 1 untuk menggunakan algoritma default. |
input |
byte[] |
Badan permintaan yang akan ditandatangani. Teruskan null atau array byte kosong untuk permintaan GET atau POST kosong. |
5d. Tambahkan tanda tangan ke Header HTTP
Atur nilai wToken sebagai properti Header HTTP sebelum mengirim permintaan. Contoh berikut menggunakan HttpURLConnection:
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");
// Tambahkan tanda tangan wToken ke header permintaan
conn.setRequestProperty("wToken", wToken);
OutputStream os = conn.getOutputStream();
// Tulis 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();
Apa yang terjadi setelah integrasi
Setelah diintegrasikan, untuk setiap permintaan outbound yang dikirim aplikasi Anda:
-
vmpSign()menghasilkan tanda tanganwTokendari badan permintaan. -
Kode Anda melampirkan
wTokensebagai Header HTTP. -
WAF memeriksa header
wToken, memblokir permintaan yang gagal verifikasi tanda tangan, dan meneruskan permintaan valid ke server origin Anda.