Android WebviewFragment 中的 Facebook 链接问题 ERR_UKNOWN_URL_SCHEME

ome*_*ga1 7 android facebook android-studio

我开始遇到一个 WebviewFragment 的问题,它在我的 Android 应用程序中打开,该应用程序旨在在 webview 中打开 Facebook 页面,直到最近(不能确切地说何时),这才起作用,但是现在当您单击打开 Web 视图的图标,它在 Web 视图中正确打开 Facebook 页面,但随后立即跳转到 Google 错误页面,其中显示"Webpage not available, the webpage at fb://page/xxxxxxxxx could not be loaded because: net:ERR_UNKNOWN_URL_SCHEME"

webviewFragmentAndroid 应用程序中的代码加载一个包含以下内容的URLmeta-equiv="refresh"到实际 Facebook 页面 URL 的代码。

我确信它webviewFragment工作正常,因为它正确加载其他页面(Twitter 页面)而不会出现此错误。

fb://链接错误来看,它似乎正在加载 Facebook 页面 URL,然后尝试通过将其转换为内部 Facebook 链接 ( fb://) 来打开 Facebook 应用程序,以告诉它在 FB 应用程序中加载它?

我倾向于尝试解决此问题肯定是在链接中执行某些操作,而不是必须更新应用程序,但我不完全确定发生了什么变化以及发生了什么。

为了澄清这一点,Android 应用程序调用我们网站上的 URL (domain.com/facebok.html),并在该页面中对实际 Facebook 页面 URL 执行元等效刷新。

关于如何解决这个问题有什么想法吗?

更新 :

  • <uses-permission android:name="android.permission.INTERNET" />肯定在 AndroidManifest.xml 文件中。

  • Facebook 应用程序安装在设备上,但我们希望它在 WebView 中加载 Facebook 页面(作为网页),而不是打开 Facebook 应用程序。

  • 应用程序代码根本没有改变,这似乎是由于操作系统更新而导致行为发生变化而导致的行为改变。

小智 1

我用过这个,它对我有用。

override fun shouldOverrideUrlLoading(
                    view: WebView?, request: WebResourceRequest?
                ): Boolean {
                    val url = request?.url.toString()

                    if (url.startsWith("fb://")) {
                        // Open Facebook app using intent
                        val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
                        try {
                            startActivity(intent)
                        } catch (e: ActivityNotFoundException) {
                            // Facebook app is not installed, handle the error or fallback to a web-based solution
                            Toast.makeText(
                                context, "Facebook app not installed", Toast.LENGTH_SHORT
                            ).show()
                        }
                        return true
                    }

                    return super.shouldOverrideUrlLoading(view, request)
                }
Run Code Online (Sandbox Code Playgroud)