如果 iOS 设备上未安装应用程序,通用链接将不起作用

Posted

技术标签:

【中文标题】如果 iOS 设备上未安装应用程序,通用链接将不起作用【英文标题】:Universal link not working if app is not installed on an iOS Device 【发布时间】:2017-11-22 12:01:50 【问题描述】:

我已经在我的应用程序和服务器端实现了通用链接。安装应用程序后一切正常。如果设备上未安装该应用程序,并且我单击笔记或邮件中的通用链接,我将被重定向到可以下载该应用程序的应用程序商店。但是,在下载完成后,如果我在应用商店页面中单击“打开”,则不会调用下面的应用委托方法:

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray * __nullable restorableObjects))restorationHandler

因此,我无法执行某些操作来响应userActivity.webpageURL,而我通常会在应用程序正在运行或之前安装在设备上时收到这些操作。这是正常行为吗?即如果未安装应用程序,通用链接将仅用作从应用程序商店安装应用程序的媒介?

【问题讨论】:

这个问题可能是interesting article (来源:Apple),这是关于如何通过 关联文件。 【参考方案1】:

这正是通用链接应该如何工作的。 如果用户没有您的应用,则下载是一个全新的会话,而不是持续的用户活动。

我相信 branch.io 提供的 SDK 允许新安装的连续性。

编辑:

好的,我做了一些挖掘,这称为延迟深度链接。 Apple 通用链接不正式支持它。

但这基本上是分支是如何做到的:

当新用户访问您的站点时,您会在 您网站的 cookie。 然后当应用程序第一次打开时,你检查一下 使用 SafariServices 的令牌 如果存在令牌,请运行您的连续性代码。

这里有更详细的article 关于 ios 中所有链接类型的信息。

【讨论】:

嗯。虽然这确实是有道理的,但有一个选项来保持连续性会很好。除了 Branch,还有什么建议可以如何实现?我知道上述行为不会发生在 android 上,尽管它是一个不同的生态系统:( @akdsouza 有办法(黑客?)做到这一点。检查我编辑的答案。 感谢@ahbou,它看起来确实像个黑客。 +1 的努力。如果没有发布其他非 hacky 解决方案,则会将答案标记为已接受。 另一个提供延迟深度链接的提供商是 Firebase 动态链接。关于您提到的 cookie 方法:iOS 11 不允许在 Safari 和 SFSafariViewController 之间共享 cookie。【参考方案2】:

唯一的方法是通过设备指纹识别机制。这就是 Branch、Adjust、GetSocial、Appsflyer、Tune、Kochava 等提供商执行上下文深度链接、延迟深度链接、归因和跟踪的方式。

如果您不想使用上述任何提供程序,并且只想要一个非常基本的设备指纹识别机制,那么您可以只使用 IP 地址来实现。 This 是来自 Tune 的一篇非常好的文章,介绍了用于归因的不同方法。

(免责声明:我是 GetSocial 的创始人)

【讨论】:

以上是关于如果 iOS 设备上未安装应用程序,通用链接将不起作用的主要内容,如果未能解决你的问题,请参考以下文章

通用链接在真实设备上不起作用

安装了 TestFlight 的应用程序 iOS 15 的设备上未显示应用程序图标

安装了 iOS 12 或更高版本的 iOS 设备上未显示 Chrome cast 图标

如果应用程序已通过深层链接打开,Android 深层链接将不起作用

iOS Universal Links(通用链接)

IOS 模拟器上未处理的电话号码