10

我找到了两个从 Safari 网页打开我的应用程序的选项:在我的应用程序项目中创建的自定义 URL 方案Info.plist或 Apple 的通用链接。显然,自定义 URL 方案是最容易设置的方案,但我遇到的问题是 Safari 显示一个确认窗口,询问“打开myapp?” 首先,用户必须在应用实际打开之前点击确定。我希望我的应用程序在打开方案时自动打开,并且有人告诉我这样做的唯一方法是通过通用链接(如果这不是真的,请纠正我)。但是,如果这是真的,我想知道它是否 apple-app-site-association可以以任何方式将所需文件放在http://域中,而不是https://?根据 Apple 官方文档,正确的通用链接的格式以明确开头https://但是如果不重定向几次就无法加载我的域名https://,这会弄乱我为在我的应用程序中执行其他任务而编写的 Web 服务。在这个问题之后我留下的两个主要问题:

1) 使用自定义 URL 方案 ( ) 是否真的无法解决确认提示myscheme://?如果不是不可能,我该怎么做?

2) 如果我必须使用 Apple Universal Linking,我可以使用http://域吗?如果是这样,我该怎么做?现在,如果我加载通用链接,它只会在apple-app-site-association文件中显示字典,我很确定这不应该发生。我被告知它应该向NSUserActivity我的应用程序委托发送一个对象。如何通过http://链接完成此操作?

4

2 回答 2

8

如果不向用户显示警报,则无法触发自定义 URI 方案。这在 iOS 8 中曾经是可能的,但 iOS 9 开始为所有应用程序显示警报。iOS 10.3 甚至将其扩展到了 App Store 本身。你不能绕过这个。创建通用链接是为了替换此行为的 URI 方案,因此您确实需要使用它们。

根据您的描述,我相信您可能误解了 Universal Links 的工作原理。要回答您首先提出的字面问题,不,通用链接 URL 本身不需要协议上https://,是的,apple-app-site-association 必须https://没有重定向的情况下提供服务。

但是,听起来您正在尝试apple-app-site-association为每个通用链接提供文件内容。这不是正确的实现方式——AASA 文件仅托管https://example.com/apple-app-site-associationiOS 会在安装应用程序时自动检索它。之后,example.com与 AASA 文件中的条件匹配的任何 URL 都将符合通用链接的条件。

综上所述,你真的不想自己构建这个系统。我建议查看 Firebase Dynamic Links 或Branch.io(完全披露:我在 Branch 团队)。

于 2017-04-20T05:54:42.090 回答
0

1) 使用自定义 URL 方案 (myscheme://) 解决确认提示真的不可能吗?如果不是不可能,我该怎么做?

这是可能的

1)设置您的应用方案,如myapp

2)创建以下html文件并放入web

<html>
  <head>
    <link rel="apple-touch-icon" href="https://myapp.com/path/to/shortcut-icon.png" />
    <meta name="apple-mobile-web-app-capable" content="yes" />
  </head>
  <script>
    window.onload = function() {
      if (("standalone" in window.navigator) && window.navigator.standalone) {
        window.location.href = 'myapp://open'
      }
    }
  </script>
</html>

3) 用 safari 打开 html 文件并“添加到主屏幕”

4)打开主屏幕图标,您的原生应用程序将启动

重点是元标记。

<meta name="apple-mobile-web-app-capable" content="yes" />

没有这个,safari 将启动并出现确认提示。

于 2018-10-08T12:48:48.947 回答