iOS 9 safari iframe src与自定义网址方案无法正常工作

Kir*_*ill 32 safari ios ios9

如果安装了应用程序,我会使用此解决方案https://gist.github.com/davidwkeith/2662899从Web重定向到我的应用程序.但它在ios 9中被打破.它仍然可以在谷歌浏览器中使用,但iframe与自定义网址方案没有在safari中启动应用程序.

如果我更换

document.getElementById('loader').src = 'custom-protocol://my-app'
Run Code Online (Sandbox Code Playgroud)

(加载器是iframe)

window.location = 'custom-protocol://my-app'
Run Code Online (Sandbox Code Playgroud)

它会起作用.

os:iOS 9 beta4和beta5

有人知道这个问题吗?它是ios 9 beta bug吗?或者它不会被修复?

st.*_*ick 17

之前的答案是Universal Links的部分实现,它缺少关键细节,不包括App Store的后备.

首先,您不能再设置iframe src以触发URI方案.您已正确识别该问题.如你所知,你仍然可以设定window.location = 'custom-protocol://my-app';.因此,如果您知道某个用户拥有您的应用,因为您之前已经从浏览器中打开了他们的应用并且存储了可以在后端查找的Cookie,那么您仍然可以安全地触发custom-protocol://.

其次,您可以使用navigator.userAgent检测用户代理字符串.在iOS 9之前,你仍然可以使用iframe来激活URI方案,然后在超时后回退.在iOS 9上,您可以选择是否基于cookie激发URI方案,然后将用户带到App Store.我在Branch工作,并利用cookie来回想用户是否可能拥有该应用程序是我们已经实现的.如果您对此有更多疑问,请随时与我们联系,或直接使用我们的解决方案.


实现通用链接并不像其他答案所描述的那么简单.实际上,复杂性要高得多.这是一个完整的步骤列表(我在最近几周使用这些步骤帮助了几个应用程序集成):

1.配置您的应用以注册已批准的域

一世.如果您还没有,请在developer.apple.com上注册您的应用

II.在developer.apple.com上的应用标识符上启用"关联域"

III.在Xcode项目中启用"关联域"

权益

IV.applinks:yourdomain.com在您的应用中添加适当的域权利

applinks

2.将您的网站配置为托管"apple-app-site-association"文件

一世.购买域名或从现有域名中挑选

II.获取域名的SSL认证(您可以使用CloudFlare!)

III.创建结构化的"apple-app-site-association"JSON文件

{
   "applinks": {
       "apps": [ ],
       "details": {
           "TEAM-IDENTIFIER.YOUR.BUNDLE.IDENTIFIER": {
               "paths": [
                   "*"
               ]
           }
       }
   }
}
Run Code Online (Sandbox Code Playgroud)

IV.使用SSL认证对JSON文件进行签名

window.location = 'custom-protocol://my-app';

v.配置文件服务器

apple-app-site-association文件: - 必须与标题'application/pkcs7-mime'一起发送 - 必须从端点发送youdomain.com/apple-app-site-association - 必须返回200 http代码.

示例Express +节点:


Run Code Online (Sandbox Code Playgroud)

信用:从博客文章中大量借用

  • 设置`window.location ='custom-protocol:// my-app';`的问题是,如果用户没有安装你的应用程序,他们会看到来自Safari的"无法打开页面"提醒. (3认同)