Integra Willy Push nella tua app Android. Tutte le push sono cifrate con chiavi generate sul device. Su Enterprise puoi aggiungere la firma HMAC per autenticare ogni richiesta API.
| Requisito | Dettaglio |
|---|---|
| Android minimo | API 21 (Android 5.0 Lollipop) |
| Target SDK | API 34+ consigliato |
| Linguaggio | Kotlin (consigliato) o Java |
| Firebase | Progetto Firebase con FCM configurato |
| Piano Willy Push | Qualsiasi piano (Starter, Pro, Enterprise) |
| Gradle | AGP 7.0+ con Gradle 7.x+ |
hmacSecret autentica il device e impedisce registrazioni non autorizzate.
Aggiungi nel build.gradle del modulo app:
// build.gradle (Module: app) dependencies { implementation 'it.willypush:android-sdk:2.0.0' implementation 'com.google.firebase:firebase-messaging:23.4.0' }
Assicurati di avere il repository Maven Willy Push nel tuo settings.gradle:
dependencyResolutionManagement { repositories { google() mavenCentral() maven { url 'https://maven.willypush.it/releases' } } }
Se preferisci, scarica il SDK e aggiungilo manualmente:
willy-push-sdk-2.0.0.aar nella cartella app/libs/build.gradle:dependencies { implementation files('libs/willy-push-sdk-2.0.0.aar') implementation 'com.google.firebase:firebase-messaging:23.4.0' }
Inizializza il SDK nella tua classe Application o nella MainActivity. Su tutti i piani le push sono cifrate E2EE. Per Enterprise aggiungi hmacSecret per firmare le richieste.
import it.willypush.sdk.WillyPush import it.willypush.sdk.WillyConfig class MyApp : Application() { override fun onCreate() { super.onCreate() WillyPush.init(this, WillyConfig.Builder() .domain("TUO_DOMINIO") .tags("app:android", "role:customer") .promptDelay(3) .build() ) } }
class MyApp : Application() { override fun onCreate() { super.onCreate() WillyPush.init(this, WillyConfig.Builder() .domain("TUO_DOMINIO") .hmacSecret("LA_TUA_HMAC_SECRET") // Enterprise: firma ogni richiesta API .tags("app:android", "role:customer") .promptDelay(3) .build() ) } }
import it.willypush.sdk.WillyPush; import it.willypush.sdk.WillyConfig; public class MyApp extends Application { @Override public void onCreate() { super.onCreate(); WillyPush.init(this, new WillyConfig.Builder() .domain("TUO_DOMINIO") // .hmacSecret("...") ← solo Enterprise .tags("app:android", "role:customer") .promptDelay(3) .build() ); } }
| Parametro | Tipo | Default | Descrizione |
|---|---|---|---|
domain | String | — | Obbligatorio. Il dominio del tuo piano Willy Push |
hmacSecret | String | null | Solo Enterprise. Secret HMAC per firmare ogni richiesta API. Se omesso, la registrazione avviene senza firma |
tags | String... | [] | Tag iniziali per la segmentazione (ruolo, categoria, città, piattaforma...) |
promptDelay | Int | 0 | Secondi prima di richiedere il permesso notifiche (Android 13+) |
autoRegister | Boolean | true | Registra automaticamente il device su Willy |
debug | Boolean | false | Abilita log dettagliati in Logcat |
Con autoRegister: true (default), il SDK gestisce automaticamente tutto il flusso E2EE.
Token FCM — Il SDK recupera il token push del dispositivo da Firebase Cloud Messaging
Chiavi E2EE — Genera una coppia di chiavi (pubblica + privata) e le salva nel KeyStore Android
Segmentazione — Associa i tag configurati (ruolo, categoria, piattaforma) al device
Registrazione API — Invia token + chiave pubblica + tag alle API Willy. Su Enterprise la richiesta viene firmata con HMAC
Push cifrata — Willy cifra ogni push con la chiave pubblica del device. Solo quel telefono può leggerla
Decrypt locale — Il SDK decripta il contenuto con la chiave privata e lo consegna all'app
hmacSecret, il SDK firma automaticamente ogni richiesta API (registrazione, aggiornamento tag, eventi) con HMAC-SHA256. Questo impedisce registrazioni non autorizzate e garantisce che solo la tua app possa comunicare con il tuo account Willy.
autoRegister(false), puoi controllare il momento esatto della registrazione:
// Registra quando vuoi, ad esempio dopo il login WillyPush.register(object : WillyCallback { override fun onSuccess(deviceId: String) { // Device registrato con successo } override fun onError(error: WillyError) { // Gestisci l'errore } })
Crea un service che estende WillyPushService. Il SDK riceve la push cifrata, la decripta con la chiave privata del device e chiama onDecryptedMessage con il contenuto in chiaro.
import it.willypush.sdk.WillyPushService import it.willypush.sdk.WillyPayload class MyPushService : WillyPushService() { override fun onDecryptedMessage(payload: WillyPayload) { // Il contenuto è già decriptato dal SDK. // payload.title → titolo della notifica // payload.body → corpo del messaggio // payload.data → Map<String, String> dati extra // payload.image → URL immagine (opzionale) showNotification(payload) // metodo helper del SDK } override fun onNotificationClicked(payload: WillyPayload) { // L'utente ha toccato la notifica. // Naviga alla schermata giusta. val deepLink = payload.data["url"] // startActivity(...) } }
import it.willypush.sdk.WillyPushService; import it.willypush.sdk.WillyPayload; public class MyPushService extends WillyPushService { @Override public void onDecryptedMessage(WillyPayload payload) { showNotification(payload); } @Override public void onNotificationClicked(WillyPayload payload) { String deepLink = payload.getData().get("url"); } }
onMessageReceived() di Firebase direttamente. Il SDK lo gestisce internamente per eseguire il decrypt E2EE. Usa sempre onDecryptedMessage().
Aggiungi il tuo service nel AndroidManifest.xml:
<!-- AndroidManifest.xml --> <application> <!-- Il tuo push service --> <service android:name=".MyPushService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service> <!-- Application class (se usi classe custom) --> <!-- android:name=".MyApp" --> </application> <!-- Android 13+: permesso notifiche runtime --> <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
POST_NOTIFICATIONS a runtime, rispettando il promptDelay configurato. Se preferisci gestirla tu, imposta autoPrompt(false) nella config.
I tag permettono di segmentare gli utenti per creare campagne mirate dalla dashboard Willy Push.
// Aggiungi tag in qualsiasi momento WillyPush.addTags("categoria:pizza", "citta:roma", "piano:premium") // Utile dopo il login WillyPush.addTags("role:customer", "user_id:12345")
WillyPush.removeTags("role:guest", "categoria:pizza")
// Rimuove tutti i tag precedenti e imposta solo questi WillyPush.setTags("role:admin", "app:android")
val tags: List<String> = WillyPush.getTags() // ["role:customer", "citta:roma", "app:android"]
| Caso d'uso | Tag |
|---|---|
| Utente loggato vs guest | role:customer / role:guest |
| Città dell'utente | citta:roma, citta:milano |
| Categoria preferita | cat:pizza, cat:sushi |
| Piano/abbonamento | piano:free, piano:premium |
| Lingua | lang:it, lang:en |
| Piattaforma | app:android |
Se la tua app ha un e-commerce, puoi tracciare eventi per campagne automatiche:
WillyPush.trackEvent("product_view", mapOf( "productId" to "SKU-123", "productName" to "Pizza Margherita", "price" to "8.50", "category" to "pizza" ))
WillyPush.trackEvent("cart_abandoned", mapOf( "cartValue" to "32.00", "items" to "3" ))
WillyPush.trackEvent("purchase_completed", mapOf( "orderId" to "ORD-456", "total" to "32.00", "items" to "3" ))
cart_abandoned con uno sconto personalizzato.
Il SDK gestisce automaticamente i seguenti scenari:
| Evento | Comportamento SDK |
|---|---|
| Token FCM cambia | Re-registra automaticamente su Willy con il nuovo token |
| Chiave E2EE scade | Genera nuova coppia e aggiorna la chiave pubblica su Willy |
| App aggiornata | Verifica la registrazione e aggiorna se necessario |
| App reinstallata | Nuova registrazione completa (nuovo device ID) |
| Permesso revocato | Notifica Willy di disattivare il device |
// Quando l'utente fa logout: rimuovi i tag personali WillyPush.removeTags("role:customer", "user_id:12345") WillyPush.addTags("role:guest") // Per cancellare completamente il device da Willy: WillyPush.unregister()
WillyConfig.Builder() .domain("TUO_DOMINIO") .debug(true) // log dettagliati in Logcat .build()
Filtra i log in Logcat con il tag WillyPush:
adb logcat -s WillyPush
val isRegistered = WillyPush.isRegistered() val deviceId = WillyPush.getDeviceId() val tags = WillyPush.getTags()
app:android| Metodo | Descrizione |
|---|---|
WillyPush.init(context, config) | Inizializza il SDK con la configurazione |
WillyPush.register(callback?) | Registra il device su Willy (automatico se autoRegister) |
WillyPush.unregister() | Cancella il device da Willy |
WillyPush.addTags(vararg tags) | Aggiunge tag al device |
WillyPush.removeTags(vararg tags) | Rimuove tag dal device |
WillyPush.setTags(vararg tags) | Sostituisce tutti i tag con quelli specificati |
WillyPush.getTags(): List<String> | Restituisce i tag attuali |
WillyPush.trackEvent(name, data) | Traccia un evento e-commerce/custom |
WillyPush.isRegistered(): Boolean | Verifica se il device è registrato |
WillyPush.getDeviceId(): String? | Restituisce l'ID device Willy |
Si. Il SDK non ha dipendenze da View o XML. L'inizializzazione avviene in Application, la ricezione nel service. Puoi usare qualsiasi architettura UI.
Su tutti i piani le push sono cifrate E2EE: il device genera le chiavi, Willy cifra, il device decripta. Il codice è identico.
La differenza è che su Enterprise puoi aggiungere hmacSecret per firmare ogni richiesta API con HMAC-SHA256. Questo aggiunge un livello di sicurezza extra: impedisce registrazioni non autorizzate e garantisce che solo la tua app possa comunicare con il tuo account.
Si. Su Starter e Pro non serve. Le push sono comunque cifrate E2EE. L'HMAC è un livello aggiuntivo disponibile su Enterprise.
Il SDK pesa meno di 120 KB dopo ProGuard/R8. Non include dipendenze pesanti oltre a Firebase Messaging (che probabilmente hai già).
Si. Il SDK è compatibile con FCM API v1 e v2. Non serve configurazione aggiuntiva.
Il SDK Android è nativo. Per un progetto KMP, aggiungilo nel modulo Android come dipendenza specifica della piattaforma.
Al primo avvio dopo l'aggiornamento, il SDK si registra automaticamente. Gli utenti esistenti inizieranno a ricevere push senza fare nulla. Puoi distinguerli con tag migration:v2.
Scarica il SDK, segui la guida e in meno di 15 minuti la tua app Android riceve push cifrate E2EE su qualsiasi piano.