ios - 如何实现苹果登录到iOS12兼容项目
问题描述
我尝试在支持 iOS12 的 iOS 项目中实现 Sign in With Apple。由于 AuthenticationServices 相关声明仅从 iOS13 有效,我需要使用#available(iOS 13.0, *)...
分离 iOS13 或更高版本和 iOS12 的代码并吹。
我无法将 ASAuthorizationControllerDelegate 与 iOS12 或更低版本分开。它似乎#available(iOS 13.0, *)...
只能在方法中使用,但不能直接用于 swift 文件,所以我不能将我的 LoginViewController 与 ASAuthorizationControllerDelegate 仅用于 iOS13 或更高版本。
有什么帮助吗?
extension LoginViewController {
@objc func didTapAppleButton() {
guard #available(iOS 13.0, *) else { return }
let provider: ASAuthorizationAppleIDProvider = .init()
let request = provider.createRequest()
request.requestedScopes = [.fullName, .email]
let authController: ASAuthorizationController = .init(authorizationRequests: [request])
authController.delegate = self
authController.presentationContextProvider = self
authController.performRequests()
}
}
// This does not work.
// -> Error: Declaration is only valid at file scope
if #available(iOS 13.0, *) {
extension LoginViewController: ASAuthorizationControllerDelegate {
public func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
}
public func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
}
}
}
解决方案
你需要的是@available
,不是if #available
。if #available
用于在特定的 iOS 版本上执行特定的代码路径。要声明特定类型或扩展仅在 iOS 13 上可用,您需要@available
.
@available(iOS 13.0, *)
extension LoginViewController: ASAuthorizationControllerDelegate {
public func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
}
public func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
}
}
推荐阅读
- cypress - 点击href加载空白页
- python-3.x - 如何在 tkinter 中将下拉菜单与顶级菜单相结合
- javascript - 如何正确更新 javascript 中的全局变量?
- laravel - 通过 Nginx 将 2 个域链接到 1 个 Laravel 项目
- python - Django:使用 html 模板 TemplateDoesNotExist
- python - 使用 Python 读取包含复杂字符串的 CSV
- java - 如何在一个类中“定义”另外两个类,以便我可以使用它们的方法
- python - ValueError:对于 2D nparray 矩阵,x 和 y 的大小必须相同
- mysql - 用列中的单个空格替换多个空格
- c# - 这些错误是否与语法错误或更新的包问题有关?