首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有自定义url方案的iOS 9 safari iframe src不起作用

具有自定义url方案的iOS 9 safari iframe src不起作用
EN

Stack Overflow用户
提问于 2015-08-08 17:42:36
回答 2查看 22K关注 0票数 33

如果安装了应用程序,我使用此解决方案https://gist.github.com/davidwkeith/2662899将网页重定向到我的应用程序。但它在iOS 9上不起作用,在Google-chrome上还能用。但是带有自定义URL方案的iframe不能从Safari启动应用程序。

如果我替换掉

代码语言:javascript
复制
document.getElementById('loader').src = 'custom-protocol://my-app'

(其中loader是iframe)

代码语言:javascript
复制
window.location = 'custom-protocol://my-app'

看起来不错。

操作系统: iOS 9 beta4和beta5

有人知道这个问题吗?是不是iOS 9测试版的bug?或者它不会被修复?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-22 12:14:58

前面的答案是Universal Links的部分实现,它缺少关键的细节,并且不包括到App Store的回退。

首先,您不能再通过设置iframe src来触发URI方案。您已经正确地识别出了这个问题。正如您所提到的,您仍然可以设置window.location = 'custom-protocol://my-app';。因此,如果你知道一个用户拥有你的应用程序,因为你之前从浏览器打开了他们的应用程序,并存储了一个可以在你的后端查找的cookie,你仍然可以安全地触发custom-protocol://

其次,您可以使用navigator.userAgent检测用户代理字符串。在iOS 9之前,您仍然可以使用iframe来触发URI方案,然后在超时后回退。在iOS 9上,您可以根据cookies选择是否触发URI方案,然后将用户带到应用程序商店。我在Branch做这方面的工作,我们已经实现了利用cookies来回忆用户是否可能拥有这个应用程序。如果您对此有更多问题,请随时联系,或者直接使用我们的解决方案。

实现通用链接并不像另一个答案所描述的那么简单。在现实中,有相当多的复杂性。这是一个完整的步骤列表(最近几周我使用这些步骤帮助了几个应用程序集成):

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

i.如果你还没有在developer.apple.com上注册你的应用

二、在developer.apple.com上对您的应用程序标识符启用“关联的域名”

三、在您的Xcode项目中启用“关联的域”

四.在您的应用程序中添加适当的域名权限applinks:yourdomain.com

应用2.配置您的网站托管‘-app-site-association’文件

i.购买域名或从您现有的域名中挑选

二、获取域名的SSL认证(可以使用CloudFlare!)

三、创建结构化的‘apple-app-site-association’JSON文件

代码语言:javascript
复制
{
   "applinks": {
       "apps": [ ],
       "details": {
           "TEAM-IDENTIFIER.YOUR.BUNDLE.IDENTIFIER": {
               "paths": [
                   "*"
               ]
           }
       }
   }
}

四.使用SSL证书对JSON文件进行签名

代码语言:javascript
复制

v.配置文件服务器

apple-app-site-association文件:-必须与报头‘application/pkcs7-mime’一起发送-必须从端点youdomain.com/apple-app-site-association发送-必须返回200http代码。

示例Express+Node:

代码语言:javascript
复制
var aasa = fs.readFileSync(__dirname + '/static/apple-app-site-association');
app.get('/apple-app-site-association', function(req, res, next) {
     res.set('Content-Type', 'application/pkcs7-mime');
     res.status(200).send(aasa);
});

来源:从 大方借用

票数 17
EN

Stack Overflow用户

发布于 2015-08-12 04:10:50

是的,现在你可以使用iOS9进行深度链接了。请查看链接以获得详细的解释,但我列出了基础知识。

http://blog.hokolinks.com/how-to-implement-apple-universal-links-on-ios-9/

首先,您必须转到您的目标并单击capabilities。添加关联的域。

接下来,您必须上传apple-app-site-association文件。

基本上,打开一个JSON编辑器并构造如下所示的内容

代码语言:javascript
复制
{
  "applinks": {
"apps": [],
"details": {
  "TBEJCS6FFP.com.domain.App": {
    "paths":[ "*" ]
  }
}
  }
}

下一步,你必须在你的应用程序中支持通用链接。你需要实现

代码语言:javascript
复制
extension AppDelegate {
func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool {
    if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
        let webpageURL = userActivity.webpageURL! // Always exists
        if !handleUniversalLink(URL: webpageURL) {
            UIApplication.sharedApplication().openURL(webpageURL)
        }
    }
    return true
}

private func handleUniversalLink(URL url: NSURL) -> Bool {
    if let components = NSURLComponents(URL: url, resolvingAgainstBaseURL: true), let host = components.host, let pathComponents = components.path?.pathComponents {
        switch host {
        case "domain.com":
            if pathComponents.count >= 4 {
                switch (pathComponents[0], pathComponents[1], pathComponents[2], pathComponents[3]) {
                case ("/", "path", "to", let something):
                    if validateSomething(something) {
                        presentSomethingViewController(something)
                        return true
                    }
                default:
                    return false
                }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31891777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档