优化apple sign
This commit is contained in:
@@ -26,6 +26,9 @@ typedef void (^KBAppleSignInCompletion)(ASAuthorizationAppleIDCredential * _Null
|
|||||||
/// 返回:ASAuthorizationAppleIDProviderCredentialAuthorized/Revoked/NotFound
|
/// 返回:ASAuthorizationAppleIDProviderCredentialAuthorized/Revoked/NotFound
|
||||||
- (void)checkCredentialStateWithCompletion:(void(^)(ASAuthorizationAppleIDProviderCredentialState state))completion;
|
- (void)checkCredentialStateWithCompletion:(void(^)(ASAuthorizationAppleIDProviderCredentialState state))completion;
|
||||||
|
|
||||||
|
/// 使用给定 userIdentifier 检查凭证状态(推荐:从服务端返回的 userIdentifier)
|
||||||
|
- (void)checkCredentialStateForUserID:(NSString *)userID completion:(void(^)(ASAuthorizationAppleIDProviderCredentialState state))completion;
|
||||||
|
|
||||||
/// 最近一次成功登录的 userIdentifier(已持久化)
|
/// 最近一次成功登录的 userIdentifier(已持久化)
|
||||||
@property (nonatomic, readonly, nullable) NSString *storedUserIdentifier;
|
@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)
|
#pragma mark - 授权回调 (ASAuthorizationControllerDelegate)
|
||||||
|
|
||||||
- (void)authorizationController:(ASAuthorizationController *)controller didCompleteWithAuthorization:(ASAuthorization *)authorization API_AVAILABLE(ios(13.0)) {
|
- (void)authorizationController:(ASAuthorizationController *)controller didCompleteWithAuthorization:(ASAuthorization *)authorization API_AVAILABLE(ios(13.0)) {
|
||||||
if (@available(iOS 13.0, *)) {
|
if (@available(iOS 13.0, *)) {
|
||||||
ASAuthorizationAppleIDCredential *credential = authorization.credential;
|
ASAuthorizationAppleIDCredential *credential = authorization.credential;
|
||||||
// 持久化保存 userIdentifier,便于后续校验凭证状态
|
// 不在本地持久化 userIdentifier,统一交给服务端处理
|
||||||
NSString *userID = credential.user;
|
// NSString *userID = credential.user; // 如需本地缓存,请自行决定是否保存
|
||||||
[self.class keychainSave:kKBAppleUserIdentifierKey value:userID];
|
|
||||||
if (self.completion) {
|
if (self.completion) {
|
||||||
self.completion(credential, nil);
|
self.completion(credential, nil);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user