UIApplication.sharedApplication.open()不加载url

时间:2016-11-17 12:35:50

标签: ios xcode swift3

我正在与Swift 3 and Xcode 8 (iOS 10.1)合作,我对整个世界都是新手。 :)

我正在针对外部应用进行身份验证以获取访问令牌。用例是:

1)从我的应用程序加载外部应用程序

2)验证用户并获取访问令牌

3)从外部应用程序重定向回我的应用程序

我能够做1)和2),但不能做3)。外部应用程序已指定您配置重定向参数,我已经完成了。但是,唉,没有雪茄。

我已在Info.plist为两个应用设置了网址方案。我在控制台或调试器中没有出现任何错误。

过去4天我一直在谷歌搜索和研究,这是我迄今为止提出的解决方案。现在,我看到了控制台消息,但外部应用程序不再打开。

的AppDelegate

  func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
    if (url.scheme == "extapp") {
        print("working with extapp scheme")
    } else if (url.scheme == "myapp") {
        print("redirecting back to app after working with extapp")
    }
    return true
  }

的ViewController

@IBAction func loginButton(_ sender: Any) {
    let id = text.text
    let currentCharacterCount = id.text?.characters.count ?? 0
    if currentCharacterCount == 0 {
        self.showAlert(text: "Please provide a id.")
    } else if currentCharacterCount < 10 {
        self.showAlert(text: "Oh! id doesn't seem to be in the correct format. Try again.")
    } else {
        if (self.firebaseData.callAuth(loggedIn: id!)) {
            OpenExtApp()
        }
    }
}

func OpenExtApp() {
    let Url = URL(string: "extapp:///?autostart=\(token)&redirect=myapp://key")
    if (UIApplication.shared.canOpenURL(Url!)) {
        UIApplication.shared.open(Url!, options: [:])
    }
}

我非常感谢你的帮助。

2 个答案:

答案 0 :(得分:1)

问题似乎与我用来编码addingPercentEncoding参数的redirect方法有关。我没有注意到参数没有被正确编码。事实证明,使用AllowedCharacters的默认过滤器不会编码/和:。这是Apple的一个已知问题。这解决了编码问题,反过来,我打开extapp的问题:

let characterSetTobeAllowed = (CharacterSet(charactersIn: "!*'();:@&=+$,/?%#[] ").inverted)
let redirect = parameter.addingPercentEncoding(withAllowedCharacters: characterSetTobeAllowed)

答案 1 :(得分:0)

检查一下,并确保将自定义方案添加到info.plist文件中 How to handle custom url schemes in swift (XCode 8)?