Le SDK Device Fraud Detection collecte les empreintes numériques des appareils Android afin d'identifier les risques liés aux appareils. Cette rubrique décrit le processus complet d'intégration, depuis la configuration des autorisations et l'importation des dépendances jusqu'aux appels d'initialisation et à l'obtention du jeton, et fournit des exemples de code ainsi que des solutions aux problèmes courants.
Remarques relatives à l'utilisation
Le SDK Device Fraud Detection fonctionne sur Android 4.4 et versions ultérieures (minSdkVersion 19 ou supérieur).
Le SDK Android présente les limites suivantes :
Le débogage sur émulateur n'est pas pris en charge.
Seuls les appareils mobiles intelligents (téléphones ou tablettes) exécutant Android 4.4 ou une version ultérieure sont pris en charge.
Les architectures arm, armv7 et arm64 sont actuellement prises en charge.
Prérequis
Afin de respecter les obligations de conformité en matière de confidentialité liées à l'intégration de SDK tiers et de réduire les risques de violation de la vie privée, utilisez la dernière version du produit publiée sur le centre de documentation Alibaba Cloud. Avant d'utiliser Device Fraud Detection, prenez connaissance des réglementations relatives au traitement des informations personnelles et de la Politique de confidentialité du SDK Fraud Detection, et intégrez le SDK conformément aux directives de conformité du SDK.
Autorisations
Le SDK nécessite les autorisations suivantes pour améliorer la détection de fraude :
|
Autorisation |
Obligatoire |
Description |
|
android.permission.INTERNET |
Oui |
Permet au SDK d'accéder à Internet. |
|
android.permission.ACCESS_NETWORK_STATE |
Oui |
Utilisé pour obtenir l'état du réseau de l'appareil. |
|
android.permission.READ_PHONE_STATE |
Non (recommandé) |
Ces autorisations doivent être demandées dynamiquement au moment de l'exécution sur Android 6.0 et versions ultérieures. Après avoir activé ces autorisations, assurez-vous que votre application les a obtenues avant d'intégrer le SDK et d'appeler la méthode d'initialisation initWithOptions. |
|
android.permission.WRITE_EXTERNAL_STORAGE |
Non (recommandé) |
|
|
android.permission.READ_EXTERNAL_STORAGE |
Non (recommandé) |
Configuration des dépendances
Téléchargez le SDK Android et extrayez-le. Le SDK est distribué sous la forme d'un package .aar Android standard.
Un fichier .so à architecture unique pèse environ 2,5 Mo.
Le SDK Device Fraud Detection intègre des mécanismes robustes de protection du code et de chiffrement des données, ce qui explique la taille relativement importante du package.
Copiez le fichier .aar extrait dans le répertoire libs de votre projet et ajoutez la dépendance suivante au fichier build.gradle de votre application :
// Device Fraud Detection SDK
implementation files('libs/Android-AliyunDevice-<version>.aar')
Configuration de l'obfuscation des interfaces (important)
Si votre projet utilise l'obfuscation du code, ajoutez les règles suivantes au fichier proguard-rules.pro de votre application afin d'éviter que les interfaces ne soient obfusquées, ce qui pourrait entraîner un dysfonctionnement.
-keep class net.security.device.api. {*;}
-dontwarn net.security.device.api.
Appeler le SDK
Une fois les configurations précédentes effectuées, finalisez l'intégration côté client en suivant ces trois étapes :
Initialisation (initWithOptions)
Obtention du jeton client (getDeviceToken)
Envoi du jeton à votre serveur métier
1. Initialisation (initWithOptions)
Cette méthode finalise l'initialisation du SDK et la collecte des informations. Lors de l'utilisation de Fraud Detection, appelez-la aussi tôt que possible tout en respectant les exigences de conformité. Un seul appel par lancement de l'application est nécessaire.
Prototype de la fonction
public interface SecurityInitListener {
// code indicates the API call status code
void onInitFinish(int code);
}
public void initWithOptions(Context ctx,
String appKey,
Map<String, String> options,
SecurityInitListener securityInitListener);
-
Paramètres
ctx : le contexte d'application actuel ou le contexte d'activité.
appKey : utilisé pour identifier l'utilisateur. Vous pouvez en faire la demande dans la section Device App Management de la console Alibaba Cloud.
options : paramètres optionnels de collecte d'informations. La valeur par défaut est null. Les options disponibles sont les suivantes.
securityInitListener : le rappel d'initialisation. Vous pouvez utiliser ce rappel pour vérifier si l'initialisation a réussi. Valeur par défaut : null. Pour les valeurs valides du champ code, consultez les valeurs de retour d'état.
Champ
Description
Exemple
IPv6
Indique s'il faut utiliser un domaine IPv6 pour signaler les informations de l'appareil. 0 (par défaut) : utilise un domaine IPv4. 1 : utilise un domaine IPv6.
"0"
CustomUrl
Définit le nom de domaine du serveur de rapport de données. Utilisé lors du rapport vers un site spécifique. Aucune configuration n'est requise par défaut.
"https://cloudauth-device.aliyuncs.com"
CustomHost
Définit l'hôte du serveur de rapport de données. Doit être utilisé conjointement avec CustomUrl. Ni CustomHost ni CustomUrl ne doivent être définis par défaut.
"cloudauth-device.aliyuncs.com"
DataType
Définit les types de données d'appareil à ne pas collecter. Vide par défaut (recommandé), ce qui signifie que toutes les données sont collectées. Les valeurs configurables sont répertoriées dans le tableau suivant.
Sélection unique : NO_UNIQUE_DEVICE_DATA Sélection multiple : NO_UNIQUE_DEVICE_DATA
NO_IDENTIFY_DEVICE_DATA
Description du paramètre DataType
Type de données collectées
Description
Détails des champs d'informations de l'appareil
NO_UNIQUE_DEVICE_DATA
Identifiants uniques d'appareil réinitialisables
Inclut : Open Anonymous Device Identifier (OAID), Google Advertising ID, Android ID.
NO_IDENTIFY_DEVICE_DATA
Identifiants uniques d'appareil non réinitialisables
Inclut : International Mobile Equipment Identity (IMEI), International Mobile Subscriber Identity (IMSI), SimSerial, BuildSerial (SN), adresse MAC.
NO_BASIC_DEVICE_DATA
Informations de base sur l'appareil
Inclut : version du système d'exploitation, modèle de l'appareil, résolution de l'écran.
NO_EXTRA_DEVICE_DATA
Informations étendues sur l'appareil
Inclut : liste des applications du marché noir/gris, adresse IP du réseau local (LAN), adresse IP DNS, informations Wi-Fi connectées (SSID, BSSID), liste des Wi-Fi à proximité.
Description des paramètres CustomUrl et CustomHost
Pour effectuer un rapport vers un site spécifique, définissez CustomUrl et CustomHost sur la région correspondante. Aucune configuration n'est requise par défaut.
Région
Adresse
Singapour (par défaut)
CustomUrl : https://cloudauth-device.ap-southeast-1.aliyuncs.com CustomHost : cloudauth-device.ap-southeast-1.aliyuncs.com
Chine (Hong Kong)
CustomUrl : https://cloudauth-device.cn-hongkong.aliyuncs.com CustomHost : cloudauth-device.cn-hongkong.aliyuncs.com
Allemagne
CustomUrl : https://cloudauth-device.eu-central-1.aliyuncs.com CustomHost : cloudauth-device.eu-central-1.aliyuncs.com
États-Unis
CustomUrl : https://cloudauth-device.us-west-1.aliyuncs.com CustomHost : cloudauth-device.us-west-1.aliyuncs.com
Exemple
public class CustomApplication extends Application {
// Obtain this after creating an application in Device App Management of the Alibaba Cloud console
private static String appKey = "<Obtain after creating an application in the console>";
@Override
public void onCreate() {
super.onCreate();
Map<String, String> options = new HashMap<>();
options.put("IPv6", "0"); // Set to IPv4. Change to "1" to use IPv6.
// Add a privacy data collection switch. For multiple selections, use | for bitwise OR, then convert to a string.
//options.put("DataType", String.valueOf(NO_UNIQUE_DEVICE_DATA | NO_IDENTIFY_DEVICE_DATA));
// Set a custom data reporting region (not required by default; used only for specific sites)
// options.put("CustomUrl", "https://cloudauth-device.aliyuncs.com");
// options.put("CustomHost", "cloudauth-device.aliyuncs.com");
// Method 1: Standard call (recommended when the initialization result is not concerned)
SecurityDevice.getInstance().initWithOptions(this, appKey, options, null);
// Method 2: Callback call (used when the initialization result needs to be monitored)
SecurityDevice.getInstance().initWithOptions(this, appKey, options, new SecurityInitListener() {
@Override
public void onInitFinish(int code) {
if (SecurityCode.SC_SUCCESS != code) {
Log.d("AliyunDeviceRisk", "Initialization failed. Code=" + code);
} else {
Log.d("AliyunDeviceRisk", "Initialization succeeded");
}
}
});
}
}
2. Obtenir le jeton client (getDeviceToken)
Obtenez le jeton client et signalez-le à votre serveur métier. Ensuite, obtenez les informations sur les risques liés à l'appareil via l'intégration API côté serveur.
Assurez-vous que l'intervalle entre l'appel à l'interface
initWithOptionset l'interfacegetDeviceTokenest d'au moins 3 secondes.Lors de l'appel à
getDeviceToken, nous vous recommandons de transmettre un bizId pour associer le jeton actuel à un ID unique métier. Lors de la consultation des résultats sur le serveur, transmettez le même ID afin de garantir la cohérence entre le bizId transmis par le client et l'ID transmis par le serveur, ce qui permet de vérifier les risques de falsification du jeton.Nous vous recommandons d'appeler l'interface getDeviceToken sur un
thread secondairede l'application afin d'éviter les plantages pouvant être causés par le temps de traitement de l'appel à l'interface.
Prototype de la fonction
public SecurityToken getDeviceToken();
// Recommended: pass bizId to associate the business ID with the deviceToken
public SecurityToken getDeviceToken(String bizId)
public class SecurityToken {
// API call status code
public int code;
// Token string used to query results on the server side.
public String token;
}
Dans les scénarios où les conditions réseau sont bonnes, la chaîne du jeton fait environ 600 octets. Dans les scénarios où les conditions réseau sont mauvaises, la longueur renvoyée est d'environ 2,5 Ko et contient un identifiant spécial :
International : réseau connecté « U0dfTkxxxx », réseau faible « U0dfUFxxxx » ;
Si un grand nombre de jetons longs apparaissent dans votre activité métier :
Vérifiez d'abord que le réseau du client est connecté.
Assurez-vous ensuite que l'intervalle entre l'appel à l'interface
initWithOptionsdu SDK et l'interfacegetDeviceTokenest d'au moins 3 secondes.
Exemple
// Recommended to call on a non-main thread to avoid blocking the UI and causing ANR
new Thread() {
@Override
public void run() {
// Recommended: pass bizId to bind the token with the business ID.
// Pass the same bizId when querying results on the server to verify whether the token has been tampered with.
String bizId = "1234567890abcdef1234567890ab";
SecurityToken deviceToken = SecurityDevice.getInstance().getDeviceToken(bizId);
if(null != deviceToken){
if(SecurityCode.SC_SUCCESS == deviceToken.code){
Log.d("AliyunDevice", "token: " + deviceToken.token);
} else {
Log.e("AliyunDevice", "getDeviceToken error, code: " + deviceToken.code);
}
} else {
Log.e("AliyunDevice", "getDeviceToken is null.");
}
}
}.start();
3. Envoyer le jeton à votre serveur métier
Après avoir obtenu avec succès le deviceToken, transmettez le deviceToken en tant que paramètre à votre serveur métier. Le serveur appelle ensuite l'API Alibaba Cloud Device Fraud Detection, transmet le deviceToken, puis interroge et vérifie les informations sur les risques liés à l'appareil.
Valeurs de retour d'état
|
SecurityCode |
Code |
Description |
|
SC_SUCCESS |
10000 |
L'initialisation du SDK a réussi. |
|
SC_NOT_INIT |
10001 |
Le SDK n'est pas initialisé. |
|
SC_NOT_PERMISSION |
10002 |
Les autorisations Android de base requises par le SDK ne sont pas toutes accordées. |
|
SC_UNKNOWN_ERROR |
10003 |
Erreur système inconnue. |
|
SC_NETWORK_ERROR |
10004 |
Erreur réseau. |
|
SC_NETWORK_ERROR_EMPTY |
10005 |
Erreur réseau. Le contenu renvoyé est vide. |
|
SC_NETWORK_ERROR_INVALID |
10006 |
Le format de la réponse réseau n'est pas valide. |
|
SC_PARSE_SRV_CFG_ERROR |
10007 |
Échec de l'analyse de la configuration du serveur. |
|
SC_NETWORK_RET_CODE_ERROR |
10008 |
La passerelle a renvoyé un échec. |
|
SC_APPKEY_EMPTY |
10009 |
AppKey est vide. |
|
SC_PARAMS_ERROR |
10010 |
Autres erreurs de paramètres. |
|
SC_FGKEY_ERROR |
10011 |
Erreur de calcul de la clé. |
|
SC_APPKEY_ERROR |
10012 |
La version du SDK ne correspond pas à la version d'AppKey. |
Exemple de code complet
import net.security.device.api.SecurityDevice;
import net.security.device.api.SecurityInitListener;
import net.security.device.api.SecurityToken;
import net.security.device.api.SecurityCode;
import static net.security.device.api.SecurityDevice.NO_EXTRA_DEVICE_DATA;
public class MainActivity extends AppCompatActivity {
// Obtain this after creating an application in Device App Management of the Alibaba Cloud console
private static String appKey = "<Obtain after creating an application in the console>";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
doStandard();
}
private void doStandard() {
// Step 1: Initialize the SDK. This is an asynchronous method.
// Call only once during the entire app lifecycle. We recommend that you call it in Application.onCreate().
doInit();
// Do not call getDeviceToken synchronously right after initialization. If initialization has not finished, a downgraded deviceToken is returned.
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// Step 2: Obtain the DeviceToken
// The interval between initWithOptions and getDeviceToken must be at least 2 seconds (at least 3 seconds for international sites)
// This example demonstrates calling in a child thread to avoid blocking the main thread.
new Thread() {
@Override
public void run() {
doGetToken();
}
}.start();
}
/**
* Initialize the SDK and collect device information
*/
private void doInit() {
Map<String, String> options = new HashMap<>();
options.put("IPv6", "0"); // Set to IPv4. Change to "1" to use IPv6.
// Add a privacy data collection switch. No configuration is required by default. For multiple selections, use | for bitwise OR, then convert to a string.
//options.put("DataType", String.valueOf(NO_UNIQUE_DEVICE_DATA | NO_IDENTIFY_DEVICE_DATA));
SecurityDevice.getInstance().initWithOptions(this, appKey, options, null);
}
/**
* Obtain the DeviceToken. This must be called on a non-main thread.
*/
private void doGetToken() {
// Pass bizId to bind the token with the business ID. Pass the same bizId on the server when querying results to verify anti-tampering.
String bizId = "1234567890abcdef1234567890ab";
SecurityToken deviceToken = SecurityDevice.getInstance().getDeviceToken(bizId);
if (null == deviceToken) {
Log.e("AliyunDevice", "deviceToken is null");
} else if (SecurityCode.SC_SUCCESS != deviceToken.code) {
Log.e("AliyunDevice", "Failed to obtain token, code: " + deviceToken.code);
} else {
Log.d("AliyunDevice", "Token obtained successfully, token: " + deviceToken.token);
// Step 3: Pass deviceToken.token to your business server, which then calls the Fraud Detection API
}
}
}
Appeler l'API Device Fraud Detection
Transmettez le deviceToken et d'autres paramètres, et envoyez une requête à l'interface de l'API Fraud Detection pour la détection en vous référant à l'article sur l'intégration de l'API côté serveur.
FAQ
Pour les questions fréquemment posées concernant le SDK Device Fraud Detection, consultez la FAQ.