看了前面的答案,觉得答的都似是而非。
首先,微信的二维码内容是一个网址,地地道道的网站,并不是上面@耿健桓提到的什么Scheme(如果单单是Scheme,楼主也估计没必要问这个问题了),不过整个交互流程是有用到Scheme的技术的,下面流程会说。
到这一步,我们已经可以撇开二维码扫描工具干扰。
问题归为:通过一个网址,如何优先打开一个App,次优先打开一个下载地址。
整个流程大致可以分为以下步骤
1.(在safari里)输入网址(二维码的核心作用就是让摄像头输入网址,再调用safari打开网址,二维码扫描工具用的就是webkit之类的沙盒模式下的Safari啦)。
2.服务器解析网址
解析的大致过程是这样的,
->首先判断链接访问的设备,这里假设判断的是safari,ios 设备。(根据useagent判断就可以得出)。
->判断出是ios设备后,链接的后台通过js之类的打开 微信自己定义的Scheme URL。
这个时候,如果设备上安装了微信app,系统就是根据Scheme 协议启动微信App,
如果设备上没有按转微信App,通过js打开的url(Scheme URL) 会返回一个undifined的类型。(这里ios系统有一点点用户体验上的不友好,,,,)
这个时候,js再次请求微信Appstore下载的地址,从而打开AppStore上的下载地址。
..
说了这么多,现在有一个机会可以马上看一下效果,而不要知道具体如何实现,你就可以大概猜出怎么实现的。
--2013年7月21日更新例子
ps:虽然不是很了解Andrid的机制,但机理应该差不多。如果友好一点的话只要把Scheme URL 换成AndridScheme URL就可以啦??
Andrid技术参考这里:
browser - How to implement my very own URI schema on Android
-------
pps:@Alex Ling评论里说的也一并放上来,算是完善答案。
Android上的应用可以直接关联url,比如打开http://zhihu.com/whatever就会出现选择是用知乎客户端打开还是用浏览器打开(可以记住选择)