在WebView中通过点击外部链接打开页面



我有一个网站,有一个web版本和一个webview。必须直接在应用程序中打开(如果已安装)链接以恢复用户在其电子邮件中收到的密码。

将下面的代码添加到AndroidManifest.xml后,我可以通过点击链接打开应用程序。

<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:host="*" android:scheme="myapp"/>
</intent-filter>

我创建的测试链接:

<a href="myapp://www.site.com/password-reset/token/abc123">Click</a>

但是,它总是打开应用程序的主页,而不是打开链接中的特定页面。

我需要进一步修改应用程序来解释这种类型的链接吗?

MainActivity:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = findViewById(R.id.webview);
webView.loadUrl("https://www.site.app");
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView wv, String url) {

}
@Override
public void onPageFinished(WebView view, String url) {
}
});
}

解决方案:

Intent intent = getIntent();
Uri data = intent.getData();

if (data != null && data.toString().startsWith("myapp:")) {
urlIntent = data.toString().replace("myapp", "https");
} else {
urlIntent = "https://www.site.app";
}
webView.loadUrl(urlIntent);

Deeplinks通常只是触发应用程序被打开,他们不帮助你导航或打开一个特定的位置,除非你定义FragmentActivity基于intent-filters或手动处理。

您应该首先从intent获得包括URL的数据,然后将其作为URL提供给WebView。您可以在onNewIntentonCreate方法中这样做,如下所示;

override fun onNewIntent(intent: Intent){
super.onNewIntent(intent)
val uri = intent.data
}

然后加载到WebView中,如;

webview.loadUrl(uri.toString())

最新更新