iOS中的延迟深度链接

74
我们正在尝试在我们的iOS应用程序中实现延迟深度链接,以鼓励用户邀请他们的朋友使用该应用程序,并根据从他们的推荐链接安装的数量奖励用户。基本上类似于TapStream的产品
考虑以下示例:
所以,用户A分享他们的链接“ourappURL.com/refer?id=userA”,可以在任何他们想要的网络上。用户B点击该链接,将会带他们到Safari,然后跳转到App Store页面,用户B下载应用程序。
当用户B打开应用程序时,应用程序会检查他们是从哪个推荐ID进来的(如果有)。在这个例子中,推荐ID将是“userA”,因为这是推荐链接中的ID。然后,应用程序将此发送到我们的服务器,我们会授予用户A推荐信用。
我正在尝试将此问题分解为其核心部分。我相信第一部分是获取用户的推荐链接的网页,以将推荐ID保存到设备的某个地方,以便应用程序可以访问它。但我不确定这是否可能,因为iOS的沙盒性质。

我知道这在根本上是可能的,因为许多广告提供商都提供了通过广告活动跟踪安装的能力(例如,参见Mobile App Tracking)。


跟踪设备上广告的安装是不同的,因为它们可以关联IDFA。我不相信你想做的事情是可能的。 - Paulw11
我们也在寻找实现这一点的方法。您是否看过TapStream的博客文章"How We built Deferred Deep Links"(如何构建延迟深度链接)http://blog.tapstream.com/post/74394304157/how-we-built-deferred-deep-links? - Ender2050
@Ender2050 是的,我在原帖中提到了Tapstream。我看过他们的博客文章,但似乎只是一个广告,让人使用他们的服务。我主要想知道如何自己实现这样的功能,而不是依赖第三方。 - Kiran Panesar
Kiran,谢谢。我希望我们能找到一些更好的选择。 - Ender2050
4个回答

81

我们也尝试过自己完成这个过程,我会在这里尝试分解不同的步骤。

回到你的例子,关于"记住"设备标识和所有相关数据"id=userA",你是正确的。而且你对iOS应用程序的“沙盒化性质”也是正确的,我假设它意味着网页不能在浏览器应用程序(Safari)之外存储信息,而应用程序(你的应用程序)无法访问其他应用程序(Safari)存储的信息。

我们的解决方案是将此设备数据键值对存储在环境中,该环境既可由浏览器访问,也可由您的应用程序访问,即您的后端服务器。

接下来的问题,也是最大的挑战,是如何通过从浏览器收集的信息来唯一地识别此设备?与原生应用程序不同,浏览器中的JavaScript无法访问IDFAs,后者可用于唯一地识别iOS设备。为了克服这个问题,可以想象使用一组常见信息的组合,这些信息既可由浏览器应用程序访问,也可由您的本机应用程序访问,即操作系统类型、公共IP、屏幕大小等等。请注意,从这些数据字段中构建的组合键并不能保证唯一性(想象两个iPhone 6通过同一路由器访问此网页)。因此,您的后端服务器(假设您正在使用它来存储此键值对)需要拥有一种处理键冲突的策略,例如第二个键删除第一个键,或者您允许碰撞存在,将单个键的多个值排队。这实际上取决于您计划如何使用此技术。

最后一步是在您的应用程序上使用完全相同的字段来形成此组合键,以在您的后端服务器上执行“查找”,以检索先前存储的值。

以下是步骤摘要:

  1. 用户1通过向2发送以下链接邀请用户2:example.com?inviter=1
  2. 用户2访问Web页面P
  3. P构造并将以下键值对发送到您的服务器S iOS | 55.55.55.55 | 750×1334 -> inviter_id = 1
  4. 用户2前往应用商店并下载了您的App A
  5. 用户2首次启动A,A使用相同的密钥联系S(假设IP没有改变)。
  6. S使用传入的密钥查找inviter_id=1的值,并且为邀请2的用户1奖励5个点数。

希望这有所帮助!

编辑04/24:

由于Derrick在评论中提到了这一点,我想利用这个机会在此完成我们的故事。

回到我开始回答时提到的我们已经尝试过自己实现的情况。我们有一个基于我们当前系统架构的工作原型(该架构不适用于存储和分析诸如此类深链接数据),我们最终决定不再为此项目分配任何额外的工程资源。

由于此匹配过程具有启发式特性,我们发现需要不断调试、调整和优化此项目,以获得递减的投资回报率。更重要的是,我们发现其他公司更专业,比我们做得更好。

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

在这个过程中,我们与许多供应商合作,包括Appsflyer、Adjust、TapStream等,最终我们选择了Branch Metrics https://branch.io

DIY还是与其他公司合作取决于您的具体目标。我们最终决定与Branch保持联系,不仅因为其他供应商每月收费从500美元到数千美元不等,而且他们提供的支持水平是无与伦比的。


9
伊桑,你描述的听起来就像是我们在Branch Metrics所做的事情 :) - st.derrick
1
谢谢!这正是我需要理解的。冲突的机会有多大?比如,如果两个完全相同的iPhone从同一个WiFi连接(比如会议)点击链接会发生什么?是否有更独特于设备的信息? - Nick Ginanto
Ethan,除了免费和支持之外,你为什么选择Branch.io而不是Adjust? - Dat Nguyen
6
由于苹果和安卓不断设法阻止延迟深度链接方法来唯一识别用户/设备,那为什么不允许应用商店接受传入参数,然后在启动时将该参数传递给应用程序呢?这真令人沮丧。 - rolinger

12

我们已经成功地使用剪贴板(NSPasteboard)来实现此功能:处理重定向到应用商店的网页在允许用户下载应用之前将其粘贴到移动设备的剪贴板中。一旦应用程序安装完成,它会在第一次启动时使用 NSPasteboard 检查是否存在适当编码的字符串。该字符串可以包含所需的文本,或者更安全地,是用于从后端获取有趣数据的令牌。在 Objective C 中:

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

应用程序使用完剪贴板后,可以清空剪贴板以避免重复相同的操作。


1
根据此帖子 https://dev59.com/ulsX5IYBdhLWcg3wRNjK ,他们已经在iOS上禁用了通过JavaScript编程向剪贴板粘贴的功能,因此这将不再起作用。 - Doug Voss
1
@DougVoss 只要使用正确的方法(请参见顶部链接的问题)并在单击处理程序中执行,iOS 12 中的编程粘贴功能就可以正常工作。通过在我们的移动 Web 登录页面上点击按钮,这种方法对于我们来说非常有效,以便在用户首次安装应用程序时保持上下文。 - Jeff Camera
可以确认,我已经在iOS 13上测试过了,使用了一个简单的React网站和iOS应用程序。它完美地运行。 - Johno2110
等等,这种方法可行吗?苹果不会拒绝你的应用或者做出其他反应吗?如果我们不使用IDFA,我还需要披露我们进行归因的事实吗? - Nagendra Rao
iOS 14使得这变得更加困难,Safari不允许您在没有实际用户触发的“点击”或“触摸”事件的情况下复制内容,即使您将数据写入手机剪贴板,当您尝试读取它时(一旦用户安装了应用程序),iOS 14也会向用户显示您读取了他们的剪贴板。这不是一个好的体验。最好采用像branch.io这样的解决方案,就像其他答案中所述。 - Nagendra Rao

9

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

基本工作流程:

  • 用户在网页上选择域链接。
  • 链接将推荐ID设置为cookie。
  • 用户被重定向到应用商店。
  • 在应用程序启动时,在SFSafariViewController中加载推荐页面。
  • 推荐页面检查cookie是否存在,如果存在,则使用推荐ID调用深度链接进入应用程序。

是的 - 除非在SFSafariViewController中有一个明确的部分,规定它只能用于向用户可见地显示信息,因此以这种方式使用它基本上是直接违反了那个规则。有问题。 - n13
20
似乎从 iOS 11 开始,Safari 应用程序和 SFSafariViewController 中的 cookie 不再共享,因此这将不再起作用。 - Alexander Vasenin
在2019年,是否有一种方法可以从WKWebViewSFSafariViewController中获取cookie? - William Grand
2
苹果已经淘汰了这种方法。它不再起作用了。 - Nagendra Rao

-8

我的回答来自这里

苹果不再支持深度链接。现在称为通用链接,并且工作方式有些不同。

来源

由于苹果不再支持URI方案进行深度链接,开发者必须实现通用链接才能在iOS上正确进行深度链接。如果您已经在使用URI方案,请查看我们关于过渡到通用链接的博客。

来自:这里

这里是另一篇关于通用链接及其含义的文章。


2
这个问题涉及到延迟深度链接,而通用链接并不能解决这个问题。 - PPierson
OP明确表示需要在用户点击链接(例如Facebook广告)并安装应用程序后,持久化参数,以便将用户带到应用程序的特定部分。 - Lee Andrew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接