Android (Kotlin)

SDK oficial pushhub-android sobre Firebase Messaging, o integración directa con FCM.

El SDK oficial com.daertech.pushhub:pushhub-android funciona en Android 7.0 (API 24) o superior y se puede usar desde Kotlin o Java. Se apoya en Firebase Messaging y agrega:

  • registro del dispositivo, con cola sin conexión;
  • permiso de Android 13+ y canal;
  • notificaciones con la app abierta, con imagen y botones;
  • aperturas y clics reportados;
  • usuarios, tags y topics.

Requisitos

  • La app registrada en un proyecto de Firebase, con su google-services.json en app/ y el plugin com.google.gms.google-services.
  • La credencial de Firebase subida en PushHub.

Instalación

// app/build.gradle.kts
dependencies {
    implementation("com.daertech.pushhub:pushhub-android:0.1.0")
}

Mientras el SDK no esté en un repositorio Maven público, hay dos opciones:

  • Repositorio local: publícalo con ./gradlew :pushhub:publishReleasePublicationToLocalRepository en sdks/android y agrega maven { url = uri("…/sdks/android/pushhub/build/repo") } a tus repositorios.
  • Código fuente: inclúyelo con includeBuild, como en el ejemplo examples/android.

El SDK trae Firebase Messaging (BoM 35.1.0), su propio FirebaseMessagingService y el permiso POST_NOTIFICATIONS.

Uso

class MiApp : Application() {
    override fun onCreate() {
        super.onCreate()
        PushHub.init(this, PushHubOptions(
            appKey = "pk_live_TU_LLAVE_PUBLICA",                    // solo la llave PUBLICA
            androidChannel = AndroidChannel(id = "general", name = "Avisos generales"),
        ))
        PushHub.addNotificationOpenedListener { n ->
            // n.deepLink, n.actionId (botón tocado), n.data (tus datos)
        }
    }
}

// En una actividad (ComponentActivity), cuando el usuario entienda para qué:
PushHub.requestPermission(this) { estado -> /* GRANTED, DENIED */ }

PushHub.identify("cliente-123")          // al iniciar sesión
PushHub.setTags(mapOf("plan" to "gold"))
PushHub.subscribe("ofertas")
PushHub.pairTestDevice("483920") { ok -> }
PushHub.logout()                         // al cerrar sesión

Las aperturas se detectan solas al reanudarse la actividad. Si tu actividad es singleTop o singleTask, llama a setIntent(intent) en onNewIntent(), o a PushHub.handleIntent(intent).

Las llamadas no esperan red: se guardan en una cola persistente. Se envían cuando hay token y conexión, y se reintentan al volver a la app.

Opciones de PushHubOptions

Opción Por defecto Descripción
appKey — Llave pública pk_live_… o pk_test_…. El SDK rechaza llaves secretas.
appId — Solo si la llave no está limitada a una app.
autoRegister false Pedir el permiso en la primera actividad.
foregroundDisplay true Mostrar las notificaciones con la app abierta.
androidChannel — Canal que el SDK crea; debe coincidir con el canal por defecto de la app en PushHub.
debug false Logs en Logcat (etiqueta PushHub).

Si ya tienes un FirebaseMessagingService

Android entrega los mensajes a un solo servicio. Quita el del SDK en tu manifiesto y llama al SDK desde el tuyo:

<service android:name="com.daertech.pushhub.PushHubMessagingService" tools:node="remove" />
override fun onNewToken(token: String) = PushHub.onNewToken(this, token)
override fun onMessageReceived(message: RemoteMessage) = PushHub.onMessageReceived(this, message)

Icono

El icono pequeño debe ser monocromo, blanco sobre transparente; si no, aparece un cuadro blanco. El SDK usa el de Firebase si lo declaras:

<meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/ic_notification" />
<meta-data android:name="com.google.firebase.messaging.default_notification_channel_id" android:value="general" />

Imágenes y botones

  • Imágenes: PushHub envía la imagen en el campo image de FCM y Android la muestra sola. Con la app abierta, el SDK la descarga y la muestra.
  • Botones: aparecen en las notificaciones que el SDK muestra con la app abierta. Con la app en segundo plano, Android muestra la notificación sin botones.

Installation ID de Firebase

Si activas el modo Installation ID de Firebase en la app, el SDK lo detecta y registra el FID en lugar del token de registro, sin cambios en tu código. Ver Installation ID de Firebase.

Lo que el SDK reporta

Evento Cuándo
received La notificación llega con la app abierta.
opened El usuario toca la notificación.
clicked El usuario toca un botón (incluye actionId).
permission_granted / permission_denied Cambia el permiso.

Sin SDK (REST)

Con Firebase Messaging, registra el token tú mismo con POST /v1/devices, con platform: "android", provider: "fcm" y framework: "native_android". Al abrir, lee _phid y deepLink de intent.extras y reporta opened a /v1/events.