Pu Zhibing
2025-12-11 ab0c19e49fabdb8cc6eea454ea455bce2efbb718
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package com.google.recaptcha.sample
 
import android.content.Context
import android.os.Bundle
import android.webkit.WebSettings
import android.webkit.WebView
import android.webkit.WebViewClient
 
const val JS_OBJECT_NAME: String = "RecaptchaJavascriptChannel"
 
class RecaptchaWebView(private val webView: WebView, private val arguments: Bundle) {
  companion object {
    const val SITE_KEY = "SITE_KEY"
    const val BASE_URL = "BASE_URL"
    const val LANG = "LANG"
  }
 
  init {
    configWebView(webView)
    webView.webViewClient = WebViewClient()
  }
 
  private fun configWebView(view: WebView) {
    WebView.setWebContentsDebuggingEnabled(true)
    val webSettings = view.getSettings()
    webSettings.javaScriptEnabled = true
    webSettings.useWideViewPort = true
    webSettings.setSupportZoom(false)
    webSettings.displayZoomControls = false
    webSettings.cacheMode = WebSettings.LOAD_NO_CACHE
  }
 
  fun start(listener: RecaptchaListener, context: Context) {
    webView.addJavascriptInterface(RecaptchaJavascriptChannel(listener), JS_OBJECT_NAME)
    val siteKey = arguments.getString(SITE_KEY)
    val baseUrl = arguments.getString(BASE_URL)
    val lang = arguments.getString(LANG)
 
    val htmlTemplate = context.assets.open("rce.html").bufferedReader().use { it.readText() }
 
    val html =
      htmlTemplate
        .replace("__SITE_KEY__", siteKey ?: "NO_SITEKEY")
        .replace("__LANG__", "&hl=$lang" ?: "")
        .replace("__JS_OBJECT_NAME__", JS_OBJECT_NAME)
 
    webView.loadDataWithBaseURL(baseUrl, html, "text/html", "UTF-8", null)
  }
}