- (void)start { ASAuthorizationAppleIDProvider *appleIDProvider = [ASAuthorizationAppleIDProvider new]; ASAuthorizationAppleIDRequest *request = appleIDProvider.createRequest; request.requestedScopes = @[ASAuthorizationScopeFullName, ASAuthorizationScopeEmail]; ASAuthorizationController *authorizationController = [[ASAuthorizationController alloc] initWithAuthorizationRequests:@[request]]; authorizationController.delegate = self; authorizationController.presentationContextProvider = self; [authorizationController performRequests]; }
#pragma mark - ASAuthorizationController delegate - (void)authorizationController:(ASAuthorizationController *)controller didCompleteWithAuthorization:(ASAuthorization *)authorization API_AVAILABLE(ios(13.0)){ if ([authorization.credential isKindOfClass:[ASAuthorizationAppleIDCredential class]]) { ASAuthorizationAppleIDCredential *appleIDCredential = authorization.credential; ///保存下面这个用户信息用来后续验证用户是否还有效 NSString *identifier = appleIDCredential.user; NSPersonNameComponents *fullName = appleIDCredential.fullName; NSString *email = appleIDCredential.email; NSString *authorizationCode = [[NSString alloc] initWithData:appleIDCredential.authorizationCode encoding:NSUTF8StringEncoding]; NSString *token = [[NSString alloc] initWithData:appleIDCredential.identityToken encoding:NSUTF8StringEncoding]; ///交付后台用作注册、登录 } else if ([authorization.credential isKindOfClass:[ASPasswordCredential class]]) { } } - (void)authorizationController:(ASAuthorizationController *)controller didCompleteWithError:(NSError *)error API_AVAILABLE(ios(13.0)){ switch (error.code) { case ASAuthorizationErrorUnknown: { break; } case ASAuthorizationErrorCanceled: { break; } case ASAuthorizationErrorInvalidResponse: { break; } case ASAuthorizationErrorNotHandled: { break; } case ASAuthorizationErrorFailed: { break; } default: break; } } #pragma mark - Section - (ASPresentationAnchor)presentationAnchorForAuthorizationController:(ASAuthorizationController *)controller API_AVAILABLE(ios(13.0)){ return self.window; }
- (void)volidateAuthorizationAppleID { if (@available(iOS 13, *)) { ASAuthorizationAppleIDProvider *appleIDProvider = [ASAuthorizationAppleIDProvider new]; NSString *user = xxx; ///授权时保存的user if (user.length) { [appleIDProvider getCredentialStateForUserID:user completion:^(ASAuthorizationAppleIDProviderCredentialState credentialState, NSError * _Nullable error) { switch (credentialState) { case ASAuthorizationAppleIDProviderCredentialRevoked: case ASAuthorizationAppleIDProviderCredentialNotFound: { ///苹果账号已经失效 break; } case ASAuthorizationAppleIDProviderCredentialAuthorized: { break; } case ASAuthorizationAppleIDProviderCredentialTransferred:{ break; } default: break; } }]; } } else { } }