Inizia

Risoluzione dei problemi

Inizia attivando i log di debug: dicono esattamente cosa ha fatto l’SDK e perché. Vedi Log di debug. Cerca il tag Unolink in Logcat, o [Unolink] nella console di Xcode.

Nella dashboard non compare nulla

  • Attiva Includi dispositivi di test in Funnel o Percorsi. Le build di debug sono dispositivi di test e sono nascoste per impostazione predefinita.
  • Verifica che configure venga eseguito. Va chiamato una sola volta, presto: Application.onCreate() su Android, l’init() della App @main su iOS, il layout principale in React Native, main() in Flutter.
  • Invia subito gli eventi. Gli eventi partono ogni 15 secondi mentre l’app è aperta, e quando va in background. Premi Home, oppure chiama flush().
  • Controlla la rete. Offline, gli eventi aspettano sul dispositivo e vengono inviati appena la rete torna.

"Invalid SDK key (401)"

La chiave è sbagliata, di un’altra app, oppure revocata. Copiala di nuovo dalla tua app → Impostazioni → Chiavi SDK. Se non l’hai salvata quando l’hai creata, crea una nuova chiave: la chiave completa viene mostrata una sola volta. Dopo un 401 non viene inviato nulla fino all’avvio successivo.

L’SDK è disponibile dal piano Pro in su. Il proprietario dell’app deve fare l’upgrade in Fatturazione. Fino ad allora l’SDK non invia nulla e non tiene nulla in coda.

Mancano alcuni eventi

  • Nome non valido. I nomi degli eventi iniziano con una lettera e usano solo lettere, cifre, _ e ., al massimo 64 caratteri. Quelli non validi vengono rifiutati e registrati nel log.
  • Troppe proprietà. Al massimo 20 per evento, stringhe fino a 200 caratteri, 4 KB in totale.
  • ID delle schermate di onboarding non validi. step e flow seguono la stessa regola dei nomi degli eventi: how_heard, non how-heard. Nelle build di sviluppo l’SDK React Native (0.3.1 o successivo) mostra un avviso nella console.
  • Molto oltre la quota mensile. Nulla viene bloccato al raggiungimento della quota. Solo oltre il doppio della quota i tuoi eventi (personalizzati) vengono rifiutati, con quota_exceeded; gli eventi standard del funnel vengono sempre registrati.
  • Chiamato prima di configure. Gli SDK nativi iOS e Android ignorano le chiamate fatte prima di configure. React Native (0.3.1 o successivo) le conserva e le invia subito dopo.
  • Tracciamento disattivato. setEnabled(false) ferma il tracciamento e viene ricordato tra un avvio e l’altro.

Acquisti o prove contati due volte, o per niente

  • RevenueCat è collegato? Allora è RevenueCat a riportare prove e acquisti, e le chiamate dell’app a purchase e trialStarted vengono ignorate. Se vuoi, rimuovile; non fanno danni.
  • Gli acquisti RevenueCat non si collegano all’installazione? Riporta l’app user ID di RevenueCat. Con l’SDK 0.3.2 o successivo, connectRevenueCat lo tiene aggiornato (vedi RevenueCat). Altrimenti chiama setUserId con esso (Purchases.shared.appUserID, Purchases.sharedInstance.appUserID, Purchases.getAppUserID() o Purchases.appUserID) dopo Purchases.configure, dopo ogni Purchases.logIn e Purchases.logOut, e a ogni avvio. Un acquisto che arriva prima che l’app riporti il suo utente aspetta, e si collega appena lo fa. Conta ogni ID utente che un’installazione ha riportato, quindi un ospite che compra e poi crea un account mantiene l’acquisto. Se l’app riporta solo l’ID dell’account, l’acquisto di un ospite si collega solo con il prossimo evento di RevenueCat per quel cliente (per esempio il primo rinnovo). Vedi Ospiti e account.
  • Niente RevenueCat? Chiama purchase con il prezzo come numero decimale e un codice valuta di tre lettere, dopo che lo store lo ha confermato.
  • Su iPhone è normale. Apple non ha un referrer di installazione, quindi i deep link differiti sono solo per Android.
  • Installa da Google Play. Le installazioni in sideload e da Android Studio non hanno un referrer di Play. Usa il test interno, oppure debugInstallReferrer in una build di debug. Vedi Test.
  • Solo al primo avvio. Il referrer viene letto una volta per installazione. Disinstalla l’app, o cancellane i dati, per testare di nuovo.
  • Imposta un deep link sul link. Nella dashboard, Link → ⋯ → Modifica → Deep link. Un link senza deep link attribuisce comunque l’installazione, ma non c’è nulla da aprire.
  • Registra il listener. Puoi aggiungerlo dopo configure: un link arrivato prima viene comunque consegnato. Su React Native serve la 0.3.1 o successiva; con la 0.3.0, iscriviti subito dopo configure.
  • La schermata si trova dopo l’onboarding o l’accesso? Il listener viene eseguito una volta per installazione. Finito l’onboarding, leggi getPendingDeferredDeepLink(), apri il link e poi chiama consumeDeferredDeepLink(). Dalla 0.3.3 il link aspetta finché non lo consumi, anche se nel frattempo l’app viene chiusa (fino a 30 giorni). Vedi Aprilo dopo l’onboarding.
  • Lo stesso link si apre a ogni avvio? Chiama consumeDeferredDeepLink() dopo averlo aperto.

Ogni clic viene attribuito a una sola installazione. Dopo una reinstallazione, Google Play può passare di nuovo lo stesso referrer all’app, e quella seconda installazione non viene attribuita al link una seconda volta. Unolink non tira mai a indovinare.

React Native e Flutter

  • Expo Go non funziona. L’SDK contiene codice nativo: crea una development build (npx expo prebuild o EAS Build).
  • "Native module not found" o MissingPluginException. Ricompila l’app dopo l’installazione. Un reload di JavaScript o un hot restart di Flutter non carica nuovo codice nativo.
  • La build iOS fallisce dopo l’installazione. Esegui pod install nella cartella ios (React Native senza Expo), poi ricompila.

Ancora bloccato?

Scrivi a [email protected] con il nome della tua app, la piattaforma, la versione dell’SDK e il log di debug di un avvio dell’app.