cwe*_*kly 5 mobile hyperlink mobile-safari ios
对于未安装的iOS应用程序的链接,如何抑制移动safari"无效地址"警告?
我不想使用智能应用程序横幅(对UX的控制太少).我不想支付也不想与第三方供应商集成($,依赖).
用例很容易理解:在移动Safari中(例如在iPhone上):点击指向我的移动网页友好页面的链接(例如"www.example.com/mw-foo.html").如果我的原生iOS应用程序已安装,请将用户路由/重定向到其中的应用程序深层链接(例如"com.example.app://my-deeplink").(注意从mw url到app uri的映射很容易在apache rewritemap或js集合对象中管理,这很容易.)真正的挑战是:如果未安装应用程序,请禁止"无效地址"弹出警告优雅(允许我决定是否是NOOP /留在mw页面,或将用户路由到应用程序商店以安装应用程序).
如何解决这个糟糕的用户体验?我已经看到了涉及iframe注入和竞争条件的半生不熟的解决方案,其中包含超时,页面隐藏事件监听器和window.location覆盖的"魔术数字"......但是它们似乎都无法可靠地解决弹出窗口问题.这个似乎很接近的解决方案是:http: //www.mazdigital.com/blog/post/2014/deep-links-on-mobile-browsers-demystified ...但它不会阻止警告出现.
我考虑过宣布它是不可能的,除了一些大企业似乎已经管理它(例如LinkedIn).但我没有成功地从外部对他们的方法进行逆向工程.
这里一个好的解决方案将是社区(以及我个人)的巨大利益.如果有人能够准确描述LinkedIn如何管理这个,我将非常感激.另外,请提前感谢有用的反馈/链接到gists或帖子,理想情况下,您实际使用并可以担保.谢谢!
PS这不是真正的DUP: 如何在尝试打开未安装的本机应用程序时阻止iOS safari警报? 因为他们没有回答LinkedIn的做法(建议的答案不起作用).
他们正在使用智能横幅 API。
从他们的触摸网页上的最小化代码(格式化):
var smartBannerIOS = {};
(function(c) {
c.initialize = function() {
var a = c.createMetaTagContent();
metaBanner = document.createElement("meta");
metaBanner.setAttribute("name", "apple-itunes-app");
metaBanner.setAttribute("content", a);
document.getElementsByTagName("head")[0].appendChild(metaBanner)
};
c.createMetaTagContent = function() {
var a = window.location.hash;
a || (a = "#home");
var b = "";
b = a.indexOf("?") >= 0 ? "&smartbanner=1" : "?smartbanner=1";
var d = $initMetrics && $initMetrics.getServerData();
if (d && d.isLoggedIn)
b += "&logged_in=1";
b += "&session_id=" +
($initMetrics && $initMetrics.sessionId);
return "app-id=288429040, app-argument=" + ("linkedin://" + a + b)
}
})(smartBannerIOS);
smartBannerIOS.initialize();
Run Code Online (Sandbox Code Playgroud)
它的文档可以在这里找到:Apple Dev Docs - Promoting Apps with Smart App Banners
归档时间: |
|
查看次数: |
851 次 |
最近记录: |