Protege tu app de instalaciones no oficiales con el SDK del servicio DRM
Tags: android, hmscore, huaweimobileservices
Published: 2020-10-05 23:34:20

Cuándo liberas una app de pago en App Gallery, es claro que buscas alcanzar un gran número de usuarios, después de todo, más usuarios = más compras = más ganancias ¿o no?

Si un usuario compra en instala tu aplicación, puede usar ciertas herramientas para extraer el APK y generar una copia de respaldo, hasta aquí todo bien, pero ¿qué pasa si el usuario decide compartir ese APK con sus amigos? En ese caso, to app de pago se empezara a distribuir de manera gratuita y no oficial.

Para evitar esta situación, puedes integrar el DRM SDK, e invocarlo cada vez que tu app se inicie, de esta forma puedes verificar si un usuario realmente compro tu aplicación.

Requisitos
    1. Un Proyecto de app de pago en App Gallery Connect
    2. Un Proyecto android con el SDK de HMS core y el plugin de AGC

Obteniendo las claves del servicio DRM

Ve a Develop > Earning > Pay Downloads en tu consola de AGC

![1 RPmQojMJee609UPCuRMrrA](https://dev-to-uploads.s3.amazonaws.com/i/rt005s6tz0rus7zy4hqa.png)
Encontraras el DRM Id y el DRM Key, guarda estos datos pues los usaras más Adelante.

Añadiendo el SDK del servicio

Descarga el SDK desde aquí:
[Link](https://obs.cn-north-2.myhwclouds.com/hms-ds-wf/sdk/HwDRM_SDK_2.5.2.300_ADT.zip)

Extrae el contenido y copia el archive jar dentro de tu carpeta “libs”
![1 apdoJBSsxvUB0gB2-Mz1Hw](https://dev-to-uploads.s3.amazonaws.com/i/pfe8v4vwmaghoftlvq35.png)
 
Dentro del SDK también encontraras una carpeta llamada “res”, Si el kit DRM detecta que la app no fue comprada, mostrara un mensaje indicando al usuario que la compre en App Gallery, este mensaje soporta múltiples idiomas incluidos en la carpeta “res”, añade el contenido de esta carpeta a los recursos de tu proyecto para que el SDK funcione adecuadamente.

![1 apdoJBSsxvUB0gB2-Mz1Hw](https://dev-to-uploads.s3.amazonaws.com/i/y4i3yqprti7pamgltskx.png)

Añade los siguientes permisos y registra el dialogo de DRM: 
```
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
 <uses-permission android:name="android.permission.READ_PHONE_STATE" />
 <uses-permission android:name="android.permission.INTERNET" />
<activity

    android:name="com.huawei.android.sdk.drm.DrmDialogActivity"

    android:exported="false"

    android:configChanges="screenSize|orientation|keyboardHidden"

    android:label="@string/app_name"

    android:theme="@android:style/Theme.Translucent" >

    <meta-data

        android:name="hwc-theme"

        android:value="androidhwext:style/Theme.Emui.Translucent" />

</activity>
```
Si tu app usa ofuscación, añade esta línea a tu archivo proguard-rules.pro:
```
-keep class com.huawei.android.sdk.drm.**{*;}
```
Revisando la instalación

Puedes revisar si tu app fue comprada en cualquier momento en cualquiera de las actividades de tu app. Se recomienda hacer la revisión desde tu Launcher Activity, de esa forma nadie que haya instalado tu app de forma no oficial podrá acceder a sus funciones.

Llama a Drm.check() y registra un DrmCheckCallback para obtener el resultado de la revisión.

```
private val DRM_PUBLIC_KEY=" La clave DRM obtenida en la consola "

private val DRM_ID="El Id DRM obtenido en la consola "override fun onCreate(savedInstanceState: Bundle?) {

    super.onCreate(savedInstanceState)

    setContentView(R.layout.activity_main2) 

    Drm.check(

        this, this.packageName, DRM_ID, DRM_PUBLIC_KEY,object :DrmCheckCallback{

            override fun onCheckSuccess() {

                //La app fue comprada en App Gallery

            }



            override fun onCheckFailed() {

                //La app se instaló por otros medios

                //Quizá quieras cerrar tu app aquí

            }

        }

    )

}
```