iOS自定义URL Scheme XCode

6
首先,我知道如何在iOS中制作自定义方案,并且我知道如何使用javascript setTimeout方法从网站打开我的应用程序。
我有一个使用自定义URL方案的应用程序,它运行良好。它发送http://testsite.com/QueryStrings消息到联系人列表(预定义),并在点击短信中的web链接时发生以下事情:
  1. 在Safari中打开链接
  2. 如果安装了自定义的url,则使用setTimeout打开应用程序
  3. 如果未安装,则移动到正常的网站页面
实际上,我想要的是如果已安装,则直接从短信中打开我的应用程序,但是为此我必须在短信中发送我的自定义URL方案,这不是一个选项,因为如果未安装应用程序,则此短信将无法工作,因此现在只有一个网页链接选项。
今天,我安装了SoundCloud并意外地注意到这件事:当在短信中发送http:// m. soundcloud .com /... url并单击链接时,它会直接打开应用程序(如果安装)而不是Safari(对我来说很奇怪)。
我在想为什么他们的应用程序可以从网页链接中打开而不需要打开Safari。我在谷歌上搜索了一下,但是找不到解决我的问题的方法。我也附上了一个屏幕截图,其中在消息应用程序中按住链接会出现“在SoundCloud中打开”选项。那么SoundCloud如何注册HTTP链接以自动在应用程序中处理?请帮忙解答。

SoundCloud打开的屏幕截图


在我的手机上测试了一下,安装了Soundcloud,但无法像你的图片那样在“SoundCloud”中打开你的链接。这是个诡计吗? - Jonny Vu
不是骗局。只需通过短信或iMessage发送链接,然后点击即可。 - Sarmad Makhdoom
1个回答

2
这个问题的解决方法是使用“关联域名”(但在9.2之后,我们必须使用通用链接来实现)。在通用链接出现之前,打开应用程序的主要机制是尝试在Safari中重定向到应用程序的URI方案(在应用程序的PLIST中注册),这将路由逻辑放在Safari中,但没有办法检查应用程序是否已安装。iOS 9通用链接旨在解决这个问题。当单击链接时,iOS不再首先打开Safari,而是检查与链接关联的域名是否已注册通用链接,然后检查相应的应用程序是否已安装。如果该应用程序已安装,则会打开该应用程序。如果没有安装,则会打开Safari并加载http(s)链接。从功能上讲,它允许您拥有一个单一的链接,可以打开您的应用程序或打开您的移动站点。
配置您的应用程序以注册批准的域名:
1.在developers.apple.com上注册您的应用程序。 2.在您的应用程序标识符上启用“关联域”。 3.在您的Xcode项目中启用“关联域”。 4.添加适当的域权利。 5.确保构建时包含了授权文件。
配置您的网站以托管“apple-app-site-association”文件:
1.购买域名或从现有域名中选择。 2.为域名获取SSL证书。 3.创建结构化的“apple-app-site-association”JSON文件。 4.用SSL证书签署JSON文件。 5.配置文件服务器。
Apple在iOS 9.0中推出了通用链接,将应用程序路由移动到操作系统中,以便开发人员无需担心在JavaScript中执行路由。
在应用程序中接收通用链接URL:
通过App Delegate中的openUrl接收深度链接URL的URI方案。通用链接通过不同的代码路径接收其数据:continueUserActivity。这种新的委托方法用于许多应用程序转换,从Spotlight到Universal Links,并且可能会在未来的OS版本中引入一些其他用例。
下面是一段代码片段,您可以使用它来检索打开应用程序的完整通用链接URL。
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *))restorationHandler {
    if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
        NSString *myUrl = [userActivity.webpageURL absoluteString];
        // parse URL string or access query params
    }
    return YES;
}

来源: https://blog.branch.io/how-to-setup-universal-links-to-deep-link-on-apple-ios-9

在iOS 9及更高版本中,通用链接是一种新的方式,可以将用户直接带到您应用程序内部的特定内容。使用通用链接,用户可以从网页或其他应用程序打开您的应用程序,并立即访问您应用程序内的特定页面,而无需经过多个跳转页面。

通用链接的设置需要在Xcode中进行,其中包括为您的应用程序配置关联域和创建关联文件等步骤。您还需要验证您的域名并在应用程序中实现相应的处理代码。

与传统的URL Scheme相比,通用链接具有更好的用户体验和更高的安全性。它们还可以提高应用程序的发现性和可用性,并提高用户留存率。


2
对于潜在解决方案的链接,我们非常欢迎,但请附加一些上下文信息来描述这个链接,以便您的同行们有一些了解它是什么以及为什么会出现在那里。在引用重要链接的时候,请始终引用与主题最相关的部分,以防目标站点无法访问或永久离线。请注意,“几乎只是一个外部网站链接”可能是为什么和如何删除某些答案的原因之一。 - Tunaki
@Sarmad Makhdoom,通用链接是否支持动态链接?对于我来说,我将拥有基本的URL和终点文本(这是一种兑换代码)。 - Ganesh G

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