Contexto: Para todos los clientes que integren DiDi BNPL H5, es necesario alinear la configuración del contenedor a fin de evitar problemas imprevistos al abrir la página H5 de DiDi, que podrían afectar la tasa de éxito de las transacciones del Merchant.
Entornos soportados: Solo iOS nativo y Android nativo. No aplica a la versión web, Linux u otros sistemas Windows. Este documento está dirigido a la configuración del contenedor web de la Merchant App y a sus métodos de verificación.
Qué significa "contenedor" aquí: En este documento, "contenedor" se refiere a la forma en que la Merchant App abre páginas web:
- Android WebView / Custom Tabs, o
- iOS WKWebView / SFSafariViewController.
1. Autocomprobación de la App Android: verificación de código y configuración
Verifique únicamente el Activity/Fragment que realmente aloja nuestro H5; no revise solo la clase base o el código de plantilla del WebView público. Primero confirme el tipo de contenedor y luego verifique la subsección correspondiente.
1.1 Confirmar primero el tipo de contenedor
Nota: Según el historial reportado por distintos proveedores, Custom Tabs puede provocar redirección externa y causar anomalías en el flujo; no se recomienda usar Custom Tabs.
1.2 Permisos del sistema y de la web
1.3 Configuración básica del WebView
1.4 URL de la página, navegación y funciones
1.5 Ciclo de vida de la página y versión
1.6 Android Custom Tabs (no recomendado)
Custom Tabs está alojado por un proveedor de navegador; la Merchant App normalmente no puede leer ni modificar el WebChromeClient, el WebSettings ni las devoluciones de llamada de medios de su WebView interno.
Lo que debe confirmarse:
- El navegador/proveedor utilizado, su versión y la versión del sistema Android;
- El permiso de cámara del sistema y el permiso del navegador están disponibles;
- La página HTTPS y el flujo real de verificación facial pueden completarse.
No exija que Custom Tabs proporcione registros onPermissionRequest de un WebView propio.
2. Autocomprobación de la App iOS: verificación de código y configuración
Verifique únicamente el ViewController/WKWebView que realmente aloja nuestro H5.
Primero confirme el tipo de contenedor y luego verifique la subsección correspondiente.
2.1 Confirmar primero el tipo de contenedor
2.2 Permisos del sistema y de la web
2.3 Configuración de visualización de video
2.4 URL de la página, navegación y recursos
2.5 Ciclo de vida de la página y versión
2.6 iOS SFSafariViewController
La página interna de SFSafariViewController está alojada por el navegador del sistema; la Merchant App no puede configurar allowsInlineMediaPlayback, WKUIDelegate ni las devoluciones de llamada de medios internas. El Merchant solo necesita proporcionar la versión del sistema y la versión de la App y completar la aceptación de la verificación facial real; si la pantalla se comporta de forma anómala, investigue según el navegador/versión del sistema y el comportamiento observado.
3. Información de entorno JSBridge de la Merchant App (sugerida)
JSBridge no es un requisito obligatorio para que el H5 se abra y complete la autenticación.
Sin embargo, DiDi recomienda encarecidamente que la Merchant App implemente JSBridge para proporcionar un método estable que permita al H5 de DiDi leer rápidamente los parámetros del contenedor nativo cuando ocurra un problema, para un diagnóstico rápido.
Android e iOS usan la misma estructura de retorno; el H5 no necesita analizar dos formatos distintos.
3.1 Etapa aplicable
Antes de la verificación facial: el H5 de DiDi obtiene la información de la Merchant App.
La capa nativa de la Merchant App configura JSBridge para que el H5 de DiDi pueda obtener la información relacionada con el contenedor, lo que permite una localización rápida de problemas cuando surjan, ayuda a la Merchant App a resolverlos y mejora el PSR.
H5 (DiDi) --llama a JSBridge--> Capa nativa de la Merchant App
<--devuelve JSON-- (tipo de contenedor / versión del sistema / estado de permisos / versión del WebView ...)
3.2 Formato de retorno unificado
Ejemplo de Android:
{
"code": "OK",
"data": {
"system": "Android",
"systemVersion": "15",
"appVersion": "1.1",
"containerType": "WEBVIEW",
"permissions": {
"camera": {
"native": "GRANTED",
"web": "GRANTED"
},
"microphone": {
"native": "NOT_REQUESTED",
"web": "NOT_REQUESTED"
}
},
"webView": {
"provider": "com.google.android.webview",
"version": "131.0.6778.81"
},
"webViewConfig": {
"javaScriptEnabled": true,
"domStorageEnabled": true,
"allowsInlineMediaPlayback": null,
"mediaPlaybackRequiresUserGesture": true
}
}
}
La misma estructura se usa para iOS:
{
"code": "OK",
"data": {
"system": "iOS",
"systemVersion": "26.0",
"appVersion": "1.1",
"containerType": "WKWEBVIEW",
"permissions": {
"camera": {
"native": "GRANTED",
"web": "GRANTED"
},
"microphone": {
"native": "NOT_REQUESTED",
"web": "NOT_REQUESTED"
}
},
"webView": {
"provider": "WKWebView",
"version": "26.0"
},
"webViewConfig": {
"javaScriptEnabled": true,
"domStorageEnabled": true,
"allowsInlineMediaPlayback": true,
"mediaPlaybackRequiresUserGesture": null
}
}
}
3.3 Campos y estados
Los estados de permisos usan uniformemente: GRANTED, DENIED, NOT_REQUESTED, UNKNOWN, NOT_APPLICABLE.
3.4 Límites de plataforma
-
allowsInlineMediaPlaybackes una configuración del WKWebView de iOS; Android no tiene una configuración con el mismo nombre y devuelvenull— no fabrique un valor. -
mediaPlaybackRequiresUserGesturese usa principalmente en Android; en iOS, donde no aplica, devuelvanull. -
Para
CUSTOM_TABSySFSafariViewController, las configuraciones del WebView y los permisos web que no se puedan leer devuelvenUNKNOWNoNOT_APPLICABLE. -
La consulta del Bridge no debe solicitar permisos activamente, mostrar diálogos ni invocar la cámara.
-
La consulta de entorno de 3.2 solo devuelve el contenedor, la versión y el estado de los permisos.
-
El nombre del método JSBridge, la forma de invocación y la forma de devolución de llamada asíncrona se acuerdan entre ambas partes durante la integración.
4. Resultado final
4.1 El resultado final que se debe lograr
Esta sección no requiere revisar el código. Después de integrar nuestro H5 en la App del comercio, se deben lograr los siguientes resultados.
4.2 Análisis del estado actual del entorno del contenedor de la App del comercio
Esta sección no emite un juicio de aprobado/no aprobado; solo registra el comportamiento real del flujo facial de nuestro H5 al interactuar con los permisos de cámara en la App del comercio, como base para la posterior resolución de problemas y adaptación. Por favor, pruebe cada punto y regístrelo con veracidad, marcando los puntos desconocidos como "Por confirmar"; registre iOS y Android, y los distintos contenedores, por separado.
Por favor, pruebe por separado los tres escenarios — "sin autorizar por primera vez", "reingreso tras la denegación" y "regreso tras autorizar en la página de ajustes" — registrando los pasos de la operación y si el flujo sale de la App/contenedor actual, para evitar juzgar la experiencia real basándose únicamente en que "el permiso de cámara es compatible".