在iOS中推迟深入链接

我们试图在我们的iOS应用程序之一中实现延期深度链接,以鼓励用户邀请他们的朋友使用该应用程序,并根据引荐链接发生的安装次数奖励用户。 基本上类似于TapStream的产品 。

考虑这个例子:

因此,UserA在任何他们想要的networking上共享他们的链接“ourappURL.com/refer?id=userA”。 UserB单击该链接,将其带到Safari,然后将其反弹到UserB下载应用程序的App Store页面。

当UserB打开应用程序时,应用程序检查他们进来的引用ID(如果有的话)。 在这个例子中,推荐ID将是“userA”,因为这是推介链接中的ID。 该应用程序然后将其发送到我们的服务器,我们授予UserA与推荐信贷。

我试图把这个问题分解成它的核心部分。 我相信第一部分是获取用户引荐链接的网页,以将引荐ID保存到应用可以访问的设备。 但我不确定这是可能的,因为iOS的沙箱性质。

我知道这从根本上是可能的,因为许多广告提供商能够跟踪广告活动的安装(例如,请参阅移动应用程序跟踪)。

我们也试图自己做这件事,我会尽力打破这里的不同步骤。

回到你的例子,你是正确的“记住”设备标识,所有相关的数据“id = userA”。 你也对“iOS的沙箱性质”是正确的,我认为这意味着网页不允许在浏览器应用(Safari)之外存储信息,应用程序(你的应用程序)无法访问其他应用程序存储的信息苹果浏览器)。

我们的解决scheme是将此设备存储到浏览器以及您的应用(即后端服务器)均可访问的环境中的数据键值对。

接下来的挑战仍然是最大的挑战,那就是如何从浏览器收集的信息中唯一地识别这个设备? 与原生应用程序不同,浏览器中的Javascript不能访问可用于唯一标识iOS设备的IDFA。 为了克服这个问题,我们可以设想,使用浏览器应用程序以及您的本机应用程序(即操作系统types,公共IP,屏幕大小等)的共同信息的组合。请注意,这些数据字段不保证唯一性(想象两个iPhone 6通过相同的路由器访问此网页)。 因此,您的后端服务器(假设您正在使用它来存储这个键值对)将想要有一个关于如何处理键冲突的策略,即第二个键删除第一个键,或者通过让单个键值的队列。 这真的取决于你如何使用这项技术的实际计划。

最后一步是在您的应用程序上使用与之前在浏览器中使用的完全相同的字段在您的后端服务器上执行“查找”以检索之前存储的值。

以下是步骤的总结:

  1. 用户1通过发送以下链接到2:example.com?inviter=1邀请用户2
  2. 用户2访问网页P
  3. P构造并发送以下键值对到您的服务器S iOS | 55.55.55.55 | 750×1334 – > inviter_id = 1
  4. 用户2前往应用程序商店并下载您的应用程序A.
  5. 当第一次启动A时,A用同一个密钥联系S(假设IP没有改变)。
  6. S通过使用这个键传入的值来查找inviter_id = 1的值,比方说,奖励用户1邀请2个5分。

希望这个帮助!

编辑04/24:

由于德里克在评论中提到它,我想我会借此机会在这里完成我们的故事。

回到刚才我提到的答案的开头,我们已经试图自己去做。 我们有一个基于我们当前系统架构的工作原型(这个架构并没有经过优化,或者是为了优化而存储和分析像这样的深层链接数据),我们最终决定不为这个项目分配额外的工程资源。

由于这个匹配过程的启发式特性,我们发现这个项目需要不断的debugging,调整和优化,以降低ROI。 更重要的是,我们发现了其他更专业,比我们做得更好的公司。

我们停止使用内部系统大概已经有6个月了,我们并没有后悔做出这样的决定。

在这个过程中,我们与许多供应商合作,Appsflyer,Adjust,TapStream,最终我们结束了Branch Metrics https://branch.io

你是否应该DIY或与另一家公司的工作取决于你的具体目标。 我们最终决定留在分公司,不仅因为其他厂商每个月从500美元到数千美元的收费,而Branch是完全免费的,而且他们提供的支持水平也是无与伦比的。

这里有一个很好的解决scheme: http : //blogs.innovationm.com/deferred-deep-linking-in-ios-with-universal-link/

基本工作stream程

  • 用户selectnetworking上的域名链接。
  • 链接将引荐ID设置为Cookie。
  • 用户redirect到app store。
  • 在应用程序启动时,在SFSafariViewController中加载引用页面。
  • 引荐页面检查cookie,如果存在,则使用引荐ID调用到应用程序的深层链接。

我们已经成功地使用了剪贴板(NSPasteboard)来实现这一点:处理redirect到应用程序商店的网页在允许用户下载应用程序之前粘贴到移动设备的剪贴板。 应用程序安装完成后,首次启动时会使用NSPasteboard来检查是否有适当的编码string。 该string可以包含感兴趣的文本,或者更安全地包含用于从后端获取有趣数据的标记。 在目标C中:

UIPasteboard *pasteboard = [UIPasteboard generalPasteboard]; NSString *pasteboardString = pasteboard.string; 

一旦应用程序完成,剪贴板可以被清除,以避免重复相同的操作。

我从这里回答

苹果不再支持深层链接。 它现在被称为通用链接,工作方式有点不同。

资源

现在,Apple不再支持用于深度链接的URIscheme,开发人员必须实现Universal Links才能在iOS上正确地进行深度链接。 如果您已经在使用URIscheme,请查看我们的博客,了解如何转换到Universal Links。

来自: 这里

这里是关于Universal Links的另一篇文章,它是什么。