我们有一个处理自定义 URL 方案 (vstream://) 的应用程序。当有人访问包含一些 vstream:// 内容的网页时,如果他们没有安装我们的应用程序,我们需要将他们重定向到商店。
在 iOS 中,我们这样做:
setTimeout(function() {
window.location =
"itms://itunes.apple.com/us/app/kaon-v-stream/id378890806?mt=8&uo=4";
}, 25);
window.location = "vstream:view?code=...stuff...";
如果window.location
分配失败,超时会在对话框出现之前跳过 App Store。(我在这里找到了这种技术:Is it possible to register a http+domain-based URL Scheme for iPhone apps, like YouTube and Maps?.)
不幸的是,这个技巧在 Android 中不起作用。我们检测到设备服务器端并写了这个而不是 itms: 行:
"market://details?id=com.kaon.android.vstream";
问题是,当您转到未处理的 url 方案时,iOS 会引发错误,而 Android 会转到生成的页面。因此,超时永远没有机会运行。
网页上是否有某种方法可以明确测试是否处理了自定义 URL 方案,或者有人可以建议像这样在 Android 中工作的黑客吗?(当然,我想我需要一个无论他们使用什么浏览器都能正常工作的 hack,这可能是一项艰巨的任务......)
更新:以下方法在 Nexus 7 上的 Jelly Bean 中不起作用。新的 Chrome 浏览器不会转到生成的页面(因此不需要 iFrame),但似乎没有任何方法可以知道 URL 是否方案得到处理。如果是,则无论如何都会触发超时。如果未处理超时触发。如果我使用 onload 处理程序和 iframe,onload 处理程序永远不会触发(无论是否安装了应用程序)。如果我知道如何知道该计划是否得到处理,我会更新......
我已经删除了我之前的解决方案中的“已解决”,因为它不再起作用了。
更新 2:我现在有一个很好的跨平台解决方案,适用于 iOS、带有 Chrome 的 Android 4.1 和 Android pre-Chrome。见下文...
更新 3:谷歌再次故意破坏一切。看看我在某处的 amit_saxena 接受的非常好的解决方案/