热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

从前端的角度出发–web调起APP

从,前端,的,角度,出发,w

701a023dad36d1f865f8554d25ed69ef659c6ffc
背景

对于APP来说,回流分享页是最好的最便宜的也是最病毒式的拉新方式。让新用户去下载APP是重要的。对老用户来说,可以直接调起APP也是提升用户体验和让用户有侵入式体验的重要手段。所以我们一起来看看有哪些方式可以唤起APP的

概念叙述

调起APP在不同平台用不同的方式,主要就分3个 * URI Scheme * universal Link * Android App Links 现在还是有很多第三方来协助你处理这个事情,通过接入他们的SDK和客户端代码来处理,但是万变不离其宗,所有的第三方也离不开这3种方式。

URI Scheme:
URI Scheme 是iOS,Android平台都支持,只需要原生APP开发时注册 scheme , 用户点击到此类链接时,会自动唤醒APP,借助于 URL Router 机制,则还可以跳转至指定页面。
1. : [ ? ] [ # ]
:是scheme的名称,代表着协议名称。
:它包含 authority 和 path。
:可选项目,隔开或&隔开的键值对=
:可选项目包,其它额外的标识信息 例如: git://github.com/user/project-name.git ftp://user1:1234@地址 musically://musical?id=xxxx&key=xxxx
2.universal Link:
iOS9 后推出的一项功能,通用链接,对于前端即访问一个https的url,如果这个url带有你提交给开发平台的配置文件中匹配规则的内容,iOS系统会去尝试打开你的app,如果打不开,系统就会在浏览器中转向你要访问的链接。
universal Link 工作方式如下:
访问web link
iOS访问 https://xxxxxxx/apple-app-site-association 并解析,获取文件中的信息(App的Team ID和Bundle ID)
通过Bundle ID 检查本地是否存在对应app,和检查PATH信息等,如果有app打开app,如果没有则跳转对应web link(可通过代码实现跳去app Stroe)
3.Android App Links:
在2015年的Google I/O大会上,Android M宣布了一个新特性:App Links让用户在点击一个普通web链接的时候可以打开指定APP的指定页面,前提是这个APP已经安装并且经过了验证,否则会显示一个打开确认选项的弹出框,只支持Android M以上系统。
简单的说就是建立APP和某个链接的关联,避免系统在处理该类型链接时弹出选择框。弹框最常见的就是浏览器打开时的选择框。弹出选择框是应用注册了相应scheme,applinks的作用是避免在打开自己域名的链接时弹出选择(前提是注册了相应scheme),可以实现直接打开自己关联的app。

对比/优劣

60ed1661888195534a4b67e8668b5e55b3e649e8

URI Scheme: 根据图片可以看到URI Scheme的兼容性是最高,在使用的过程中,会发现有很多限制:
当要被唤起的app没有安装时,这个链接就会出错。在国内非常杂乱的浏览器中,会出错的现象会很多种类型。
当注册有多个scheme相同的时候,目前没有办法区分。
不支持从其他app中的UIWebView中跳转到目标app 也就因为会有这些原因,apple和android都出现了自己第二套解决方案。
universal Link 从链接上看来,是一个web link,所以也就解决了当没有app时,跳转也不会出现报错,所以相对Scheme优势就提现出来了.
当已经安装app,不需要加载任何web页面,app就会立即启动;app没有安装,就会跳去对应的web link。
universal Link 是从服务器上查询是哪个app需要被打开,所以不会存在冲突问题
universal Link 支持从其他app中的UIWebView中跳转到目标app
隐私性,提供universal Link给别的app进行app间的交流,然而对方并不能够用这个方法去检测你的app是否被安装。 当然universal Link也不是十全十美的,缺陷也是存在的:

会记住用户的选择:在用户点击了Universal link之后,iOS会去检测用户最近一次是选择了直接打开app还是打开网站。一旦用户点击了这个选项,他就会通过safiri打开你的网站。并且在之后的操作中,默认一直延续这个选择,除非用户从你的webpage上通过点击Smart App Banner上的OPEN按钮来打开。

89349a192d33f899275e90b7ce6938004ef41eb0

app link 和 universal Link 差异不大。也是为了更好的提供调起app出现的google的方案。优点与 universal Link 差不多,缺点主要如下:
国内的支持相对较差,在有的浏览器或者手机ROM中并不能链接至APP,而是在浏览器中打开了对应的链接。

在询问是否用APP打开对应的链接时,如果选择了“取消”并且“记住选择”被勾上,那么下次你再次想链接至APP时就不会有任何反应

15c3de8f061a81eba53b3a7f594ada266f116d38

无论哪一种方式目前都没有解决几个问题: * 如果设备上没有安装这个app的时候,安装完毕后,无法保留住此时用户停留的上下文。 * 因为web没有办法监听到APP是否安装,所以都需要通过一些手段来兼容调起app或者是去下载页

使用 & 需要注意的内容

1.URI Scheme:
使用: 这种方式是当期使用最广泛,也是最简单的,但是需要手机,APP支持 URI Scheme 。

需要注意的内容 & 遇到的问题: 其实使用URI Scheme 部分前端没有太多可以排查的问题,会遇到的问题主要是两个部分。1. 在android的兼容性处理(国内的浏览器无力吐槽ing),2. 当没有安装app的情况,URI Scheme 会有各种报错,也需要处理…

f1d77ed920089230f5162a225bebae0e647378ba

2.universal Link & app Links
使用:对于有app的用户,只是打开一个连接,但是需要注意的是需要考虑到没有APP的用户。(个人的解决方案:针对域名来判断,当域名为特定的universal Link 的域名,则跳转去下载页面)
需要注意的内容 & 遇到的问题:
● apple-app-site-association 和 assetlinks.json 的配置
● 需要保证使用的链接跨域(universal Link)
● 直接将universal Link 贴入浏览器的url中不会生效
● window.onload 或者用户没有任何事件触发的情况下,universal Link也不会生效

两大平台的特殊处理(facebook & twitter)

facebook 和 twitter 作为国外的两大信息聚合平台,对于在他们app中调起app也有自己的一套方式。 根据要求通过添加META头来处理打开APP facebook:

<meta property="fb:app_id" content="xxxxxx" />

<meta property="og:type" content="xxxx"/>

<meta property="og:title" content="xxx" />

<meta property="al:ios:url" content="{{ uri scheme }}" />

<meta property="al:android:url" content="{{ uri scheme }}" />

<meta property="al:ios:app_store_id" content="{{app_store_id}}" />

<meta property="al:ios:app_name" content="{{xxx}}" />

<meta property="al:android:app_name" content="{{xxx}}" />

<meta property="al:android:package" content="{{android:package}}" />

twitter:

<meta name="twitter:card" content="app" />

<meta name="twitter:site" content="xxxxx" />

<meta name="twitter:title" content="xxxxx" />

<meta name="twitter:description" content="xxxxxxx" />

<meta name="twitter:image" content="xxxx" />

<meta name="twitter:app:name:iphone" content="xxx">

<meta name="twitter:app:id:iphone" content="xxx">

<meta name="twitter:app:url:iphone" content="{{Scheme}}">

<meta name="twitter:app:name:ipad" content="xxx">

<meta name="twitter:app:id:ipad" content="xxx">

<meta name="twitter:app:url:ipad" content="{{Scheme}}">

<meta name="twitter:app:name:googleplay" content="xxx">

<meta name="twitter:app:id:googleplay" content="xxx">

<meta name="twitter:app:url:googleplay" content="{{Scheme}}">

使用 checkList(前端)

1.scheme
iOS 和 android 是否已经支持 此scheme
js处理兼容代码
2.universal Link (apple-app-site-association 官方文档)
HTTPS的域名
iOS9 以上
universal Link 是否跨域
universal Link的落地页是否是下载页面
apple-app-site-association 配置在 host的根目录和.well-known下
官方检测: apple-app-site-association 检测
apple-app-site-association会在第一次打开app或者更新app时候会去拉去,所以确认是否更新了apple-app-site-association后没有更新过app
检查apple-app-site-association paths 大小写敏感 支持通配符
该设备的用户选择了直接打开app还是打开网站,如果选择打开网站,需要通过smart banner 重新启用
跳转处理是否是在用户事件中触发,而不是进入页面后直接触发
3.app links (android app links官方文档)
HTTPS的域名
跳转后的落地页是否是下载页面
assetlinks.json 配置在 host的.well-known下
官方生成/检测: android app links检测
4.facebook (facebook app link官方文档)
将需要的meta头信息填充完毕
检测链接 分享调试器 – Facebook for Developers , 确认分享链接中获取到了所需要的meta头
分享过的链接会有缓存,在检测中清楚缓存
如果web和wap链接一致,确认在web中也添加了相同的meta头,facebook会默认从web中获取
5.twitter (Twitter app card官方文档)
将需要的meta头信息填充完毕
检测链接 Twitter app card 检测
如果web和wap链接一致,确认在web中也添加了相同的meta头,facebook会默认从web中获取

链接

webview如何屏蔽universal Link
apple-app-site-association 官方文档
apple-app-site-association 检测
android app links官方文档
android app links检测
facebook app link官方文档
分享调试器 – Facebook for Developers
Twitter app card官方文档

Twitter app card 检测


原文发布时间为:2018-09-9

本文来自云栖社区合作伙伴“前端大学”,了解相关信息可以关注“前端大学”。


推荐阅读
  • vue使用
    关键词: ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • ShiftLeft:将静态防护与运行时防护结合的持续性安全防护解决方案
    ShiftLeft公司是一家致力于将应用的静态防护和运行时防护与应用开发自动化工作流相结合以提升软件开发生命周期中的安全性的公司。传统的安全防护方式存在误报率高、人工成本高、耗时长等问题,而ShiftLeft提供的持续性安全防护解决方案能够解决这些问题。通过将下一代静态代码分析与应用开发自动化工作流中涉及的安全工具相结合,ShiftLeft帮助企业实现DevSecOps的安全部分,提供高效、准确的安全能力。 ... [详细]
  • Python项目实战10.2:MySQL读写分离性能优化
    本文介绍了在Python项目实战中进行MySQL读写分离的性能优化,包括主从同步的配置和Django实现,以及在两台centos 7系统上安装和配置MySQL的步骤。同时还介绍了创建从数据库的用户和权限的方法。摘要长度为176字。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
author-avatar
夏慕晚阳
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有