Probando el API REST de Push Kit
Tags: android, mobile
Published: 2021-03-19 16:29:49

Al interactuar con nuestra comunidad, los sistemas de notificaciones suelen ser bastante útliles para compartir eventos con nuesrtr audiencia. Mediante Push podemos atraer usuarios a abrir la app o traer de vuelta a usuarios inactivos. Sin embargo, hay ocasiones en las que no tenemos oportunidad de generar manualmente un set entero de notificaciones en la consola de AGC para manejar los diferentes temas, usuarios y eventos.

Es imporante mencionar que el proceso de creación de notificaciones es repetitivo, repetitivo, y como todas las tareas repetitivas, este proceso puede automatizarse. Este es el propósito del API REST de Push Kit.
En este artículo daremos nuestros primeros pasos con el API y probaremos la funcionalidad básica como un inicio para continuar haciendo crecer nuestra app.

_Este artículo es una traducción del artículo [Push Kit Server API Usage Testing](https://forums.developer.huawei.com/forumPortal/en/topic/0201334282197450043) publicado originalmente por nprezbucio en el Huawei Developer Forum_

#Requerimientos
Para estas pruebas debemos contar con el SDK de push kit integrado previamente en nuestra app, además de que usaremos Postman como una herramienta de pruebas para enviar las peticiones al servidor. También tendremos que autenticarnos con la plaaforma OAUTH de Huawei para obtener las credenciales necesarias para interactuar con el API REST de Push Kit.

#Desarrollo
Lo primero que debemos hacer es obtener el App Id y App Secret de nuestra app para poder autenticarnos contra el servicio OAUTH y obtener un token de acceso al API de Push.

Usaremos estos datos para enviar una petición HTTP POST al siguiente Host
```
https://oauth-login.cloud.huawei.com/oauth2/v3/token
```

A continuación se muestran los detalles de la petición
```
POST /oauth2/v3/token HTTP/1.1
Host: oauth-login.cloud.huawei.com
Content-Type: application/x-www-form-urlencoded
 
grant_type=client_credentials&
client_id=<Client ID>&
client_secret=<Client secret>
```

En este ejemplo usaremos una herramienta que nos simplificará el proceso. Usando la App de Postman seremos capaces de generar la solicitud con las especificaciones previas. Ajustaremos el tipo de solicitud en POST y el body en "x-www-form-urlencoded", aquí agregaremos nuestros 3 parámetros.

![Alt Text](https://cdn-images-1.medium.com/max/1600/1*S4HXYxqUQ6r7S96s_86vjw.png)

Esto nos devolverá una respuesta similar a la siguiente:

```
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
 
{
  "access_token": "<Returned access token>",
  "expires_in": 3600,
  "token_type": "Bearer"
}
```

El dato más importante es en access_token, este valor nos brindará acceso al API de Push. Este token tiene un periodo de expiración, si esto sucede, debemos realizar una nueva solicitud para refrescarlo.

El siguiente paso es invocar directamente el API de Push Notifications, el Host es el siguiente (reemplaza el campo [appid] por tu propio appId):

```
https://push-api.cloud.huawei.com/v1/[appid]/messages:send
```

Una vez obengamos el Access Token, debemos agregarlo en la pestaña "Authorization" como Bearer Token.

![Alt Text](https://cdn-images-1.medium.com/max/1600/1*S4HXYxqUQ6r7S96s_86vjw.png)

El siguiente paso es construir el request body en formato JSON configurando los detalles de nuestra notificación, las opciones son muy variadas y puedes encontrar los detalles de la definición del API aquí.

Cambiaremos a la pestaña "Body" y marcaremos el radio button en raw, desde aquí editaremos el cuerpo de nuestra solicitud con los detalles de nuestra notificación como se muestra a continuación.

```
{
    "validate_only": false,
    "message": {
        "notification": {
            "title": "11",
            "body": "11",
            "notify_icon": "https://res.vmallres.com/pimages//common/config/logo/SXppnESYv4K11DBxDFc2.png"
        },
        "android": {
            "collapse_key": -1,
            "urgency": "NORMAL",
            "category": "PLAY_VOICE",
            "ttl": "1448s",
            "bi_tag": "Trump",
            "fast_app_target": 1,
            "notification": {
                "image": "https://res.vmallres.com/pimages//common/config/logo/SXppnESYv4K11DBxDFc2.png",
                "icon": "/raw/ic_launcher2",
                "color": "#AACCDD",
                "sound": "/raw/shake",
                "default_sound": false,
                "importance": "NORMAL",
                "click_action": {
                    "type": 1,
                    "intent": "pushscheme://com.huawei.hms.hmsdemo/deeplink?#Intent;i.isFeed=1;S.feedDocId=0LauP4X6;end",
                    "url": "https://www.vmall.com"
                },
                "body_loc_key": "demo_title_new2",
                "body_loc_args": [
                    "Boy",
                    "Dog",
                    "ff"
                ],
                "title_loc_key": "demo_title_new2",
                "title_loc_args": [
                    "Girl",
                    "Cat",
                    "tiger"
                ],
                "channel_id": "HMSTestDemo",
                "auto_clear": 300000,
                "notify_summary": "Some Summary",
                "style": 0,
                "big_title": "the big title",
                "big_body": "the big body",
                "notify_id": 486,
                "group": "Espace",
                "badge": {
                    "add_num": 1,
                    "class": "com.huawei.demo.push.HuaweiPushApiExample"
                },
                "foreground_show": false,
                "ticker": "I am a ticker",
                "auto_cancel": true,
                "when": "2014-10-02T15:01:23.045123456Z",
                "local_only": false,
                "use_default_vibrate": false,
                "use_default_light": false,
                "visibility": "PUBLIC",
                "vibrate_config": [
                    "1",
                    "3"
                ],
                "light_settings": {
                    "color": {
                        "alpha": 0,
                        "red": 0,
                        "green": 1,
                        "blue": 0.1
                    },
                    "light_on_duration": "3.5",
                    "light_off_duration": "5S"
                }
            }
        },
        "token": [
            "token1"
        ]
    }
}
```
Por último sólo nos queda enviar la petición y esperar a que la notificación llegue a nuestro dispositivo.