【问题标题】:How to enable deep-linking in WebView on Android app?如何在 Android 应用程序的 WebView 中启用深度链接?
【发布时间】:2014-10-29 14:34:51
【问题描述】:

我正在尝试在 Android 应用中实现深度链接。

当我在 Chrome 等 Android 浏览器上单击自定义 url (xxxx://repost?id=12) 的深层链接时,我的应用打开并且运行良好。

问题是,在应用程序中,有一个 webView 小部件,我也想在那里进行深度链接工作。

目前,它显示Can't connect to the server 错误。

提前致谢。

【问题讨论】:

  • 如果 url.startsWith(APP_SCHEME) 自行覆盖 shouldOverrideUrlLoading 函数句柄

标签: android android-webview


【解决方案1】:

这是 android web view 的问题,因为它将所有内容都视为 URL,但其他浏览器(如移动设备上的 chrome)会拦截该方案,操作系统将完成其余工作以打开相应的应用程序。 要实现这一点,您需要修改您的 web 视图 shouldOverrideUrlLoading 函数,如下所示:

 @Override
 public boolean shouldOverrideUrlLoading(WebView view, String url) {
        LogUtils.info(TAG, "shouldOverrideUrlLoading: " + url);
        Intent intent;

        if (url.contains(AppConstants.DEEP_LINK_PREFIX)) {
            intent = new Intent(Intent.ACTION_VIEW);
            intent.setData(Uri.parse(url));
            startActivity(intent);

            return true;
        } 
 }

在上面的代码中,将 AppConstants.DEEP_LINK_PREFIX 替换为您的 url 方案,例如。

android-app://你的包

希望这会有所帮助!

【讨论】:

  • 如果用户没有安装其他应用,这肯定会失败
  • 这是关于从您的应用网页视图打开您的应用的深层链接。请看问题?如果有什么我遗漏的,请详细说明。
  • if (intent.resolveActivity(getPackageManager()) != null) 这将检查意图是否可以启动
  • 如果您正在深度链接到同一个应用程序,这将再次打开该应用程序,但不幸的是不会触发分支 InitSessionComplete()。有人知道解决方法吗?
  • @Pranav 如果我们不知道深度链接前缀会怎样?
【解决方案2】:

@pranav 的答案很完美,但如果没有应用程序来处理意图,可能会导致崩溃。 @georgianbenetatos 防止这种情况的解决方案有帮助

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
if (intent.resolveActivity(getPackageManager()) != null) {
   startActivity(intent);
} else {
   Toast.makeText(this, R.string.no_apps_to_handle_intent, Toast.LENGTH_SHORT).show();
} 

【讨论】:

  • 这将永远是 chrome / browser 对吧?
  • @droidev 访问 ACTION_VIEW 的人,例如浏览器和其他应用程序。
  • 大部分设备都有网络浏览器,对吧?哪个将始终接受ACTION_VIEW,在这种情况下,浏览器将始终打开对吗?
  • 是的,没错@droidev
  • 有没有更好的办法?就像镀铬把手一样?在 chrome 中,如果您尝试打开任何深度链接 url,它将直接打开/要求打开可深度链接的应用程序吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-01
  • 2021-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多