Solución de problemas
Empieza activando los registros de depuración: dicen exactamente qué hizo el SDK y por qué. Consulta Registros de depuración.
Busca la etiqueta Unolink en Logcat, o [Unolink] en la consola de Xcode.
No aparece nada en el panel
- Activa Incluir dispositivos de prueba en Embudo o Recorridos. Las builds de depuración son dispositivos de prueba y están ocultas de forma predeterminada.
- Comprueba que
configurese ejecuta. Hay que llamarlo una vez, pronto:Application.onCreate()en Android, elinit()de la App con@mainen iOS, el layout raíz en React Native,main()en Flutter. - Envía los eventos ya. Los eventos salen cada 15 segundos mientras la app está abierta, y cuando pasa a segundo plano.
Pulsa Inicio, o llama a
flush(). - Comprueba la red. Sin conexión, los eventos esperan en el dispositivo y se envían cuando vuelve.
"Invalid SDK key (401)"
La clave es incorrecta, es de otra app o está revocada. Cópiala de nuevo desde tu app → Ajustes → Claves del SDK. Si no la guardaste cuando la creaste, crea una clave nueva: la clave completa solo se muestra una vez. Después de un 401 no se envía nada hasta el siguiente inicio.
"The SDK isn't included in this app's Unolink plan (403)"
El SDK forma parte del plan Pro y superiores. El propietario de la app tiene que mejorar su plan en Facturación. Hasta entonces, el SDK no envía nada y no deja nada en cola.
Faltan algunos eventos
- Nombre no válido. Los nombres de eventos empiezan por una letra y solo usan letras, dígitos,
_y., con un máximo de 64 caracteres. Los no válidos se rechazan y se registran. - Demasiadas propiedades. Como máximo 20 por evento, cadenas de hasta 200 caracteres, 4 KB en total.
- IDs de pantallas de onboarding no válidos.
stepyflowsiguen la misma regla que los nombres de eventos:how_heard, nohow-heard. En las builds de desarrollo, el SDK de React Native (0.3.1 o posterior) avisa en la consola. - Muy por encima del cupo mensual. No se bloquea nada al llegar a tu cupo. Solo a partir del doble del cupo se rechazan tus propios
eventos (personalizados), con
quota_exceeded; los eventos estándar del embudo siempre se registran. - Llamados antes de
configure. Los SDK nativos de iOS y Android ignoran las llamadas hechas antes deconfigure. React Native (0.3.1 o posterior) las guarda y las envía justo después. - Seguimiento desactivado.
setEnabled(false)detiene el seguimiento y se recuerda entre inicios.
Las compras o pruebas se cuentan dos veces, o ninguna
- ¿RevenueCat conectado? Entonces RevenueCat informa de las pruebas y compras, y las llamadas de la app a
purchaseytrialStartedse ignoran. Quítalas si quieres; no hacen daño. - ¿Las compras de RevenueCat no se unen a la instalación? Informa del propio ID de usuario de app de RevenueCat. Con el SDK
0.3.2 o posterior,
connectRevenueCatlo mantiene al día (consulta RevenueCat). Si no, llama asetUserIdcon él (Purchases.shared.appUserID,Purchases.sharedInstance.appUserID,Purchases.getAppUserID()oPurchases.appUserID) después dePurchases.configure, después de cadaPurchases.logInyPurchases.logOut, y en cada inicio. Una compra que llega antes de que la app informe de su usuario espera, y se une en cuanto lo hace. Cuenta cada ID de usuario que haya informado una instalación, así que un invitado que compra y luego crea una cuenta conserva la compra. Si la app solo informa del ID de la cuenta, la compra de un invitado se une solo con el siguiente evento de RevenueCat para ese cliente (por ejemplo, la primera renovación). Consulta Invitados y cuentas. - ¿Sin RevenueCat? Llama a
purchasecon el precio como decimal y un código de moneda de tres letras, después de que la tienda la confirme.
No hay deep link diferido
- En iPhone, es lo esperado. Apple no tiene referrer de instalación, así que los deep links diferidos son solo para Android.
- Instala desde Google Play. Las instalaciones por sideload y desde Android Studio no tienen referrer de Play. Usa las pruebas internas,
o
debugInstallReferreren una build de depuración. Consulta Pruebas. - Solo en el primer inicio. El referrer se lee una vez por instalación. Desinstala la app, o borra su almacenamiento, para volver a probar.
- Pon un deep link en el enlace. En el panel, Enlaces → ⋯ → Editar → Enlace profundo. Un enlace sin deep link sigue atribuyéndose la instalación, pero no hay nada que abrir.
- Registra el listener. Se puede añadir después de
configure: un enlace que llegó antes se entrega igual. En React Native eso requiere 0.3.1 o posterior; con 0.3.0, suscríbete justo después deconfigure. - ¿La pantalla está detrás del onboarding o del inicio de sesión? El listener se ejecuta una vez por instalación.
Cuando termine el onboarding, lee
getPendingDeferredDeepLink(), abre el enlace y luego llama aconsumeDeferredDeepLink(). Desde 0.3.3, el enlace espera hasta que lo consumas, aunque la app se cierre entretanto (hasta 30 días). Consulta Ábrelo después del onboarding. - ¿El mismo enlace se abre en cada inicio? Llama a
consumeDeferredDeepLink()en cuanto lo hayas abierto.
Una reinstalación no se atribuye al enlace
Cada clic se atribuye a una sola instalación. Después de una reinstalación, Google Play puede volver a dar el mismo referrer a la app, y esa segunda instalación no se atribuye al enlace una segunda vez. Unolink nunca adivina.
React Native y Flutter
- Expo Go no funciona. El SDK tiene código nativo: haz una development build (
npx expo prebuildo EAS Build). - "Native module not found" o
MissingPluginException. Vuelve a compilar la app después de instalarlo. Una recarga de JavaScript o un hot restart de Flutter no carga código nativo nuevo. - La build de iOS falla después de instalarlo. Ejecuta
pod installen la carpetaios(React Native sin Expo) y vuelve a compilar.
¿Sigues atascado?
Escribe a [email protected] con el nombre de tu app, la plataforma, la versión del SDK y el registro de depuración de un inicio de la app.