优化apple sign

This commit is contained in:
2025-10-30 14:35:06 +08:00
parent 85a3694e35
commit 482756f6f0
2 changed files with 22 additions and 3 deletions

View File

@@ -26,6 +26,9 @@ typedef void (^KBAppleSignInCompletion)(ASAuthorizationAppleIDCredential * _Null
/// 返回ASAuthorizationAppleIDProviderCredentialAuthorized/Revoked/NotFound
- (void)checkCredentialStateWithCompletion:(void(^)(ASAuthorizationAppleIDProviderCredentialState state))completion;
/// 使用给定 userIdentifier 检查凭证状态(推荐:从服务端返回的 userIdentifier
- (void)checkCredentialStateForUserID:(NSString *)userID completion:(void(^)(ASAuthorizationAppleIDProviderCredentialState state))completion;
/// 最近一次成功登录的 userIdentifier已持久化
@property (nonatomic, readonly, nullable) NSString *storedUserIdentifier;

View File

@@ -63,14 +63,30 @@ static NSString * const kKBAppleUserIdentifierKey = @"com.company.keyboard.apple
}
}
// 使 userIdentifier
- (void)checkCredentialStateForUserID:(NSString *)userID completion:(void(^)(ASAuthorizationAppleIDProviderCredentialState state))completion {
if (!completion) return;
if (@available(iOS 13.0, *)) {
if (userID.length == 0) {
completion(ASAuthorizationAppleIDProviderCredentialNotFound);
return;
}
ASAuthorizationAppleIDProvider *provider = [ASAuthorizationAppleIDProvider new];
[provider getCredentialStateForUserID:userID completion:^(ASAuthorizationAppleIDProviderCredentialState credentialState, NSError * _Nullable error) {
dispatch_async(dispatch_get_main_queue(), ^{ completion(credentialState); });
}];
} else {
completion(ASAuthorizationAppleIDProviderCredentialNotFound);
}
}
#pragma mark - (ASAuthorizationControllerDelegate)
- (void)authorizationController:(ASAuthorizationController *)controller didCompleteWithAuthorization:(ASAuthorization *)authorization API_AVAILABLE(ios(13.0)) {
if (@available(iOS 13.0, *)) {
ASAuthorizationAppleIDCredential *credential = authorization.credential;
// userIdentifier便
NSString *userID = credential.user;
[self.class keychainSave:kKBAppleUserIdentifierKey value:userID];
// userIdentifier
// NSString *userID = credential.user; //
if (self.completion) {
self.completion(credential, nil);
}