优化apple sign
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user