【问题标题】:Is it possible to implement deep links from website to native app?是否可以实现从网站到本机应用程序的深层链接?
【发布时间】:2015-07-31 19:52:22
【问题描述】:

我的网站上有三个按钮,分别是 Facebook、Twitter 和 vk.com 页面的链接。如果本机应用程序安装在用户设备上,我想打开它。否则,我希望打开 URL 后备。

首先,我尝试通过deep-link.js 插件直接使用原生应用方案。但是,当我尝试打开原生应用 URL 方案时,当原生应用未安装时,Safari 显示错误,但最终打开了 URL 回退页面。默认安卓浏览器说他不知道如何处理这样的 URL 方案:

<a class="btn btn-primary" href="https://www.facebook.com/warpcompany" data-app-ios="fb://profile/838619192839881" data-app-android="fb://page/838619192839881">Facebook</a>

然后我尝试使用“标准”应用链接,这在 Facebook 上得到了很大的推广。我什至尝试使用他们托管的应用程序链接,以确保我以正确的方式生成了所有内容。它不起作用,它总是重定向到网站后备。您可以从 https://fb.me/746134728830806 自己轻松测试它

是否可以在网站上提供深层链接,至少在默认操作系统浏览器中打开本机应用程序而不会出错,或者静默回退到 URL?

【问题讨论】:

    标签: android ios facebook deep-linking applinks


    【解决方案1】:

    这仍然是可能的,但在较新版本的 Android 默认浏览器上,您必须使用意图,而不是仅仅尝试打开深层链接。例如,将您的 fb://page/838619192839881 替换为

    intent://page/838619192839881#Intent;scheme=fb;package=com.facebook.katana;end
    

    默认情况下,这将回退到 Google Play,但您可以通过添加 S.browser_fallback_url 覆盖回退:

    intent://page/838619192839881#Intent;scheme=fb;package=com.facebook.katana;S.browser_fallback_url=http%3A%2F%2Fwww.facebook.com%2F;end
    

    后备应该是 url 编码的。

    当然,如果用户不是使用 Android 手机或使用旧版本的默认浏览器(或奇怪的浏览器),您就会遇到问题。您可以设置一堆条件,并为每种情况用正确的代码替换您的 HTML。

    【讨论】:

      【解决方案2】:

      接受的答案仅适用于 Chrome v28 和 Android 5.0 的默认浏览器。如果你想让它在其他浏览器上工作,比如 Facebook/Twitter webviews、Firefox、UC 和比 5.0 更旧的默认浏览器,你需要使用一些更复杂的代码。

      将此函数添加到您的 JS sn-p 中:

          var openSesame = function() {
              var method = 'iframe';
              var fallbackFunction = function() {
                  if (method == 'iframe') {
                      window.location = "market://details?id=com.facebook.katana";
                  }
              };
              var addIFrame = function() {
                  var iframe = document.createElement("iframe");
                  iframe.style.border = "none";
                  iframe.style.width = "1px";
                  iframe.style.height = "1px";
                  iframe.src = "fb://page/838619192839881";
                  document.body.appendChild(iframe);
              };
              var loadChromeIntent = function() {
                  method = 'intent';
                  document.location = "intent://page/838619192839881#Intent;scheme=fb;package=com.facebook.katana;end";
              };
              if (navigator.userAgent.match(/Chrome/) && !navigator.userAgent.match("Version/")) {
                  loadChromeIntent();
              }
              else if (navigator.userAgent.match(/Firefox/)) {
                  window.location = "fb://page/838619192839881";
              }
              else {
                  addIFrame();
              }
              setTimeout(fallbackFunction, 750);
          };
      

      然后您的按钮将如下所示:

      <a href="" onclick="openSesame();">Open the App</a>
      

      或者您可以使用像 branch.io 这样的服务,它会自动完成您正在寻找的工作。

      【讨论】:

      • 直到我在 onclick 中的 openSesame(); 之后添加了 return false 才起作用。另一种方法是从openSesame 函数中返回false 并将return openSesame() 放入onclick 中。现在可以了,谢谢!
      【解决方案3】:

      是的!看看这个培训: https://developer.android.com/training/app-indexing/deep-linking.html

      这是您需要的信息吗? lmk

      【讨论】:

      • 感谢您的回复。本文档展示了如何配置应用程序清单。我正在寻找方式,如何从普通网页调用深层链接。问题是你不能只使用 native://url,因为在默认的移动操作系统浏览器中这会导致错误。
      • 哦,好吧,对不起...我以为这是一个 Android 主题
      猜你喜欢
      • 2018-07-04
      • 2015-02-26
      • 1970-01-01
      • 2019-06-12
      • 1970-01-01
      • 1970-01-01
      • 2017-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多