Solución de problemas
customEndpoints rechazado
Causa: Se pasaron customEndpoints usando production, sandbox o staging.
Solución: Solo pasa customEndpoints con EixamEnvironment.custom.
Discrepancia en initialSession.appId
Causa: El appId del bootstrap y el de la sesión firmada no coinciden.
Solución: Haz que ambos valores sean idénticos.
Confusión en el flujo de firma
Causa: La app móvil intenta almacenar el secreto de la app o calcular userHash localmente.
Solución: Mantén el secreto solo en el backend del partner. Genera userHash en el backend para appId + externalUserId.
URI de realtime parece no ser WebSocket
Causa: El campo público se llama websocketUrl, pero el broker puede usar un esquema de transporte diferente.
Solución: Es el comportamiento esperado. La URI puede ser ssl://, tls://, tcp://, ws:// o wss://.
El bootstrap no solicitó permisos
Comportamiento esperado. Las solicitudes de permisos son decisiones explícitas de la app anfitriona.
El bootstrap no emparejó un dispositivo
Comportamiento esperado. El emparejamiento de dispositivos es una decisión explícita de la app anfitriona.
La disponibilidad de Protección está bloqueada
Inspecciona: disponibilidad de sesión, estado del dispositivo emparejado/conectado, Bluetooth habilitado, permiso de ubicación, permiso de notificaciones, disponibilidad de la capacidad de plataforma.
La cobertura de Protección en iOS sigue siendo parcial
Puede ser esperado según el soporte actual de propiedad del runtime iOS.
Auth MQTT falla después de copiar cabeceras HTTP
Causa: La auth MQTT se está tratando como HTTP.
Solución:
| Transporte | Auth |
|---|---|
| HTTP | Authorization: Bearer <userHash> |
| MQTT username | sdk:<appId>:<externalUserId> |
| MQTT password | <userHash> (sin prefijo Bearer) |