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

iOSApp与浏览器深度链接

概念介绍1.深度链接(DeepLinking)深度链接即通过手机浏览器或者微信、QQ等第三方WebView启动自己原生应用,进而跳转到指定页面或者处理指定逻辑。2.延迟深度链接(D

概念介绍

1.深度链接(Deep Linking)

深度链接即通过手机浏览器或者微信、QQ等第三方WebView启动自己原生应用,进而跳转到指定页面或者处理指定逻辑。

2.延迟深度链接(Deferred Deep Linking)

Deferred Deep Linking是指用户点击Web跳转到App的时候,手机并没有安装该App。我们希望用户安装完之后可以Deep link到相应内容,或者标记改用户为某个渠道过来的用户。

使用场景

  • 深度链接的使用场景:

    用户在手机浏览器上浏览了某个商品,点击购买后会跳转的我们自己App的购买页面。

《iOS App与浏览器深度链接》 deep-link.jpg

  • 延迟深度链接的使用场景:
    • 用户在手机浏览器上浏览推广页面点击了下载,跳转到App Store下载应用,启动应用,记录该用户是从推广页面下载的
    • 用户在Web商品详情页,点击购买。去App Store下载应用,启动应用后跳转到刚浏览的页面。

《iOS App与浏览器深度链接》 deferred-deep-link.jpg

解决方案

深度链接iOS中一般使用自定义URL SchemeUniversal links(iOS 9开始引入)实现。已经有完美解决方案,我们在这里不做介绍。下面主要介绍延迟深度链接解决方案。

延迟深度链接需要解决的问题

  1. 点击web页面判断是否安装App,如果安装走Deep linking流程,如果未安装去重定向到App Store下载链接。
  2. 用户下载第一次启动,用户匹配,如何定位是从Web引流过来的。
  3. Deep Linking

实现方案

解决问题的关键是如何在用户不登录的情况下获得用户的唯一标示,因为iOS系统限制,js无法获得系统的唯一标示,这就需要我们自己来创建。

1. 通过剪切板
  • 只支持iOS10以上

  • 跨越浏览器和宿主app限制

  • 复制到剪切板js下载链接 https://github.com/zenorocha/clipboard.js

    iOS相关代码

NSString *str = [[UIPasteboard generalPasteboard] string]

2. 生成设备不完美唯一标示

通过js和app分别采用相同的参数Hash出来一个相同规则的唯一标示,上传到服务器,由服务器模糊匹配在一定时间间隔内是否是该用户操作。

为什么说他是不完美唯一标示呢?

  • iOS系统限制拿不到系统的udid、idfa、uuid等信息
  • js功能有限,拿不到内网IP等唯一确定设备的信息
  • 及时自己生成时间戳等唯一标示也无法采用COOKIE、LocalStorage、SessionStorage共享,因为他们在不同的沙盒下。

我们采用的生成规则是根据屏幕尺寸、操作系统版本和外网IP生成一个并不唯一的唯一标示。这样存在的问题就是相同设备在同一个wifi环境下可能存在误伤。同一设备IP也可能变化。所以后台要有一个时间限制,比如10分钟后拍配到的就当做无效激活。

存在误伤,随着用户量增加误伤增加。

3. SFSafariViewController COOKIE互通方案

iOS9以上可以使用SFSafariViewController共享COOKIE的方式获取。

优点:精准,不会误伤

缺点:

  • iOS10以后必选显示加载SFSafariViewController,把SafariView透明度设置成0或者隐藏不会加载,而且加载的URl不能修改。
  • 只能通过safari,不能借助QQ,微信等第三方app的WebView

实现思路:

  • 用户点击手机浏览器页面上的按钮
  • 把需要保存的信息存入COOKIE,重定向到App Store下载链接
  • 用户下载并启动应用
  • Push或者Present一个SFSafariViewController,公用Safari中的COOKIE浏览web页面
  • Web页面获取到指定COOKIE信息,重定向(URL Scheme方式)应用本身
  • AppDelegate接受OpenURL代理回调处理相应逻辑
4. 集成第三方SDK

现有方案有:

  1. https://branch.io/
  2. https://www.appsflyer.com/
  3. 友盟 http://dev.umeng.com/gxb/apptrack#2_2

前两种是国外产品,可能不稳定。友盟采用的方式就是介绍的第2中方案。

自己实现建议采用1、2两种方式结合的方案,不建议采用3方案,因为限制太多且不稳定

参考文章

https://stackoverflow.com/questions/25855618/deferred-deep-linking-in-ios
http://blogs.innovationm.com/deferred-deep-linking-in-ios-with-universal-link/

更多iOS、Swift、iOS逆向最新文章请关注微信公众账号:乐Coding,或者微信扫描下方二维码关注

《iOS App与浏览器深度链接》 lecoding

icon.jpg


推荐阅读
  • 2012年9月12日优酷土豆校园招聘笔试题目解析与备考指南
    2012年9月12日,优酷土豆校园招聘笔试题目解析与备考指南。在选择题部分,有一道题目涉及中国人的血型分布情况,具体为A型30%、B型20%、O型40%、AB型10%。若需确保在随机选取的样本中,至少有一人为B型血的概率不低于90%,则需要选取的最少人数是多少?该问题不仅考察了概率统计的基本知识,还要求考生具备一定的逻辑推理能力。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 深入解析 OpenSSL 生成 SM2 证书:非对称加密技术与数字证书、数字签名的关联分析
    本文深入探讨了 OpenSSL 在生成 SM2 证书过程中的技术细节,重点分析了非对称加密技术在数字证书和数字签名中的应用。非对称加密通过使用公钥和私钥对数据进行加解密,确保了信息传输的安全性。公钥可以公开分发,用于加密数据或验证签名,而私钥则需严格保密,用于解密数据或生成签名。文章详细介绍了 OpenSSL 如何利用这些原理生成 SM2 证书,并讨论了其在实际应用中的安全性和有效性。 ... [详细]
  • 本文详细介绍了在 Ubuntu 系统上搭建 Hadoop 集群时遇到的 SSH 密钥认证问题及其解决方案。通过本文,读者可以了解如何在多台虚拟机之间实现无密码 SSH 登录,从而顺利启动 Hadoop 集群。 ... [详细]
  • 结城浩(1963年7月出生),日本资深程序员和技术作家,居住在东京武藏野市。他开发了著名的YukiWiki软件,并在杂志上发表了大量程序入门文章和技术翻译作品。结城浩著有30多本关于编程和数学的书籍,其中许多被翻译成英文和韩文。 ... [详细]
  • 对于众多创业公司而言,选择小程序或小视频的发展方向至关重要。本文将深入分析小程序和小视频的特点、优势及局限,帮助创业者做出更明智的选择。 ... [详细]
  • 最详尽的4K技术科普
    什么是4K?4K是一个分辨率的范畴,即40962160的像素分辨率,一般用于专业设备居多,目前家庭用的设备,如 ... [详细]
  • 本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ... [详细]
  • 基于Linux开源VOIP系统LinPhone[四]
    ****************************************************************************************** ... [详细]
  • 在2019中国国际智能产业博览会上,百度董事长兼CEO李彦宏强调,人工智能应务实推进其在各行业的应用。随后,在“ABC SUMMIT 2019百度云智峰会”上,百度展示了通过“云+AI”推动AI工业化和产业智能化的最新成果。 ... [详细]
  • 《我的世界》Java版种子合集:探索多样世界生成
    本文介绍了《我的世界》Java版中用于生成多样化游戏世界的种子代码。这些种子是由一个或多个字符(包括正整数和负整数)组成的值,能够为玩家带来截然不同的地形和环境体验。通过使用不同的种子,玩家可以探索各种独特的地貌、生物群系和结构,从而丰富游戏的乐趣和挑战性。 ... [详细]
  • Keepalived 提供了多种强大且灵活的后端健康检查机制,包括 HTTP_GET、SSL_GET、TCP_CHECK、SMTP_CHECK 和 MISC_CHECK 等多种检测方法。这些健康检查功能确保了高可用性环境中的服务稳定性和可靠性。通过合理配置这些检查方式,可以有效监测后端服务器的状态,及时发现并处理故障,从而提高系统的整体性能和可用性。 ... [详细]
  • 初探性能优化:入门指南与实践技巧
    在编程领域,常有“尚未精通编码便急于优化”的声音。为了从性能优化的角度提升代码质量,本文将带领读者初步探索性能优化的基本概念与实践技巧。即使程序看似运行良好,数据处理效率仍有待提高,通过系统学习性能优化,能够帮助开发者编写更加高效、稳定的代码。文章不仅介绍了性能优化的基础知识,还提供了实用的调优方法和工具,帮助读者在实际项目中应用这些技术。 ... [详细]
  • 在交换机链路聚合中,负载均衡算法通过哈希表实现。每当创建一个新的聚合组时,交换机的底层硬件会生成一个对应的哈希表,该表存储在交换芯片上。哈希表的结构包括索引(Index)和相应的条目,这些索引由硬件支持,用于确定数据包的传输路径。通过这种方式,负载均衡算法能够高效地分配网络流量,提高链路利用率和系统性能。 ... [详细]
author-avatar
vijay
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有