DEV Community

Cover image for Enviando notificaciones push a dispositivos Huawei
HuaweiDevsLATAM
HuaweiDevsLATAM

Posted on

Enviando notificaciones push a dispositivos Huawei

Cuando escuchamos hablar sobre las notificaciones push, regularmente pensamos en Firebase Cloud Messaging, pero, ¿qué pasa con los dispositivos que vienen sin GMS? Para llegar a los usuarios de Huawei con notificaciones push, podemos usar el Huawei Push Kit.
Con el kit Push, podemos enviar notificaciones push o mensajes de datos a los usuarios de nuestra app desde App Gallery Connect Console o mediante la API Push. En esta publicación, quiero mostrar cómo enviar notificaciones y mensajes de datos con el kit.
Requisitos

  1. Un dispositivo Huawei con conexión a Internet y EMUI 4 o posterior (los dispositivos que no son Huawei también pueden recibir notificaciones instalando el APK principal de HMS, pero la tasa de entrega puede ser menor)
  2. Un proyecto de aplicación en AGC
  3. Habilitar el servicio
  4. Habilitar el API yendo a mis proyectos>Administrar API

0 hRflxc33Ke39ChEB

Habilitar el servicio Push en la sección Mis proyectos>Crecer>Kit de push
0 hRflxc33Ke39ChEB

Integrando el SDK
Agregue el SDK de Push Kit al nivel de aplicación build.gradle
Implementation ‘com.huawei.hms: push: 4.0.2.300’

Crea una clase que extienda desde HmsMessageService, este servicio recibirá el token de inserción y los mensajes de datos.

classMyHuaweiPushService: HmsMessageService() {
    overridefunonNewToken(p0: String?) {
        super.onNewToken(p0)

    }overridefunonMessageReceived(message: RemoteMessage?) {
        if(message!=null){ 
            val map=message.dataOfMap
            for( key in map.keys){
                //explore the KV fields
            }
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Agrega el servicio al Android Manifest

<uses-permissionandroid:name="android.permission.INTERNET" /> <uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permissionandroid:name="android.permission.READ_PHONE_STATE" />  <service     android:name="com.hms.example.dummyapplication.service.MyHuaweiPushService"     android:enabled="true"     android:exported="false">     <intent-filter>         <actionandroid:name="com.huawei.push.action.MESSAGING_EVENT" />     </intent-filter> </service>  <meta-data     android:name="com.huawei.hms.client.appid"     android:value="appid=xxxx">     <!-- Replace the value of xxxx with the actual app ID applied, sourced from Service Details, HUAWEI Developer. --> </meta-data>
Enter fullscreen mode Exit fullscreen mode

Obteniendo el push token

Para enviar mensajes a dispositivos específicos, necesitas conocer el token de inserción del dispositivo, este token es un ID de cliente para el kit de inserción.

Usa un hilo separado para obtener el token de inserción

fungetToken() {
    val tokenThread = Thread {
        try {
            val appId = AGConnectServicesConfig.fromContext(context).getString("client/app_id")
            val pushtoken = HmsInstanceId.getInstance(context).getToken(appId, "HCM")
            if (!TextUtils.isEmpty(pushtoken)) {
                Log.i("GetToken", "push token:$pushtoken")
            }
        } catch (e: Exception) {
            Log.e("Token Exception", "getToken failed, $e")
        }
    }
    tokenThread.run()
}
Enter fullscreen mode Exit fullscreen mode

El token puede cambiar con el tiempo, por lo que se recomienda solicitar un token en cada inicio de la aplicación.

Si no se puede llamar al método getToken, HUAWEI Push Kit almacena en caché automáticamente la solicitud del token y vuelve a llamar al método. Luego se devolverá un token a través del método onNewToken.
También podemos habilitar la inicialización automática, después de configurar esta capacidad, el token aplicado se devuelve a través del método onNewToken ().

Agrega estos metadatos bajo la aplicación en el Android Manifest para habilitar el inicio automático de inserción.

<meta-data
    android:name="push_kit_auto_init_enabled"
    android:value="true" />
Enter fullscreen mode Exit fullscreen mode

Enviando mensajes

Hay 2 tipos de mensajes.

Mensajes de notificación
Mensajes de datos
Enter fullscreen mode Exit fullscreen mode

Puedes enviar mensajes utilizando la consola AGC o enviando una solicitud a la API Push

Enviar mensajes desde la consola

Ve a tu proyecto > Crecimiento > Push Kit y luego hazclic en Agregar notificación
0 hRflxc33Ke39ChEB

Enviando notificaciones
0 hRflxc33Ke39ChEB

Para las notificaciones, podemos editar el contenido y ver una vista previa. Agrega una acción que se realizará cuando el usuario toque la notificación. Escoge entre una de las siguientes opciones:

1.-Abrir aplicación: abre la actividad desde el Home o establecer un deeplink para abrir una actividad específica.
2.-Abrir página web: abre un navegador en la página especificada por la URL.

Si eliges la aplicación abierta, podrás enviar pares de clave-valor personalizados que se entregarán a la aplicación en la intención adicional de la actividad abierta.

Si deseas proporcionar más acciones a tu notificación, puedes agregar botones para realizar una de las siguientes acciones:

  1. Abrir aplicación: abre la aplicación en la página especificada.
  2. Abrir página web: abre la url dada en un navegador.
  3. Borrar: borra la notificación del panel.
  4. Compartir: realiza la acción compartida para el contenido dado. Por ejemplo: compartit el contenido por mensaje instantáneo

Envío de mensajes de datos

Usa este método si deseas activar tu aplicación para realizar una operación específica con los datos. El mensaje activará el método onMessageReceived de tu HmsMessageService y puedes recuperar los datos del objeto RemoteMessage.

overridefunonMessageReceived(message: RemoteMessage?) {
    if(message!=null){
        Log.i("OnNewMessage",message.data)
        val map=message.dataOfMap
        for( key in map.keys){
            Log.e("onNewMessage",map[key]!!)
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Probando

Para verificar el comportamiento de nuestro mensaje, podemos hacer clic en probar efecto y enviar el mensaje a los tokens especificados

0 9-D8e0hFAU-yImUj

Ingresa el token o los tokens y haz click en OK

0 RIsotTU6F3A_a6xd

Cuando estés listo para enviar el mensaje, podrás configurar el alcance de envío para enviar el mensaje a tokens específicos, audiencia de Huawei Analytics, suscriptores de temas o todos sus usuarios.

Para el tiempo de inserción, puedes configurar “ahora” o programar el envío del mensaje.

0 RIsotTU6F3A_a6xd

Haz clic en enviar para enviar tu mensaje o Guardar como borrador para usarlo más tarde.
0 3RhgL_fxFmBng9uG

Request
Host: https://oauth-login.cloud.huawei.com/oauth2/v2/token
Request Method: POST
Request Headers:
'Content-Type': 'application/x-www-form-urlencoded'
Request Body (encoded in urlEncode mode):
grant_type=client_credentials&client_id=YOUR_APP_ID&client_secret=APP_SECRET
Enter fullscreen mode Exit fullscreen mode

Response ejemplo:

HTTP/1.1200 OK
Content-Type: text/html;charset=UTF-8
{"access_token":"CFyJ7eTl8WIPi9603E7Ro9Icy+K0JYe2qVjS8uzwCPltlO0fC7mZ0gzZX9p8CCwAaiU17nyP+N8+ORRzjjk1EA==","expires_in":3600,"token_type":"Bearer"}
Enter fullscreen mode Exit fullscreen mode

Enviando mensajes

Request
Host: https://push-api.cloud.huawei.com/v1/[appid]/messages:send
Request Method: POST
Request Headers:
Content-Type: application/json
Accept: application/json
Authorization: Bearer ACCESS_TOKENRequest Body: body = {         message: {             android: {                 notification: {                     title: title,                     body: message,                     click_action: {                         type: 1,                         intent: "https://dummyapp.com/target?param1=hello&param2=world",                         action: "ACTION_VIEW"                     }                 },                 data: "Data payload in string format"              },             token:["token1","token2"]         } };
Enter fullscreen mode Exit fullscreen mode

Conclusión

Si envías los datos sin un objeto de notificación, el mensaje activará por default el método onMessageReceived.

Si deseas probar el push kit, crear plantillas de notificación o si no tienes tu propio servidor, escoge la consola de inserción.

Si deseas enviar notificaciones generadas dinámicamente, escoge la API

Top comments (0)