Все работает нормально, но вход в Google не работает должным образом. Иногда приложение открывает окно браузера, а иногда нет. Я пробовал реализовать пользовательские вкладки Chrome, открыть окно входа во внешний браузер (Chrome) и все другие решения, доступные здесь.
Все доступные здесь решения, я попробовал их все, но они не работают.
Вход в Google для Android не работает в WebView
Наложение WebView поверх другого
Вход в Google в Android не работает webview
Вход в Google не работает. Android Webview
MainActivity.kt
`
class MainActivity : AppCompatActivity() {< /p>
Код: Выделить всё
private lateinit var binding: ActivityMainBinding
private lateinit var networkReceiver: BroadcastReceiver
private var webView: WebView? = null
@SuppressLint("SetJavaScriptEnabled")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
initNetworkReceiver()
if (!isInternetAvailable(this)) {
binding.ivInternetStatus.visibility = View.VISIBLE
} else {
initWebView()
}
onBackPressedDispatcher.addCallback {
if (webView?.canGoBack() == true) {
webView?.goBack()
} else {
finish()
}
}
}
private fun initNetworkReceiver() {
networkReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (isInternetAvailable(context)) {
if (webView == null) {
initWebView()
} else {
webView?.reload()
}
binding.ivInternetStatus.visibility = View.GONE
} else {
binding.ivInternetStatus.visibility = View.VISIBLE
}
}
}
val intentFilter = IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)
registerReceiver(networkReceiver, intentFilter)
}
inner class SeekrWebViewClient: WebViewClient() {
override fun shouldOverrideUrlLoading(
view: WebView?,
request: WebResourceRequest?
): Boolean {
val url = parse(request?.url.toString())
if(url.host == "seekrapp.in") {
return false
}
if(url.host == "accounts.google.com" || url.toString().contains("oauth2") || url.toString().contains("oauthchooseaccount")) {
return false
}
val intent = Intent(Intent.ACTION_VIEW, parse(request?.url.toString()))
startActivity(intent)
return true
}
}
@SuppressLint("SetJavaScriptEnabled")
private fun initWebView() {
webView = WebView(this)
webView?.settings?.apply {
javaScriptEnabled = true
domStorageEnabled = true
allowFileAccess = true
allowContentAccess = true
mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
cacheMode = WebSettings.LOAD_DEFAULT
databaseEnabled = true
setSupportMultipleWindows(true)
javaScriptCanOpenWindowsAutomatically = true
userAgentString = "Mozilla/5.0 (Linux; Android 4.1.1; Galaxy Nexus Build/JRO03C) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19"
// WebView Tweaks
layoutAlgorithm = WebSettings.LayoutAlgorithm.NORMAL;
useWideViewPort = true;
}
webView?.webViewClient = SeekrWebViewClient()
webView?.loadUrl("http://seekrapp.in")
setContentView(webView)
}
private fun isInternetAvailable(context: Context): Boolean {
val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val network = connectivityManager.activeNetwork ?: return false
val activeNetwork = connectivityManager.getNetworkCapabilities(network) ?: return false
return when {
activeNetwork.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> true
activeNetwork.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> true
activeNetwork.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> true
else -> false
}
}
override fun onDestroy() {
super.onDestroy()
unregisterReceiver(networkReceiver)
}
AndroidManifext.xml
`
Код: Выделить всё
Возможно, созданное веб-приложение использует какие-то другие методы для подписи Google.
Кроме того, веб-приложение использует GCP для получения пользователь вошел в систему с помощью идентификатора Google.
Помогите мне, предоставив какое-либо решение для этой проблемы.
Все подробности приведены выше.
Подробнее здесь: https://stackoverflow.com/questions/790 ... id-webview
Мобильная версия