// // AppleLoginManager.m // HYHY // // Created by qitewei on 2025/7/22. // #import "AppleLoginManager.h" #import @interface AppleLoginManager() @property (nonatomic, strong) UIWindow *window; @end @implementation AppleLoginManager - (instancetype)initWindow:(UIWindow *)window { self = [super init]; if (self) { self.window = window; } return self; } - (void)startAuthorization { if (@available(iOS 13.0, *)) { ASAuthorizationAppleIDProvider *appleIDProvider = [ASAuthorizationAppleIDProvider new]; ASAuthorizationAppleIDRequest *request = [appleIDProvider createRequest]; request.requestedScopes = @[ASAuthorizationScopeFullName, ASAuthorizationScopeEmail]; ASAuthorizationController *authController = [[ASAuthorizationController alloc] initWithAuthorizationRequests:@[request]]; authController.delegate = self; authController.presentationContextProvider = self; [authController performRequests]; } } #pragma mark - ASAuthorizationControllerDelegate - (void)authorizationController:(ASAuthorizationController *)controller didCompleteWithAuthorization:(ASAuthorization *)authorization API_AVAILABLE(ios(13.0)){ if (@available(iOS 13.0, *)) { ASAuthorizationAppleIDCredential *appleIDCredential = authorization.credential; NSString *userID = appleIDCredential.user ?: @""; NSData *identityTokenData = appleIDCredential.identityToken; NSString *identityTokenStr = [[NSString alloc] initWithData:identityTokenData encoding:NSUTF8StringEncoding] ?: @""; NSString *email = appleIDCredential.email; NSPersonNameComponents *fullName = appleIDCredential.fullName; NSString *nickname = [NSString stringWithFormat:@"%@ %@", fullName.givenName ?: @"", fullName.familyName ?: @""]; NSLog(@"Apple error---------: %@,%@", identityTokenStr, userID); if (self.onAuthSuccess) self.onAuthSuccess(identityTokenStr, nickname, userID); } } // 登录失败 - (void)authorizationController:(ASAuthorizationController *)controller didCompleteWithError:(NSError *)error API_AVAILABLE(ios(13.0)){ NSLog(@"Apple error: %@", error.localizedDescription); } #pragma mark - ASAuthorizationControllerPresentationContextProviding // 指定在哪个窗口弹出授权页面 - (ASPresentationAnchor)presentationAnchorForAuthorizationController:(ASAuthorizationController *)controller API_AVAILABLE(ios(13.0)){ return self.window; } @end