iOS 蘋果登錄及第三方登錄

應用集成第三方登錄,iOS 13之后必須集成蘋果登錄,否則審核會被拒的。較為常用的第三方登錄是微信和QQ,微信不提供網頁登錄授權,所以用戶手機沒有安裝微信最好是不展示微信登錄入口,QQ是提供網頁授權登錄的,所以提供的第三方登錄入口QQ可以不加判斷直接展示。蘋果登錄只在iOS 13以后才可以使用,所以系統(tǒng)版本小于13的也不能展示蘋果入口。
微信和QQ不多說,直接在開發(fā)平臺注冊應用,拿到APPID和APP secret去調用微信和QQ的SDK,處理對應的回調,在Xcode設置URL Schemes和白名單。
蘋果登錄開發(fā)流程:
一、登錄按鈕
蘋果提供了一個ASAuthorizationAppleIDButton類,使用它來創(chuàng)建蘋果登錄按鈕,這個類就像UIButton一樣使用。

            if (@available(iOS 13.0, *)) {
                ASAuthorizationAppleIDButton *appleLoginBtn = [[ASAuthorizationAppleIDButton alloc] initWithAuthorizationButtonType:ASAuthorizationAppleIDButtonTypeSignIn authorizationButtonStyle:ASAuthorizationAppleIDButtonStyleBlack];
                appleLoginBtn.frame = CGRectMake(0, 0, 50, 50);
                appleLoginBtn.layer.cornerRadius = 5;
                appleLoginBtn.layer.masksToBounds = YES;
                [appleLoginBtn addTarget:self action:@selector(appleLogin) forControlEvents:UIControlEventTouchUpInside];
                [self.view addSubview:appleLoginBtn];
            } else {
                // Fallback on earlier versions
            }

以上方法繪制出的按鈕是個白蘋果黑背景的圓形logo。
蘋果提供的這個登錄按鈕有三個外觀:白色,帶有黑色輪廓線的白色和黑色。根據自己的需求來定。
二、授權請求
點擊按鈕發(fā)起蘋果登錄請求:

- (void)appleLogin {
    if (@available(iOS 13.0, *)) {
        
        ASAuthorizationAppleIDProvider *appleIDProvider = [[ASAuthorizationAppleIDProvider alloc] init];
        ASAuthorizationAppleIDRequest *appleIDRequest = [appleIDProvider createRequest];
        // 用戶授權請求的聯(lián)系信息
        appleIDRequest.requestedScopes = @[ASAuthorizationScopeFullName, ASAuthorizationScopeEmail];
        ASAuthorizationController *authorizationController = [[ASAuthorizationController alloc] initWithAuthorizationRequests:@[appleIDRequest]];
        // 設置授權控制器通知授權請求的成功與失敗的代理
        authorizationController.delegate = self;
        // 設置提供 展示上下文的代理,在這個上下文中 系統(tǒng)可以展示授權界面給用戶
        authorizationController.presentationContextProvider = self;
        // 在控制器初始化期間啟動授權流
        [authorizationController performRequests];
    } else {
        NSLog(@"該系統(tǒng)版本不可用Apple登錄");
    }
}

用戶發(fā)起授權請求后,系統(tǒng)就會彈出用戶登錄驗證的頁面。用戶可以選擇共享電子郵箱或者隱藏郵件地址。
三、授權回調處理
接下來處理授權成功和失敗的回調:
授權成功走的代理方法

- (void)authorizationController:(ASAuthorizationController *)controller didCompleteWithAuthorization:(ASAuthorization *)authorization  API_AVAILABLE(ios(13.0)){
    
    if ([authorization.credential isKindOfClass:[ASAuthorizationAppleIDCredential class]]) {
        // 用戶登錄使用ASAuthorizationAppleIDCredential
        ASAuthorizationAppleIDCredential *appleIDCredential = authorization.credential;
        NSString *user = appleIDCredential.user;
        // 使用過授權的,可能獲取不到以下三個參數
        NSString *familyName = appleIDCredential.fullName.familyName;
        NSString *givenName = appleIDCredential.fullName.givenName;
        NSString *email = appleIDCredential.email;
        
        } else if ([authorization.credential isKindOfClass:[ASPasswordCredential class]]) {
            // 用戶登錄使用現(xiàn)有的密碼憑證(iCloud記錄的)
            ASPasswordCredential *passwordCredential = authorization.credential;
            // 密碼憑證對象的用戶標識 用戶的唯一標識
            NSString *user = passwordCredential.user;
            // 密碼憑證對象的密碼
            NSString *password = passwordCredential.password;
            
        } else {
            NSLog(@"授權信息均不符");
        }
}

授權成功我們可以拿到用戶的 user、email、fullName、authorizationCode、identityToken 以及 realUserStatus 等信息。user是蘋果用戶唯一標識符,該值在同一個開發(fā)者賬號下的所有 App 下是一樣的。在用戶共享郵箱情況下可以拿到email。拿到這些值就可以請求自己的服務器進行登錄。
登錄失敗的代理方法如下:

- (void)authorizationController:(ASAuthorizationController *)controller didCompleteWithError:(NSError *)error API_AVAILABLE(ios(13.0)) {
    
    NSString *errorMsg = nil;
    switch (error.code) {
        case ASAuthorizationErrorCanceled:
            errorMsg = @"用戶取消了授權請求";
            break;
        case ASAuthorizationErrorFailed:
            errorMsg = @"授權請求失敗";
            break;
        case ASAuthorizationErrorInvalidResponse:
            errorMsg = @"授權請求響應無效";
            break;
        case ASAuthorizationErrorNotHandled:
            errorMsg = @"未能處理授權請求";
            break;
        case ASAuthorizationErrorUnknown:
            errorMsg = @"授權請求失敗未知原因";
            break;
            
        default:
            break;
    }
    NSLog(@"%@", errorMsg);
}

參考:http://www.itdecent.cn/p/e1284bd8c72a

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容