iOS 蘋果登錄及第三方登錄

應(yīng)用集成第三方登錄悬赏,iOS 13之后必須集成蘋果登錄,否則審核會(huì)被拒的娄徊。較為常用的第三方登錄是微信和QQ舷嗡,微信不提供網(wǎng)頁登錄授權(quán),所以用戶手機(jī)沒有安裝微信最好是不展示微信登錄入口嵌莉,QQ是提供網(wǎng)頁授權(quán)登錄的进萄,所以提供的第三方登錄入口QQ可以不加判斷直接展示。蘋果登錄只在iOS 13以后才可以使用,所以系統(tǒng)版本小于13的也不能展示蘋果入口中鼠。
微信和QQ不多說可婶,直接在開發(fā)平臺(tái)注冊(cè)應(yīng)用,拿到APPID和APP secret去調(diào)用微信和QQ的SDK援雇,處理對(duì)應(yīng)的回調(diào)矛渴,在Xcode設(shè)置URL Schemes和白名單。
蘋果登錄開發(fā)流程:
一惫搏、登錄按鈕
蘋果提供了一個(gè)ASAuthorizationAppleIDButton類具温,使用它來創(chuàng)建蘋果登錄按鈕,這個(gè)類就像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
            }

以上方法繪制出的按鈕是個(gè)白蘋果黑背景的圓形logo铣猩。
蘋果提供的這個(gè)登錄按鈕有三個(gè)外觀:白色,帶有黑色輪廓線的白色和黑色茴丰。根據(jù)自己的需求來定达皿。
二、授權(quán)請(qǐng)求
點(diǎn)擊按鈕發(fā)起蘋果登錄請(qǐng)求:

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

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

- (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;
        // 使用過授權(quán)的,可能獲取不到以下三個(gè)參數(shù)
        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;
            // 密碼憑證對(duì)象的用戶標(biāo)識(shí) 用戶的唯一標(biāo)識(shí)
            NSString *user = passwordCredential.user;
            // 密碼憑證對(duì)象的密碼
            NSString *password = passwordCredential.password;
            
        } else {
            NSLog(@"授權(quán)信息均不符");
        }
}

授權(quán)成功我們可以拿到用戶的 user溜哮、email冤竹、fullName、authorizationCode茬射、identityToken 以及 realUserStatus 等信息。user是蘋果用戶唯一標(biāo)識(shí)符冒签,該值在同一個(gè)開發(fā)者賬號(hào)下的所有 App 下是一樣的在抛。在用戶共享郵箱情況下可以拿到email。拿到這些值就可以請(qǐng)求自己的服務(wù)器進(jìn)行登錄萧恕。
登錄失敗的代理方法如下:

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

參考:http://www.reibang.com/p/e1284bd8c72a

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末刚梭,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子票唆,更是在濱河造成了極大的恐慌朴读,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件走趋,死亡現(xiàn)場(chǎng)離奇詭異衅金,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門氮唯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鉴吹,“玉大人,你說我怎么就攤上這事惩琉《估” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵瞒渠,是天一觀的道長(zhǎng)良蒸。 經(jīng)常有香客問我,道長(zhǎng)伍玖,這世上最難降的妖魔是什么嫩痰? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮私沮,結(jié)果婚禮上始赎,老公的妹妹穿的比我還像新娘。我一直安慰自己仔燕,他們只是感情好造垛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著晰搀,像睡著了一般五辽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上外恕,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天杆逗,我揣著相機(jī)與錄音,去河邊找鬼鳞疲。 笑死罪郊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的尚洽。 我是一名探鬼主播悔橄,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼腺毫!你這毒婦竟也來了癣疟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤潮酒,失蹤者是張志新(化名)和其女友劉穎睛挚,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體急黎,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡扎狱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年侧到,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片委乌。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡床牧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出遭贸,到底是詐尸還是另有隱情戈咳,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布壕吹,位于F島的核電站著蛙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏耳贬。R本人自食惡果不足惜踏堡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望咒劲。 院中可真熱鬧顷蟆,春花似錦、人聲如沸腐魂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蛔屹。三九已至削樊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間兔毒,已是汗流浹背漫贞。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留育叁,地道東北人迅脐。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像豪嗽,于是被迫代替她去往敵國(guó)和親谴蔑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353