Web网页启动app及传参的方式

一、网页启动APP

由于安全隐私的原因,目前网页端无法通过js脚本直接判断某个APP是否已安装,只能首先通过js尝试性的启动app,然后再进入安装流程。web网页上启动app的方式有两种:

1. schema

android与ios均支持自定义schema,通过访问自定义schema的url即可启动对应的app,如weixin://dl/scan这个url,这里的weixin就是自定义的schema。
js启动app的具体方法主要有iframe.src,window.location等,如下:

1.
var iframe = document.createElement("iframe");
iframe.style.display = "none";
iframe.src = schemaUrl;
document.body.appendChild(iframe);
2. 
window.location=schemaUrl;

某些浏览器由于人为限制无法直接使用schema启动app,如微信与qq的内置浏览器以及android下的百度浏览器。但微信与QQ中,可以通过集成应用宝的微下载来启动app,应用宝的具体情况下面详细介绍
目前主要通过监听各种dom事件(如:pagehide,visibilitychange,unload等)或通过setTimeout根据时间差来(早期ios系统中,通过schema可立即启动app,同时导致浏览器js脚本暂停运行,脚本恢复运行时通过时间差就能大致的判断app是否启动成功)。但由于现实情况下,由于各种浏览器与系统的差异性,无法通过js百分百的准确判断app是否启动成功;比如从ios9.2开始,通过schema启动app时,ios系统会弹出一个非模态的系统提示框,询问用户是否同意启动,在用户没有做出选择前,js脚本将继续运行,这将导致js完全无法判断app是否启动成功。

2. 通用链接(universal link)

ios9开始提供通用链接的特性,app开发时可配置一个与app对应的关联域名,在ios9以上系统的所有浏览器中,访问任何一个url链接前,系统将检查本地是否已安装与url域名相对应的app,如果已安装对应的app,将进一步检查链接url的路径,是否应当启动该app,而不在浏览器中访问此url链接。 但是通用链接存在一个容易让人迷惑的地方,在经过通用链接启动app后,用户可以选择使用safari访问此url,系统会默默的记住用户的选择,在下次访问通用链接的url时,系统将不再启动app,而是直接在浏览器中访问此url,并且没有明显的提示;(在safari中,用户只有手动往下拽了该页面时,才会出现一个询问用户打开app的banner,其它浏览器则未必有此功能,而是完完全全的忽略掉通用链接)

3. 应用宝微下载

正常情况下,微信内置浏览器中,无法通过schema启动app,无法下载apk,也无法跳转到app store,但微信与QQ均集成了对应用宝的支持。通过使用应用包的微下载功能,android下的微信与QQ帮助判断某个app是否已安装,已安装的情况下,提示用户直接启动app(在应用宝中需配置启动用的schema),未安装的情况下,可直接下载已上架到应用宝的apk文件;ios下,由于无法判断某个应用是否已安装(特别是ios>=9.2出现的提示窗口),应用宝只提供了跳转app store的功能,而没有启动app的功能。的忽略掉通用链接)

二、网页直接向app传递数据

通过适当的方法,在用户访问某个web网页时,可直接向本机的app传递任意自定义的数据;即使当前app尚未安装,在引导用户完成安装后,app启动后亦可恢复获取web网页上的数据。

1. app当前已安装

无论是通过schema还是universal link来启动app,均可直接将数据附在url上,android/ios app中,通过解析启动的url即可获取数据.

2. app当前未安装

考虑到app尚未安装的情况,访问web网页时如需向app传递数据,可将数据暂存在服务器上,待app首次启动时再恢复。恢复数据的方式大致分两种:

(1) 通过采集设备各种关键信息做大致的匹配

由于安全隐私的限制,目前尚无法在浏览器中获取设备的唯一ID来匹配,本质上只能靠猜;但在大部分实际应用场景中,通过采集ip、设备型号、系统版本等关键信息,也可获得可观的匹配成功率;目前国内android浏览器品种繁多五花八门,需耗费大量的兼容性测试工作。

(2) 100%精准恢复数据

android下,每次下载时在服务器实时生成一个新的apk包,直接将数据附带到apk包中,即可100%精确的恢复数据;
ios下大致有两种方案:

  1. 是使用企业证书通过ad-hoc的方式来安装app,下载安装时服务器可实时生成一个新的ipa包;但ios9开始对企业证书签发的app有了更严格的使用限制,使用app的用户需到设置中手动开启对企业证书的信任开关,体验很差。
  2. 是ios9开始引入一个新的类SFSafariViewController, app可使用SFSafariViewController启动一个单独的safari进程,这个safari进程与safari浏览器共享cookie,只要未禁用safari的cookie,我们就可通过共享的cookie来完成safari到app的追踪,具体做法如下:
  • 在使用safari访问web网页时,服务器生成一个唯一的server_id写入cookie,同时将这个id与将要传递给app的数据关联起来(当然也可直接将要传递的数据当成server_id写入cookie中,但需考虑cookie大小的限制)
  • app首次启动时,随机生成一个client_id(需尽量保证全局唯一),然后使用SFSafariViewController启动一个safari进程访问一个url,通过这个特定的url将client_id发送给服务器(比如使用url参数),这个url与步骤1中的协议,域名,路径保持一致,safari进程将同时携带步骤1中写入cookie中的server_id给服务器,服务器收到请求后,即可建立client_id与server_id的唯一对应关系
  • app发送步骤2中生成的client_id给服务器,服务器即可找到对应的server_id,继而找到web网页中绑定的数据返回给app

来源 http://www.openinstall.io/content.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容