AppleLoginManager.m 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. //
  2. // AppleLoginManager.m
  3. // HYHY
  4. //
  5. // Created by qitewei on 2025/7/22.
  6. //
  7. #import "AppleLoginManager.h"
  8. #import <AuthenticationServices/AuthenticationServices.h>
  9. @interface AppleLoginManager()<ASAuthorizationControllerDelegate, ASAuthorizationControllerPresentationContextProviding>
  10. @property (nonatomic, strong) UIWindow *window;
  11. @end
  12. @implementation AppleLoginManager
  13. - (instancetype)initWindow:(UIWindow *)window
  14. {
  15. self = [super init];
  16. if (self) {
  17. self.window = window;
  18. }
  19. return self;
  20. }
  21. - (void)startAuthorization {
  22. if (@available(iOS 13.0, *)) {
  23. ASAuthorizationAppleIDProvider *appleIDProvider = [ASAuthorizationAppleIDProvider new];
  24. ASAuthorizationAppleIDRequest *request = [appleIDProvider createRequest];
  25. request.requestedScopes = @[ASAuthorizationScopeFullName, ASAuthorizationScopeEmail];
  26. ASAuthorizationController *authController = [[ASAuthorizationController alloc] initWithAuthorizationRequests:@[request]];
  27. authController.delegate = self;
  28. authController.presentationContextProvider = self;
  29. [authController performRequests];
  30. }
  31. }
  32. #pragma mark - ASAuthorizationControllerDelegate
  33. - (void)authorizationController:(ASAuthorizationController *)controller didCompleteWithAuthorization:(ASAuthorization *)authorization API_AVAILABLE(ios(13.0)){
  34. if (@available(iOS 13.0, *)) {
  35. ASAuthorizationAppleIDCredential *appleIDCredential = authorization.credential;
  36. NSString *userID = appleIDCredential.user ?: @"";
  37. NSData *identityTokenData = appleIDCredential.identityToken;
  38. NSString *identityTokenStr = [[NSString alloc] initWithData:identityTokenData encoding:NSUTF8StringEncoding] ?: @"";
  39. NSString *email = appleIDCredential.email;
  40. NSPersonNameComponents *fullName = appleIDCredential.fullName;
  41. NSString *nickname = [NSString stringWithFormat:@"%@ %@", fullName.givenName ?: @"", fullName.familyName ?: @""];
  42. NSLog(@"Apple error---------: %@,%@", identityTokenStr, userID);
  43. if (self.onAuthSuccess) self.onAuthSuccess(identityTokenStr, nickname, userID);
  44. }
  45. }
  46. // 登录失败
  47. - (void)authorizationController:(ASAuthorizationController *)controller didCompleteWithError:(NSError *)error API_AVAILABLE(ios(13.0)){
  48. NSLog(@"Apple error: %@", error.localizedDescription);
  49. }
  50. #pragma mark - ASAuthorizationControllerPresentationContextProviding
  51. // 指定在哪个窗口弹出授权页面
  52. - (ASPresentationAnchor)presentationAnchorForAuthorizationController:(ASAuthorizationController *)controller API_AVAILABLE(ios(13.0)){
  53. return self.window;
  54. }
  55. @end