Teléfonos Huawei (Push Kit)

Notificaciones en teléfonos Huawei sin servicios de Google, con Huawei Push Kit y la API REST.

Los teléfonos Huawei recientes (desde 2019) no tienen servicios de Google, así que no reciben notificaciones de Firebase (FCM). Para llegar a ellos, Pushtifly envía a través de Huawei Push Kit (HMS). Tu app sigue registrándose con platform: "android"; solo cambia el token y el proveedor.

1. Prepara la app en AppGallery Connect

  1. Entra en AppGallery Connect y abre (o crea) tu proyecto y la app Android con el mismo nombre de paquete.
  2. En Crecimiento → Push Kit, pulsa Habilitar ahora.
  3. En Configuración del proyecto → General, agrega la huella SHA-256 del certificado con que firmas la app (sin ella, el teléfono no entrega token).
  4. Descarga agconnect-services.json y cópialo en app/ de tu proyecto Android.
  5. En la misma página, en Información de la app, copia el Client ID y el Client Secret (no son los de la cuenta de desarrollador ni los del proyecto).

2. Guarda la credencial en Pushtifly

En la app, en Credenciales → Android en teléfonos Huawei (Push Kit), pulsa Agregar Huawei Push Kit, pega el Client ID y el Client Secret y pulsa Guardar.

Pushtifly pide un access token a Huawei y hace un envío de validación (sin entregar nada a ningún teléfono):

Resultado Qué significa
Credencial válida Todo listo.
Huawei rechazó el Client ID o el Client Secret Revisa que sean los de Información de la app, completos.
La app no tiene Push Kit habilitado Habilita Push Kit (paso 1.2) y espera unos minutos.

El Client Secret se guarda cifrado y no vuelve a mostrarse.

3. Obtén el token en la app

Agrega el SDK de Push Kit (com.huawei.hms:push) y el plugin de AppGallery Connect según la guía de Huawei. El token se obtiene con HmsInstanceId.getToken() (fuera del hilo principal) y llega también en HmsMessageService.onNewToken() cuando cambia.

class HuaweiPushService : HmsMessageService() {
    override fun onNewToken(token: String) = Pushtifly.registerHuawei(token)
}

// Al abrir la app, en un hilo de fondo
val appId = AGConnectOptionsBuilder().build(context).getString("client/app_id")
val token = HmsInstanceId.getInstance(context).getToken(appId, "HCM")
if (token.isNotEmpty()) Pushtifly.registerHuawei(token)

¿Tu app funciona en teléfonos con y sin Google? Comprueba qué servicios hay (GoogleApiAvailability o HuaweiApiAvailability) y registra el token del que esté disponible.

4. Registra el dispositivo

El token de Huawei no se distingue por su forma de otros tokens, así que indícalo con provider: "hms":

curl -X POST https://api.pushtifly.com/v1/devices \
  -H "Authorization: Bearer pk_live_TU_LLAVE_PUBLICA" -H "Content-Type: application/json" \
  -d '{"token":"TOKEN_DE_PUSH_KIT","platform":"android","provider":"hms","externalUserId":"usuario-123"}'

Sin provider: "hms", Pushtifly intentaría tratarlo como token de FCM y lo rechazaría (2002). Si la app aún no tiene credencial de Huawei, el dispositivo queda en pending_credential y se activa solo al guardarla.

El resto de la API es igual que en Android: identify, logout, tags, topics y eventos (opened, received).

5. Qué recibe el teléfono

En Pushtifly En Huawei
Título, texto e imagen notification (la imagen debe ser https)
data message.data (texto JSON); llega a la app al tocar la notificación, junto con _phid
deepLink https://… Abre esa dirección
Otro deepLink (o ninguno) Abre la app; el enlace va en los datos
Botones (hasta 3) Botones de Push Kit: con https abren la dirección; si no, abren la app con {"actionId": …}
Canal, color y tag de Android channel_id, color y tag
Prioridad normal importance: NORMAL
ttl android.ttl (máximo 15 días)

Al tocar la notificación, lee _phid de los extras del Intent y repórtalo en POST /v1/events con type: "opened", igual que en Android.

Límites y errores

  • El mensaje no puede superar 4 KB (sin contar el token). Si se pasa, la entrega falla con HMS_80300008.
  • Los envíos a Huawei pueden tardar un poco más que a FCM. Si Huawei aplica control de tráfico, Pushtifly reintenta solo.
  • Errores que verás en la entrega o en la consola de pruebas:
Código Qué pasó Qué hacer
HMS_TOKEN_INVALID El token ya no sirve (app desinstalada o datos borrados). El dispositivo queda inválido. La app registra el token nuevo al abrirse.
HMS_OAUTH_ERROR, OAUTH_REJECTED Huawei rechazó el Client ID o el Client Secret. Vuelve a guardarlos en Credenciales.
HMS_NO_PERMISSION Push Kit no está habilitado para la app. Habilítalo en AppGallery Connect.
HMS_CLIENT_NOT_FOUND El Client ID no corresponde a ninguna app. Copia el Client ID correcto.
HMS_TRAFFIC_CONTROL Demasiados envíos en poco tiempo. Pushtifly reintenta; reparte los envíos masivos en oleadas.

Pruébalo

En Pruebas, pega el token, elige Android Huawei (Push Kit) en «Los tokens pegados son de» y envía. El modo Validar sin enviar también funciona con Huawei.