我正在与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: [:])
}
}
我非常感谢你的帮助。
答案 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)?