是否可以实现从网站到本机应用程序的深度链接?

Is it possible to implement deep links from website to native app?

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

首先,我尝试通过 deep-link.js 插件直接使用本机应用方案。但是,当我尝试打开本机应用程序 URL 方案时,当本机应用程序未安装时,Safari 显示错误,但最终打开了 URL 后备页面。默认 Android 浏览器表示他不知道如何处理这样的 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>

然后我尝试使用 App Links "standard",它有很多来自 Facebook 的推广。我什至尝试使用他们的 hosted 应用程序 links,以确保我以正确的方式生成了所有内容。它不起作用,它总是重定向到网站后备。您可以从 https://fb.me/746134728830806

轻松自行测试

是否可以在网站上提供深度 link,至少在默认 os 浏览器中可以无错误地打开本机应用程序,或者静默回退到 [=33] =]?

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

这是您需要的信息吗? lmk

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

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

默认情况下这将回退到 Google 播放,但您可以通过添加 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 phone 或旧版本的默认浏览器(或奇怪的浏览器),您就会遇到问题。您可以设置一堆条件并用每种情况的正确代码替换您的 HTML。

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

将此函数添加到您的 JS 代码段:

    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 这样的服务,它会自动完成您正在寻找的事情。