我开始遇到一个 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"
Android 应用程序中的
webviewFragment
代码会加载一个 URL,其中包含转发到实际 Facebook 页面 URL 的 meta-equiv="refresh"
代码。
我确信
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 应用程序。
应用程序代码根本没有改变,这似乎是由于操作系统更新而导致行为发生变化而导致的行为改变。
我用过这个,它对我有用。
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)
}
我猜 Facebook URL 方案仍然存在这个问题。
最近我正在做类似的事情,我必须从我的 Android 应用程序打开一个 Facebook 页面。同样的事情也发生在我身上。
我在互联网上进行了搜索,发现了 @ikmazameti 发布的类似答案,但我不喜欢重定向流程。
当我对任何解决方案不满意时。
我只是尝试了一个非常简单的解决方案,我们应该告诉
Webview
有关此内容Facebook
内部URL Scheme
"fb://"
您应该在同一页面中加载此内容。
为此,我使用了这段代码,它在任何地方都对我有用。
在您的
中,您应该将此代码粘贴到此方法中Webview Client
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
String host = Uri.parse(url).getHost();
if (url == null) {
return true;
}
if (!TextUtils.isEmpty(host) && url.startsWith("fb://") && host.contains("profile")) {
return true;
} else {
view.loadUrl(url);
}
return true;
}