是否可以实现从网站到本机应用程序的深度链接?
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 这样的服务,它会自动完成您正在寻找的事情。
我的网站上有三个按钮,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 这样的服务,它会自动完成您正在寻找的事情。