Detección de seguridad: API de detección de Wifi en Kotlin
Tags: android, hmscore, huaweimobileservices, kotlin
Published: 2020-10-05 23:29:54

En el siguiente artículo revisaremos una nueva característica para el Kit de detección de seguridad denominada WifiDetect API.

Esta característica es muy interesante porque con el API podremos verificar las características de WiFi y el router que conectará el dispositivo del usuario, analizando la información de WiFi para evitar ataques (ARP, ataques de intermediarios, ataques de secuestro de DNS y otros tipos de ataques que puede afectar el WiFi que se conectará). Entonces, si algún tipo de ataque afecta la red WiFi al que la aplicación y el usuario se conectarán, la aplicación interrumpirá la conexión o preguntará si el usuario desea continuar conectándose.
Para continuar, explicaremos con un ejemplo de código cómo usar esta función en tu aplicación en Kotlin. Para el primer paso, debemos haber agregado el Kit de detección de seguridad en nuestro proyecto utilizando el proceso de desarrollo común que es el mismo con el que inicializamos otros kits en la consola AppGallery Connect.

![1 RPmQojMJee609UPCuRMrrA](https://dev-to-uploads.s3.amazonaws.com/i/3ho5k6chk2gzzmeunw3r.png)
 
No nos enfocaremos en este proceso, si tienes dudas consulta el siguiente articulo en donde se explica detalladamente el proceso.

[Link](https://developer.huawei.com/consumer/en/doc/HMSCore-Guides-V5/config-agc-0000001050416303-V5)

Después de este paso, deberemos agregar el kit nuestro proyecto de Android Studio siguiendo estos pasos.

[Link](https://developer.huawei.com/consumer/en/doc/HMSCore-Guides-V5/android-integrating-sdk-0000001050180115-V5)

Cuando estes listo y hayas agregado todas las configuraciones relacionadas con al proyecto y la integración del kit de detección de seguridad, debemos agregar los siguientes permisos al AndroidManifest.
```
<!-- Internet Permission -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- Access Network State -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- Access WiFi State -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
```
El siguiente paso es crear la validación principal de la disponibilidad de HMS y, si es correcta, crear una función para usar el estado de Wifi Direct de la siguente manera:

```
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)if (HuaweiApiAvailability.getInstance()
            .isHuaweiMobileServicesAvailable(this) == ConnectionResult.SUCCESS
    ) {
        //Load safety
        setupWifiDetect()
    } else {
        //Prompt to load HMS
    }
}private fun setupWifiDetect() {
    val wifiDetectClient = SafetyDetect.getClient(this@MainActivity)
    val task = wifiDetectClient.wifiDetectStatus
    task.addOnSuccessListener { wifiDetectResponse ->
        val wifiDetectStatus = wifiDetectResponse.wifiDetectStatus/**
         *-1: Failed to obtain the Wi-Fi status.
         * 0: No Wi-Fi is connected.
         * 1: The connected Wi-Fi is secure.
         * 2: The connected Wi-Fi is insecure.
         */Log.e(TAG, "Wifi status $wifiDetectStatus")wifiDetectMessage.text = "Wifi status $wifiDetectStatus"}.addOnFailureListener {
        if (it is ApiException) {
            val apiException = it
            Log.e(
                TAG, "Error " + apiException.statusCode + ":"
                        + SafetyDetectStatusCodes.getStatusCodeString(apiException.statusCode)
                        + ": " + apiException.statusMessage
            )wifiDetectMessage.text =
                "Error " + apiException.statusCode + ":" + SafetyDetectStatusCodes.getStatusCodeString(
                    apiException.statusCode
                ) + ": " + apiException.statusMessage} else {
            Log.e(TAG, "OTHER ERROR: " + it.message)
            wifiDetectMessage.text = "OTHER ERROR: " + it.message
        }
    }
}
```

Tenemos dos listeners OnSuccess y OnFailure, OnSuccess envía el estado de detección de WiFi donde puede obtener el siguiente estado:

-1: no se pudo obtener el estado de WiFi

0: no hay WiFi conectado

1: el WiFi conectado es seguro

2: el WiFi conectado es inseguro

Y en el bloque OnFailure, puede recibir una excepción relacionada con el servicio.

El siguiente enlace contiene todo el ejemplo:
[Link](https://github.com/josevillablanca/huawei-wifidetect-example)

Por el momento , este codigo solo funciona en China pues al momento de la publicacion de este articulo aun no se ha liberado la version para America, pero con esta guía podremos implementar esta función para tu aplicación para mantenerla más segura con esta API con lo que lograremos mantener una seguridad optima en la App.