Com el podem ajudar?

Expliqui’ns breument de què es tracta - li respondrem per correu electrònic.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.
Ves a l’inici

Aplicaciones móviles: el chat en una WebView

Cómo integrar reactive.chat en una aplicación iOS o Android mediante /embed/SITE_KEY en una WKWebView o WebView, con identidad por JavaScript, cargas de archivos, botón de retroceso y notificaciones push mediante webhooks.

No hay un SDK nativo para aplicaciones. En su lugar, su aplicación carga una página diseñada específicamente para una WebView:

https://reactive.chat/embed/SITE_KEY

La página no tiene marco, navegación ni botón del chat: el widget ocupa la pantalla y está abierto desde el principio. Es el mismo chat que en su sitio web: el mismo proyecto, el mismo diseño y la misma bandeja de entrada. Encontrará la clave del sitio en Proyecto → Instalación de su cuenta.

Propiedades de la página:

iOS (WKWebView)

import WebKit

let konf = WKWebViewConfiguration()
konf.allowsInlineMediaPlayback = true          // otherwise the full-screen player pulls the chat away

let web = WKWebView(frame: .zero, configuration: konf)
web.scrollView.bounces = false
web.scrollView.contentInsetAdjustmentBehavior = .never
web.load(URLRequest(url: URL(string: "https://reactive.chat/embed/SITE_KEY")!))

Extienda la WebView sobre toda el área, no dentro de la guía de diseño del área segura: la página ya tiene en cuenta el margen por sí misma.

Android (WebView)

val web = findViewById<WebView>(R.id.chat)
web.settings.javaScriptEnabled = true
web.settings.domStorageEnabled = true            // required: no session without it
web.settings.mediaPlaybackRequiresUserGesture = false
web.webViewClient = WebViewClient()              // otherwise the system browser opens
web.loadUrl("https://reactive.chat/embed/SITE_KEY")

domStorageEnabled no es opcional: el widget guarda sus ID en el almacenamiento de la WebView. Sin él, cada inicio crea una conversación nueva.

Transmitir el usuario con sesión iniciada

Nunca mediante la dirección. Un hash en una URL acaba en el historial, en registros y en cabeceras Referer. Transmita la identidad mediante JavaScript después de cargar. Su servidor calcula userHash (Identificar visitantes); el secreto no debe incluirse en el paquete de la aplicación, porque las aplicaciones se pueden desensamblar. Haga que su aplicación obtenga los tres valores de su servidor al iniciar sesión.

// Android, in onPageFinished
web.evaluateJavascript(
    """ReactiveChat("identify",{userId:"$id",name:"$name",userHash:"$hash",exp:$exp});""",
    null)
// iOS, in webView(_:didFinish:)
web.evaluateJavaScript(
    "ReactiveChat(\"identify\",{userId:\"\(id)\",name:\"\(name)\",userHash:\"\(hash)\",exp:\(exp)});")

Asegúrese de escapar correctamente los valores para JavaScript (lo más sencillo es serializarlos como JSON en su aplicación). También funciona una llamada anterior: la cola ReactiveChat.q la acepta antes de que se haya cargado el widget.

Qué cambia en una WebView

Llevar eventos a la aplicación

Puede transmitir los eventos del widget a su aplicación mediante un puente de JavaScript, por ejemplo para mostrar un indicador de mensajes sin leer:

// Android: register web.addJavascriptInterface(Bruecke(), "App") beforehand
web.evaluateJavascript(
    "ReactiveChat('on','unread',function(e){ App.ungelesen(e.count); });", null)

Siguiente: Smart Answer

Última actualització: