Tous les produits
Search
Centre de documentation

Fraud Detection:Intégrer le SDK de détection de fraude pour Android

Dernière mise à jour :Aug 26, 2026

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.

    Important
    • Assurez-vous que l'intervalle entre l'appel à l'interface initWithOptions et l'interface getDeviceToken est 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 secondaire de 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;
    }
    
    Important

    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 initWithOptions du SDK et l'interface getDeviceToken est 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.