Chúng tôi có thể giúp gì?

Cho chúng tôi biết ngắn gọn về vấn đề – chúng tôi sẽ liên hệ lại qua email.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.
Về trang chủ

Applications mobiles : le chat dans une WebView

Intégrez reactive.chat à une application iOS ou Android via /embed/SITE_KEY dans une WKWebView ou WebView : identité par JavaScript, envoi de fichiers, bouton Retour et notifications push via webhooks.

Il n’existe aucun SDK natif pour les applications. Votre application charge à la place une page conçue spécialement pour une WebView :

https://reactive.chat/embed/SITE_KEY

Cette page n’a ni cadre, ni navigation, ni bouton du chat : le widget remplit l’écran et est immédiatement ouvert. C’est le même chat que sur votre site : même projet, même design, même boîte de réception. La clé de site se trouve dans votre compte sous Projet → Installation.

Propriétés de la page :

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")!))

Placez la WebView sur toute la surface, pas dans le guide de mise en page de la zone de sécurité : la page gère elle-même les marges de sécurité.

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 n’est pas facultatif : le widget stocke ses identifiants dans le stockage de la WebView. Sans ce réglage, chaque lancement démarre une nouvelle conversation.

Transmettre l’utilisateur connecté

Jamais via l’adresse. Un hachage dans une URL se retrouve dans l’historique, les journaux et les en-têtes Referer. Transmettez l’identité par JavaScript après le chargement. Votre serveur calcule le userHash (Identifier les visiteurs) ; le secret ne doit pas figurer dans le paquet de l’application, car les applications peuvent être désassemblées. Faites récupérer les trois valeurs par votre application auprès de votre serveur lors de la connexion.

// 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)});")

Veillez à échapper correctement les valeurs pour JavaScript (le plus simple est de les sérialiser en JSON dans votre application). Un appel plus précoce fonctionne aussi : la file ReactiveChat.q l’accepte avant le chargement du widget.

Ce qui change dans une WebView

Transmettre les événements à l’application

Vous pouvez transmettre les événements du widget à votre application via un pont JavaScript, par exemple pour afficher un badge de messages non lus :

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

Suite : Smart Answer

Cập nhật lần cuối: