我们也尝试过自己完成这个过程,我会在这里尝试分解不同的步骤。
回到你的例子,关于"记住"设备标识和所有相关数据"id=userA",你是正确的。而且你对iOS应用程序的“沙盒化性质”也是正确的,我假设它意味着网页不能在浏览器应用程序(Safari)之外存储信息,而应用程序(你的应用程序)无法访问其他应用程序(Safari)存储的信息。
我们的解决方案是将此设备数据键值对存储在环境中,该环境既可由浏览器访问,也可由您的应用程序访问,即您的后端服务器。
接下来的问题,也是最大的挑战,是如何通过从浏览器收集的信息来唯一地识别此设备?与原生应用程序不同,浏览器中的JavaScript无法访问IDFAs,后者可用于唯一地识别iOS设备。为了克服这个问题,可以想象使用一组常见信息的组合,这些信息既可由浏览器应用程序访问,也可由您的本机应用程序访问,即操作系统类型、公共IP、屏幕大小等等。请注意,从这些数据字段中构建的组合键并不能保证唯一性(想象两个iPhone 6通过同一路由器访问此网页)。因此,您的后端服务器(假设您正在使用它来存储此键值对)需要拥有一种处理键冲突的策略,例如第二个键删除第一个键,或者您允许碰撞存在,将单个键的多个值排队。这实际上取决于您计划如何使用此技术。
最后一步是在您的应用程序上使用完全相同的字段来形成此组合键,以在您的后端服务器上执行“查找”,以检索先前存储的值。
以下是步骤摘要:
- 用户1通过向2发送以下链接邀请用户2:example.com?inviter=1
- 用户2访问Web页面P
- P构造并将以下键值对发送到您的服务器S iOS | 55.55.55.55 | 750×1334 -> inviter_id = 1
- 用户2前往应用商店并下载了您的App A
- 用户2首次启动A,A使用相同的密钥联系S(假设IP没有改变)。
- S使用传入的密钥查找inviter_id=1的值,并且为邀请2的用户1奖励5个点数。
希望这有所帮助!
编辑04/24:
由于Derrick在评论中提到了这一点,我想利用这个机会在此完成我们的故事。
回到我开始回答时提到的我们已经尝试过自己实现的情况。我们有一个基于我们当前系统架构的工作原型(该架构不适用于存储和分析诸如此类深链接数据),我们最终决定不再为此项目分配任何额外的工程资源。
由于此匹配过程具有启发式特性,我们发现需要不断调试、调整和优化此项目,以获得递减的投资回报率。更重要的是,我们发现其他公司更专业,比我们做得更好。
我们停止使用内部系统已经有大约6个月了,而且我们没有后悔做出这样的决定。
在这个过程中,我们与许多供应商合作,包括Appsflyer、Adjust、TapStream等,最终我们选择了Branch Metrics https://branch.io。
DIY还是与其他公司合作取决于您的具体目标。我们最终决定与Branch保持联系,不仅因为其他供应商每月收费从500美元到数千美元不等,而且他们提供的支持水平是无与伦比的。