Integrasikan SDK ke dalam aplikasi Anda untuk mengonfigurasi aturan spesifik skenario guna melindungi aplikasi di Konsol. Topik ini menjelaskan cara mengintegrasikan SDK perlindungan aplikasi ke dalam aplikasi Android.
Batasan
SDK mendukung arsitektur arm64-v8a dan armeabi-v7a pada sistem operasi Android.
Tingkat API untuk sistem operasi Android harus 16 atau lebih tinggi.
Metode
initmelakukan operasi yang memakan waktu. Untuk memastikan fitur keamanan sepenuhnya diinisialisasi, tunggu setidaknya 2 detik setelah memanggilinitsebelum memanggil metodevmpSign. Penundaan ini direkomendasikan untuk memaksimalkan perlindungan dan dapat disesuaikan sesuai kebutuhan. Namun, penundaan yang lebih singkat dapat mencegah kemampuan keamanan berfungsi sepenuhnya.Saat menggunakan ProGuard untuk pengaburan kode, gunakan opsi -keep untuk melestarikan metode API dari SDK. Sebagai contoh:
-keep class com.aliyun.TigerTally.** {*;}
-keep class com.aliyun.captcha.* {*;}
-keepclassmembers,allowobfuscation class * {
@com.alibaba.fastjson.annotation.JSONField <fields>;
}
-keep class com.alibaba.fastjson.** {*;}Prasyarat
Anda telah memperoleh SDK untuk aplikasi Android Anda.
Untuk mendapatkan SDK, ajukan tiket.
SDK untuk aplikasi Android mencakup dua file AAR:
AliTigerTally_X.Y.Z.aardanAliCaptcha_X.Y.Z.aar, di manaX.Y.Zmenunjukkan nomor versi.Anda telah memperoleh kunci otentikasi SDK (appkey).
Saat membuat set aturan Bots, klik Obtain and Copy AppKey untuk mendapatkan kunci otentikasi SDK. Kunci ini diperlukan untuk permintaan inisialisasi SDK dalam kode integrasi Anda.

Langkah 1: Buat proyek
Gunakan Android Studio sebagai contoh.
Buat proyek Android dengan mengikuti panduan konfigurasi. Direktori proyek ditampilkan pada gambar berikut.

Langkah 2: Integrasikan paket AAR
Ekstrak paket tigertally-X.Y.Z-xxxxxx-android.tgz. Salin semua file AAR dari folder yang dihasilkan ke direktori libs modul utama Anda (perhatikan bahwa jalur spesifik mungkin bervariasi berdasarkan konfigurasi proyek Anda).

Buka file build.gradle aplikasi Anda. Tambahkan direktori libs sebagai sumber dependensi dan tambahkan dependensi kompilasi untuk AliTigerTally_X.Y.Z.aar dan AliCaptcha_X.Y.Z.aar.
PentingGantilah nomor versi X.Y.Z dalam nama file AliTigerTally_X.Y.Z.aar dan AliCaptcha_X.Y.Z.aar dengan yang sebenarnya.
Konfigurasinya ditunjukkan sebagai berikut:
dependencies { // ... implementation files('libs/AliTigerTally_X.Y.Z.aar') implementation files('libs/AliCaptcha_X.Y.Z.aar') // Dependensi pustaka pihak ketiga implementation 'com.alibaba:fastjson:1.2.83_noneautotype' implementation 'com.squareup.okhttp3:okhttp:3.11.0' implementation 'com.squareup.okio:okio:1.14.0 }
Langkah 3: Filter arsitektur CPU SO
Jika proyek Anda belum menggunakan file SO sebelumnya, tambahkan konfigurasi berikut di file build.gradle Anda.
android {
defaultConfig {
ndk {
abiFilters 'arm64-v8a', 'armeabi-v7a'
}
}
}Langkah 4: Minta izin untuk aplikasi
Izin yang Diperlukan
<uses-permission android:name="android.permission.INTERNET"/>Izin Opsional
<uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Untuk Android 6.0 dan yang lebih baru, Anda harus secara dinamis meminta izin android.permission.READ_EXTERNAL_STORAGE dan android.permission.WRITE_EXTERNAL_STORAGE.
Langkah 5: Tambahkan kode integrasi
Tambahkan file header
import com.alibaba.fastjson.*;
import com.aliyun.tigertally.*;Atur penandatanganan data
Atur ID pengguna akhir kustom untuk bisnis Anda.
Ini memungkinkan Anda mengonfigurasi kebijakan mitigasi WAF secara fleksibel.
/** * Atur akun pengguna * * @param account Akun * @return Kode kesalahan */ public static int setAccount(String account)Parameter:
account: String yang mengidentifikasi pengguna. Kami merekomendasikan menggunakan format yang sudah dibersihkan.
Nilai Balik: Mengembalikan 0 jika pengaturan berhasil, atau -1 jika gagal. Tipe data: int.
Kode Contoh:
// Untuk tamu, Anda dapat melewati setAccount dan langsung menginisialisasi SDK. Setelah masuk, panggil setAccount dan inisialisasi ulang. String account = "user001"; TigerTallyAPI.setAccount(account);
Inisialisasi SDK dan lakukan pengumpulan data.
Proses inisialisasi mengumpulkan informasi perangkat sekali. Anda dapat memanggil metode
initlagi untuk memulai proses pengumpulan baru berdasarkan persyaratan bisnis yang berbeda. Ada tiga mode untuk inisialisasi: pengumpulan penuh, pengumpulan privasi kustom, dan pengumpulan non-privasi. Mode non-privasi tidak mengumpulkan bidang yang melibatkan privasi pengguna, seperti imei, imsi, simSerial, wifiMac, wifiList, bluetoothMac, dan androidId.CatatanKami merekomendasikan Anda memilih mode pengumpulan yang sesuai dengan persyaratan kepatuhan internal Anda dan memastikan integritas data. Data lengkap membantu mengidentifikasi risiko potensial lebih efektif.
// Callback inisialisasi public interface TTInitListener { // code menunjukkan kode status pemanggilan antarmuka void onInitFinish(int code); } /** * Inisialisasi SDK dengan callback * * @param appkey The appkey * @param type Jenis data yang dikumpulkan * @param otherOptions Berbagai opsi parameter * @return Kode kesalahan */ public static int init(Context context, String appkey, int collectType, Map<String, String> otherOptions, TTInitListener listener);Parameter:
context: Konteks aplikasi Anda. Tipe data: Context.
appkey: Kunci appkey SDK Anda. Tipe data: String.
collectType: Mode pengumpulan data. Tipe data: int. Nilai valid:
Nama bidang
Deskripsi
Contoh
TT_DEFAULT
Mengumpulkan semua data.
TigerTallyAPI.TT_DEFAULT
TT_NO_BASIC_DATA
Tidak mengumpulkan data perangkat dasar. Termasuk: nama perangkat (Build.DEVICE), nomor versi Android (Build.VERSION#RELEASE), dan resolusi layar.
TigerTallyAPI.X | TigerTallyAPI.Y
(Menunjukkan bahwa baik X maupun Y tidak dikumpulkan. X dan Y mewakili nama bidang item tertentu.)
TT_NO_IDENTIFY_DATA
Tidak mengumpulkan data pengenal perangkat. Termasuk: IMEI, IMSI, SimSerial, BuildSerial (SN), dan alamat MAC.
TT_NO_UNIQUE_DATA
Tidak mengumpulkan data pengenal unik. Termasuk: OAID, Google Advertising ID, dan Android ID.
TT_NO_EXTRA_DATA
Tidak mengumpulkan data perangkat tambahan. Termasuk: daftar aplikasi jahat/area abu-abu, IP LAN, DNS IP, informasi Wi-Fi terhubung (SSID, BSSID), daftar Wi-Fi terdekat, informasi lokasi, dan informasi sensor.
TT_NOT_GRANTED
Tidak mengumpulkan data privasi apa pun yang tercantum di atas.
TigerTallyAPI.TT_NOT_GRANTED
otherOptions: Opsional. Tipe data: Map<String,String>. Nilai default: null. Nilai valid:
Nama bidang
Deskripsi
Contoh
IPv6
Menentukan apakah akan menggunakan nama domain IPv6 untuk melaporkan informasi perangkat. Nilai valid:
0 (default): Gunakan nama domain IPv4.
1: Gunakan nama domain IPv6.
1
Intl
Menentukan wilayah tempat informasi perangkat dilaporkan. Nilai valid:
0 (default): Daratan Tiongkok
1: Luar daratan Tiongkok
Setel ini ke 1 untuk instance WAF di luar daratan Tiongkok; jika tidak, gunakan nilai default 0.
1
CustomUrl
Menetapkan nama domain server pelaporan data.
https://cloudauth-device.us-west-1.aliyuncs.com
CustomHost
Menetapkan host server pelaporan data.
cloudauth-device.us-west-1.aliyuncs.com
CatatanUntuk situs internasional umum, cukup menyetel parameter Intl. Parameter CustomUrl dan CustomHost hanya diperlukan saat melaporkan ke situs tertentu, seperti situs AS (Barat): https://cloudauth-device.us-west-1.aliyuncs.com.
listener: Antarmuka callback inisialisasi SDK. Tipe data: TTInitListener. Anda dapat memeriksa hasil inisialisasi spesifik dalam callback. Nilai default: null.
TTCode
Kode
Keterangan
TT_SUCCESS
0
SDK berhasil diinisialisasi.
TT_NOT_INIT
-1
SDK belum diinisialisasi.
TT_NOT_PERMISSION
-2
Izin Android dasar yang diperlukan tidak sepenuhnya diberikan kepada SDK.
TT_UNKNOWN_ERROR
-3
Terdapat kesalahan sistem yang tidak diketahui.
TT_NETWORK_ERROR
-4
Terdapat kesalahan jaringan.
TT_NETWORK_ERROR_EMPTY
-5
Terdapat kesalahan jaringan. Konten yang dikembalikan adalah string kosong.
TT_NETWORK_ERROR_INVALID
-6
Format nilai yang dikembalikan tidak valid.
TT_PARSE_SRV_CFG_ERROR
-7
Gagal mengurai konfigurasi server.
TT_NETWORK_RET_CODE_ERROR
-8
Gerbang gagal mengembalikan nilai.
TT_APPKEY_EMPTY
-9
Appkey kosong.
TT_PARAMS_ERROR
-10
Terdapat kesalahan parameter lainnya.
TT_FGKEY_ERROR
-11
Terdapat kesalahan perhitungan kunci.
TT_APPKEY_ERROR
-12
Versi SDK tidak sesuai dengan versi appkey.
Nilai Balik: Mengembalikan 0 jika inisialisasi berhasil, atau -1 jika gagal. Tipe data: int.
Kode Contoh:
// Appkey mewakili kunci otentikasi yang ditugaskan oleh platform pelanggan Alibaba Cloud. final String appkey="******"; // Parameter opsional. Anda dapat mengonfigurasi IPv6 dan pelaporan internasional. Map<String, String> options = new HashMap<>(); options.put("IPv6", "0"); // Konfigurasikan sebagai IPv4. //options.put("Intl", "0"); // Laporkan ke daratan Tiongkok. options.put("Intl", "1"); // Laporkan ke wilayah luar daratan Tiongkok. // Laporkan ke situs AS (Barat). //options.put("CustomUrl", "https://cloudauth-device.us-west-1.aliyuncs.com"); //options.put("CustomHost", "cloudauth-device.us-west-1.aliyuncs.com"); // Pengumpulan inisialisasi menunjukkan bahwa informasi perangkat dikumpulkan sekali. Anda dapat memanggil fungsi init lagi untuk menginisialisasi ulang pengumpulan berdasarkan persyaratan bisnis yang berbeda. // Pengumpulan data penuh. int ret = TigerTallyAPI.init(this.getApplicationContext(), appkey, TigerTallyAPI.TT_DEFAULT, options, null); // Tentukan pengumpulan data privasi. Data privasi yang berbeda dapat digabungkan menggunakan "|". int privacyFlag = TigerTallyAPI.TT_NO_BASIC_DATA | TigerTallyAPI.TT_NO_UNIQUE_DATA; int ret = TigerTallyAPI.init(this.getApplicationContext(), appkey, privacyFlag, options, null); // Jangan mengumpulkan bidang privasi. int ret = TigerTallyAPI.init(this.getApplicationContext(), appkey, TigerTallyAPI.TT_NOT_GRANTED, options, null); Log.d("AliSDK", "ret:" + ret);
Data hash.
Antarmuka penandatanganan kustom ini menghitung hash dari data input dan mengembalikan string whash yang dihasilkan sebagai tanda tangan kustom. badan permintaan harus dilewatkan sebagai input untuk permintaan POST, PUT, dan PATCH, sedangkan URL lengkap harus digunakan sebagai input untuk permintaan GET dan DELETE. Selain itu, string whash perlu ditambahkan ke bidang ali_sign_whash di Header permintaan HTTP.
// Jenis permintaan: public enum RequestType { GET, POST, PUT, PATCH, DELETE } /** * Data hash tanda tangan kustom * * @param type Tipe data * @param input Data hash * @return whash */ public static String vmpHash(RequestType type, byte[] input);
Parameter:
type: Tipe data. Tipe data: RequestType. Nilai valid:
GET: Permintaan GET.
POST: Permintaan POST.
PUT: Permintaan PUT.
PATCH: Permintaan PATCH.
DELETE: Permintaan DELETE.
input: Data yang akan ditandatangani. Tipe data: byte[].
Nilai Balik: String whash. Tipe data: String.
Kode Contoh:
// Permintaan GET String url = "https://tigertally.aliyun.com/apptest"; String whash = TigerTallyAPI.vmpHash(TigerTallyAPI.RequestType.GET, url.getBytes()); Log.d("AliSDK", "whash:" + whash); // Permintaan POST String body = "hello world"; String whash = TigerTallyAPI.vmpHash(TigerTallyAPI.RequestType.POST, body.getBytes()); Log.d("AliSDK", "whash:" + whash);Pemanggilan antarmuka ini tidak diperlukan saat menggunakan penandatanganan default. Untuk penandatanganan kustom, antarmuka harus dipanggil untuk verifikasi hash sebelum data ditandatangani.
Tandatangani data.
Metode ini menggunakan teknologi vmp untuk menandatangani data input dan mengembalikan string wtoken untuk otentikasi permintaan.
/** * Penandatanganan data * * @param type Tipe tanda tangan * @param input Data tanda tangan * @return wtoken */ public static String vmpSign(int type, byte[] input);
Parameter:
type: Jenis tanda tangan data. Nilai harus 1. Tipe data: int.
input: Data yang akan ditandatangani. Ini biasanya seluruh requestbody atau whash untuk penandatanganan kustom. Tipe data: byte[].
Nilai Balik: String wtoken. Tipe data: String.
Kode Contoh:
// Konsol dikonfigurasikan dengan penandatanganan default, yang berarti penandatanganan kustom tidak dipilih. String body = "saya adalah badan permintaan, dienkripsi atau tidak!"; String wtoken = TigerTallyAPI.vmpSign(1, body.getBytes("UTF-8")); Log.d("AliSDK", "wToken:" + wtoken); // Konsol dikonfigurasikan dengan penandatanganan kustom. // Permintaan GET. String url = "https://tigertally.aliyun.com/apptest"; String whash = TigerTallyAPI.vmpHash(TigerTallyAPI.RequestType.GET, url.getBytes()); String wtoken = TigerTallyAPI.vmpSign(1, whash.getBytes()); Log.d("AliSDK", "whash:" + whash + ", wtoken:" + wtoken); // Permintaan POST. String body = "hello world"; String whash = TigerTallyAPI.vmpHash(TigerTallyAPI.RequestType.POST, body.getBytes()); String wtoken = TigerTallyAPI.vmpSign(1, whash.getBytes()); Log.d("AliSDK", "whash:" + whash + ", wtoken:" + wtoken);PentingSaat Anda memanggil
vmpHashuntuk penandatanganan kustom, parameter input dari metodevmpSignadalah string whash yang dihasilkan. Selain itu, saat Anda mengonfigurasikan kebijakan anti-bot spesifik skenario untuk aplikasi, nilai dari bidang Custom Signature Field harus disetel ke ali_sign_whash.Saat Anda memanggil
vmpHashuntuk menghasilkan whash untuk permintaan GET, pastikan URL input identik dengan URL akhir yang digunakan dalam permintaan jaringan. Perhatikan khususnya pengkodean URL. Beberapa kerangka kerja secara otomatis melakukan pengkodean URL pada karakter Cina atau parameter.Parameter input dari metode
vmpHashtidak mendukung string kosong. Jika input adalah URL, jalur atau parameter harus ada.Saat Anda memanggil
vmpSign, jika badan permintaan kosong (misalnya, badan permintaan POST atau GET kosong), lewatkan objek null atau nilai byte dari string kosong, seperti "".getBytes("UTF-8").Jika whash atau wtoken adalah salah satu dari string berikut, pengecualian terjadi selama inisialisasi:
Anda harus memanggil init terlebih dahulu: Menunjukkan bahwa metode
initbelum dipanggil.Data masukan harus benar: Menunjukkan bahwa data masukan tidak valid.
you must input correct type: Menunjukkan bahwa tipe input tidak benar.
Lakukan otentikasi dua faktor
Evaluasi hasil.
Periksa bidang cookie dan body di tanggapan untuk menentukan apakah verifikasi sekunder diperlukan. Header mungkin berisi beberapa entri Set-Cookie, yang harus digabungkan ke dalam format cookie sebelum memanggil antarmuka ini.
/** * Evaluasi apakah akan melakukan otentikasi dua faktor * * @param cookie Cookie * @param body Body * @return 0: Lulus 1: Otentikasi dua faktor */ public static int cptCheck(String cookie, String body)Parameter:
cookie: Semua cookie dalam tanggapan permintaan. Tipe data: String.
body: Seluruh body dalam tanggapan permintaan. Tipe data: String.
Nilai Balik: Mengembalikan hasil keputusan. 0 menunjukkan bahwa permintaan berhasil. 1 menunjukkan bahwa otentikasi dua faktor diperlukan. Tipe data: int.
Kode Contoh:
String cookie = "key1=value1;kye2=value2;"; String body = "...."; int recheck = TigerTallyAPI.cptCheck(cookie, body); Log.d("AliSDK", "recheck:" + recheck);
Buat slider.
Buat objek slider berdasarkan hasil yang dikembalikan oleh cptCheck. Objek TTCaptcha menyediakan metode show dan dismiss, yang masing-masing menampilkan dan menyembunyikan jendela slider. TTOption merangkum parameter yang dapat dikonfigurasi untuk slider. TTListener berisi dua status callback untuk slider. Jika Anda memerlukan jendela slider kustom, lewatkan alamat halaman kustom. File HTML lokal dan halaman jarak jauh didukung.
/** * Buat objek slider * * @param activity Aktivitas halaman saat ini * @param option Parameter * @param listener Callback * @return Objek verifikasi slider */ public static TTCaptcha cptCreate(Activity activity, TTOption option, TTListener listener); /** * Objek slider */ public class TTCaptcha { /** * Tampilkan slider */ public void show(); /** * Sembunyikan slider */ public void dismiss(); /** * Dapatkan traceId slider untuk statistik data */ public String getTraceId(); } /** * Parameter slider */ public static class TTOption { // Tentukan apakah akan menyembunyikan slider dengan mengklik area kosong. public boolean cancelable; // Halaman kustom. File HTML lokal dan URL jarak jauh didukung. public String customUri; // Setel bahasa public String language; } /** * Callback slider */ public interface TTListener { /** * Verifikasi berhasil * * @param captcha Objek slider * @param data token, default certifyId */ void success(TTCaptcha captcha, String data); /** * Verifikasi gagal * * @param captcha Objek slider * @param code Kode kesalahan */ void failed(TTCaptcha captcha, String code); }Parameter:
activity: Aktivitas halaman saat ini. Tipe data: Activity.
option: Parameter konfigurasi slider. Tipe data: TTOption.
listener: Status callback slider. Tipe data: TTlistener.
Nilai Balik: Objek slider. Tipe data: TTCaptcha.
Kode Contoh:
TTCaptcha.TTOption option = new TTCaptcha.TTOption(); // option.customUri = "file:///android_asset/ali-tt-captcha-demo.html"; option.language = "cn"; option.cancelable = false; TTCaptcha captcha = TigerTallyAPI.cptCreate(this, option, new TTCaptcha.TTListener() { @Override public void success(TTCaptcha captcha, String data) { Log.d(TAG, "captcha check success:" + data); } @Override public void failed(TTCaptcha captcha, String code) { Log.d(TAG, "captcha check failed:" + code); } }); captcha.show();CatatanOtentikasi gagal menunjukkan bahwa pengecualian terdeteksi setelah pengguna selesai menggeser.
Daftar berikut menjelaskan kode kesalahan:
1001: Verifikasi gagal.
1002: Pengecualian sistem.
1003: Kesalahan parameter.
1005: Verifikasi dibatalkan.
8001: Kesalahan pemanggilan slider.
8002: Data verifikasi slider abnormal.
8003: Pengecualian verifikasi slider internal.
8004: Kesalahan jaringan.