Чим ми можемо допомогти?

Стисло опишіть питання; ми відповімо електронною поштою.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.
На головну

Мобільні застосунки: чат у WebView

Як вбудувати reactive.chat у застосунок iOS або Android: сторінка /embed/SITE_KEY у WKWebView чи WebView, ідентифікація через JavaScript, завантаження файлів, кнопка «Назад» і push через вебхуки.

Для застосунків немає нативного SDK. Натомість застосунок завантажує сторінку, створену спеціально для WebView:

https://reactive.chat/embed/SITE_KEY

Сторінка не має рамки, навігації чи кнопки чату: віджет займає екран і одразу відкритий. Це той самий чат, що й на сайті: той самий проєкт, оформлення й вхідні. Ключ сайту є в обліковому записі в розділі Проєкт → Встановлення.

Властивості сторінки:

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

Розташуйте WebView на всій області, а не в safe area layout guide: сторінка сама враховує відступ.

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 не є необов’язковим: віджет зберігає ID у сховищі WebView. Без нього кожен запуск починає нову розмову.

Передавання користувача, який увійшов

Ніколи через адресу. Хеш у URL потрапляє до історії, журналів і заголовків Referer. Передавайте ідентифікацію через JavaScript після завантаження. Ваш сервер обчислює userHash (Ідентифікація відвідувачів); секрету не місце в пакеті застосунку, оскільки застосунки можна розібрати. Нехай застосунок отримує три значення з сервера під час входу.

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

Правильно екрануйте значення для JavaScript (найпростіше — серіалізувати їх як JSON у застосунку). Раніший виклик теж працює: черга ReactiveChat.q приймає його до завантаження віджета.

Що відрізняється у WebView

Передавання подій у застосунок

Події віджета можна передавати застосунку через міст JavaScript, наприклад для позначки непрочитаних повідомлень:

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

Далі: Smart Answer

Оновлено: