在APP的使用场景中有一种情景,在某款APP中看到一种活动转发好友注册可赚取佣金,因而直接在应用内点击分享发送给微信好友,微信好友看到的是个URL连接形式的消息,点击连接,微信内置浏览器打开H5页面并提示是否在应用内打开,点击打开按钮,假如手机里有安装该应用,则会无缝打开,注册后转发者将会获取5枚金币;无应用跳转至App Store应用市场。html
### 一键拉起(applink)
URL Schemes (ios 9.4以前)
Universal Link (ios 9.4以后)
### 记录用户链
???
复制代码
咱们利用apple原生提供的Universal Link咱们能够实现吊起应用,相关的技术点可参考苹果官方文档或相应的技术栈博客这里就再也不赘述。ios
由于咱们无论不管用户A与用户B如何去创建起来连接,中间必定要有一层中间件用于保存二者的公共信息用做比较从而肯定其惟一性。这个中间件能够视做为服务器,或者是手机本地缓存。web
咱们先来分析一下咱们能够用哪些方式来实现这个功能算法
这种情景的实现须要用户A在分享出去的连接并同时发送一个注册邀请码,可由后台生成并绑定用户A的ID做为惟一标识,用户B在打开连接后看到页面的同时也能够看到该邀请码,当打开应用后的注册阶段,须要填入邀请码,注册成功,并上传至服务器信息包含新用户ID + 邀请码。服务器开启规则判断,若是存储的邀请码中有跟以前重复的字段,则开启查找邀请者,并下发用户A以相应的奖励数据api
这种实现场景其实跟上条中的方案大同小异,只不过是将邀请码转换为图片的形式进行处理,逻辑上少了新用户手动输入邀请码的步骤,但却多了须要用户将此二维码保存相册或开启相机扫描的步骤浏览器
上述的两种方案中确实能够实现如何将用户关系进行联系起来,现有的APP中也有这种作法并规模化的。然而暴露出的问题是繁琐性及用户有感知体验缓存
而如何要求其是用户无感知,咱们想到如下的一些方案安全
这种场景的实现方式为,用户A分享连接中携带有隐藏拼接的邀请码,新用户在H5页面中打开时同步操做对此连接进行隐藏复制。继而新用户在打开APP的注册页面时,利用[UIPasteboard generalPasteboard]系统API剪贴板方法进行查找复制,过滤出该邀请码以后连同注册请求一块儿上发到服务器,进行对比查找可对应上用户关系bash
该方案有个前提是须要用户Safari浏览器打开H5页面,获取到该设备的UDID+用户A的 ID后上传服务器,在注册阶段时再利用iOS原生获取该设备的UDID+新用户ID上传,服务器对比后下发信息。参考连接:www.skyfox.org/safari-ios-…服务器
iOS系统基于OSX,其也有文件系统的访问权,/private/var/folders。具体实现思路为新用户在打开H5页面以后同时保存用户A的ID保存至该文件下(不知道具体怎么作),打开APP以后注册阶段再利用iOS方法获取到该文件夹下的信息+新用户ID上传服务器,作用户ID校验。
上图为利用爱思助手打开的iPhone文件管理
在用户之间的关系链被创建起来的基础之上,还需为其加固确保链条之间的稳固性 诸如:
1.用户之间是否为办公室同事或家庭成员(获取WiFi网络IP做为协助参数)
2.用户之间是否位于同一区域(获取地理坐标做为协助参数)
3.是否能够在H5页面上作文章已实现web端对设备的个性化采集更为丰富
...
复制代码
在这诸多的条框以外还要有更多的额外需求:
而为了如何确保全部场景下都能打通;
而如何肯定其稳定性及准确度;
而如何确保相同设备重复不断的安装恶意刷单等
故无感知记录关系链中最重要的核心是准确度。而要达到这种看似简单的逻辑下是须要通过一套复杂的算法来加持,能在H5页获取到该用户的信息越多,其在锁定用户的标准阈值越高,就会越准确。
如今市面上已经有一些比较成熟的三方SDK库来较好的实现需求,然而对于技术的追求应该是一种态度,学而不思则罔,即便作到尽量准确也是对于技术瓶颈的突破。