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
- Entra en AppGallery Connect y abre (o crea) tu proyecto y la app Android con el mismo nombre de paquete.
- En Crecimiento → Push Kit, pulsa Habilitar ahora.
- 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).
- Descarga
agconnect-services.jsony cópialo enapp/de tu proyecto Android. - 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.