不需要确认提示的自定义URL scheme(Swift)

12
我在 Safari 网页中找到了两种打开我的应用的方法:在我的应用项目的 Info.plist 中创建一个自定义 URL 方案或使用苹果的Universal Linking。显然,自定义 URL 方案是最容易设置的,但我遇到的问题是 Safari 会先显示一个确认窗口“打开 myapp?”然后用户必须点击 OK 才能实际打开该应用。我希望应用程序在方案被打开时自动打开,并且有人告诉我唯一的方法是通过 Universal Linking(如果这不正确,请纠正我)。如果是这样,我想知道是否有可能将所需的 apple-app-site-association 文件放在 http:// 域上而不是 https://?根据官方的 Apple 文档,正确的 Universal Link 格式明确以 https:// 开始,但是我的域名不能在没有重定向几次的情况下加载 https://,这会破坏我编写的用于执行其他任务的 Web 服务。在这个问题之后,我还剩下两个主要问题:
1) 使用自定义 URL 方案(myscheme://)真的无法绕过确认提示吗?如果不是不可能,我该如何做?
2) 如果我必须使用 Apple Universal Linking,我可以使用 http:// 域吗?如果可以,我该怎么做?现在,如果我加载通用链接,它只显示 apple-app-site-association 文件中的字典,我很确定这不应该发生。我被告知它应该向我的 app delegate 发送NSUserActivity对象,如何使用http://链接实现它?

1
你能够实现这个吗?如果可以,请在这里发布。提前致谢。 - Tejas K
@mark-carols,我也有同样的使用情况:客户有一个iOS应用程序,他被重定向到浏览器进行付款,然后在付款完成后,我需要自动将客户从浏览器重定向到应用程序以完成付款,而不需要任何确认。如果客户看到确认并取消了从浏览器到应用程序的重定向,那么我将无法正确完成付款。 所以你能找到解决方案吗? - AbstractVoid
2个回答

9
触发自定义URI方案时不可能不向用户显示警报。在iOS 8中,这是可能的,但在iOS 9中,所有应用程序都开始显示警报。并且iOS 10.3甚至将此扩展到了App Store本身。您无法绕过此问题。创建通用链接来替换此行为的URI方案,因此您确实需要使用它们。
根据您的描述,我认为您可能误解了通用链接的工作方式。首先回答您提出的文字问题,通用链接URL本身不需要在https://协议上,而apple-app-site-association必须在没有重定向的情况下通过https://进行服务。
然而,听起来您正在尝试为每个通用链接提供apple-app-site-association文件的内容。这不是正确的实现方式-- AASA文件仅在https://example.com/apple-app-site-association上托管,iOS在应用程序安装时会自动检索它。之后,任何符合AASA文件中标准的example.com URL均符合通用链接的条件。
话虽如此,您真的不想自己构建此系统。我建议您研究Firebase动态链接或Branch.io(完整披露:我在Branch团队)。

1
好的,我想我应该更清楚地说明我的用例。我的情况实际上并不是很复杂:我在我的应用程序中有一个按钮,点击后会打开 Safari 中的 URL,在网页上完成付款。用户完成付款后,预定的 URL 应该打开,并且这个 URL(可能是方案或通用链接?)必须重新打开应用程序,并从用户离开的网页继续操作。我不希望用户在付款完成后看到确认提示。这个从网页返回应用的过渡应该自动发生。 - Mark Carols
1
基本上,我需要的只是一个有效的URL,我可以将其作为返回URL传递,在支付过程完成后打开。这个URL应该在不要求确认的情况下打开应用程序。看起来这个过程并不复杂,以至于我必须使用Firebase或Branch来完成,因为这只是一个URL,将我从一个预定的起点带到一个预定的目的地。 - Mark Carols
1
我无法使用内置的Web视图,因为它们不允许用户打开应用程序,这对于完成支付可能是必要的(例如,银行应用程序如PayPal)。 - Mark Carols
2
我之所以努力让这项工作正常运行,是因为我正在实现一个支付SDK,而该SDK明确告诉我不要在Web视图中处理付款,因为它不会起作用。即使那个SDK没有告诉我,我也会知道它不会起作用,因为我有丰富的经验在我的iPhone上进行付款,并且我使用过的每个付款应用程序都会打开Safari来验证付款。这也有原因。 - Mark Carols
1
据我所知,如果没有使用通用链接,这是不可能的。如果你找到了方法,请发表你自己的答案并分享你的发现。 - Alex Bauer
显示剩余7条评论

0
这是关于编程的内容。是否真的不可能使用自定义URL方案(myscheme://)绕过确认提示?如果不是不可能,我该如何做到这一点?
这是通过一些hacky技巧和糟糕的用户体验来实现的。它需要用户按下“添加到主屏幕”按钮,因此我不建议在大多数情况下使用此解决方案。
1. 将您的应用程序方案设置为myapp。 2. 创建以下HTML文件并将其放入Web中。
``` window.onload = function() { if (("standalone" in window.navigator) && window.navigator.standalone) { window.location.href = 'myapp://open' } } ```
3. 使用Safari打开HTML文件并“添加到主屏幕”。 4. 打开主屏幕图标,您的本机应用程序将启动。
重点是meta标签。
<meta name="apple-mobile-web-app-capable" content="yes" />

否则,Safari将会启动并出现确认提示。


1
这似乎不是一个非常方便的解决方案,如果用户首先必须将网页添加到主屏幕才能使其工作。 - rodskagg
1
没错。我在搜索“添加到主屏幕”功能时发现了这个可能性,所以分享了这个信息。如果这个答案不适合你的问题,很抱歉。 - Kazuya Gosho

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