如何使用 apple 登录 iOS12 兼容项目
How to implement sign in with apple to iOS12 compatible project
我尝试在支持 iOS12 的 iOS 项目中实施 Sign in With Apple。
由于 AuthenticationServices 相关声明仅从 iOS13 起有效,我需要
使用 #available(iOS 13.0, *)...
将 iOS13 或更高版本的代码与 iOS12 和 blow.
分开
我无法将 ASAuthorizationControllerDelegate 与 iOS12 或更低版本分开。
似乎 #available(iOS 13.0, *)...
只能在方法中使用而不能直接用于
swift 文件,因此我无法仅在 iOS13 或更高版本时使我的 LoginViewController 符合 ASAuthorizationControllerDelegate。
有什么帮助吗?
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) {
}
}
我尝试在支持 iOS12 的 iOS 项目中实施 Sign in With Apple。
由于 AuthenticationServices 相关声明仅从 iOS13 起有效,我需要
使用 #available(iOS 13.0, *)...
将 iOS13 或更高版本的代码与 iOS12 和 blow.
我无法将 ASAuthorizationControllerDelegate 与 iOS12 或更低版本分开。
似乎 #available(iOS 13.0, *)...
只能在方法中使用而不能直接用于
swift 文件,因此我无法仅在 iOS13 或更高版本时使我的 LoginViewController 符合 ASAuthorizationControllerDelegate。
有什么帮助吗?
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) {
}
}