Sign in with Apple ID 蘋果登錄 ios13+

【1】使用第三方登錄而沒有使用Apple登錄時(shí)審核被拒郵件內(nèi)容如下:

### Guideline 4.8 - Design - Sign in with Apple

We noticed that your app uses a third-party login service but does not offer Sign in with Apple.

**Next Steps**

To resolve this issue, please revise your app to offer Sign in with Apple as an equivalent login option.

**Resources**

To learn more, see the Sign in with Apple [Overview](https://developer.apple.com/sign-in-with-apple/).

【2】蘋果登錄實(shí)現(xiàn)步驟與注意事項(xiàng)
【注意】使用蘋果登錄首先需要在蘋果開發(fā)者后臺(tái)開啟 App 的 Sign In with Apple 服務(wù)只有發(fā)布Appstore的應(yīng)用才能使用蘋果登錄。企業(yè)版開發(fā)者賬號(hào)不支持 Sign In with Apple (企業(yè)版開發(fā)者賬號(hào)指的是用于企業(yè)內(nèi)部分發(fā)App,不能用于發(fā)布 App Store 的賬號(hào)起意,也就是價(jià)格為 299$ 的賬號(hào))

官方Demo https://developer.apple.com/documentation/authenticationservices/adding_the_sign_in_with_apple_flow_to_your_app

【圖片指引】
appleid-001.png
appleid-002.png
appleid-003.png
appleid-004.png
appleid-005.png
appleid-006.png
appleid-007.png
appleid-008.png

【代碼】

#import <AuthenticationServices/AuthenticationServices.h>
@interface LoginView ()<
ASAuthorizationControllerDelegate,
ASAuthorizationControllerPresentationContextProviding
>
@end
@implementation LoginView
#pragma mark - AppleIDLogin
- (void) setup {

    if (@available(iOS 13.0, *)) {

        /*
        // 創(chuàng)建一個(gè) provider
        ASAuthorizationAppleIDProvider *appleIDProvider = [[ASAuthorizationAppleIDProvider alloc] init];
        UmUserModel *model = [UmUserModel getUmUserModel];
        if ( [AppleIDLogin isEqualToString:model.loginType] ) {

        }
        [appleIDProvider getCredentialStateForUserID:model.unionid completion:^(ASAuthorizationAppleIDProviderCredentialState credentialState, NSError * _Nullable error) {

          if ( credentialState == ASAuthorizationAppleIDProviderCredentialAuthorized ) {

          }
          else {

          }
        }];
        */

        ASAuthorizationAppleIDButton *signInButton = [ASAuthorizationAppleIDButton buttonWithType:ASAuthorizationAppleIDButtonTypeSignIn style:ASAuthorizationAppleIDButtonStyleBlack];
        signInButton.frame = self.view0.bounds;
        [self.view0 addSubview:signInButton];
        // 添加響應(yīng)方法
        [signInButton addTarget:self action:@selector(signInButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
    }
}

- (void) signInButtonClicked:(ASAuthorizationAppleIDButton *)signInButton  API_AVAILABLE(ios(13.0)){
    
    ASAuthorizationAppleIDProvider *appleIDProvider = [[ASAuthorizationAppleIDProvider alloc] init];
    ASAuthorizationAppleIDRequest *appleIDRequest = [appleIDProvider createRequest];    
    appleIDRequest.requestedScopes = @[ASAuthorizationScopeFullName, ASAuthorizationScopeEmail];// 要獲取的內(nèi)容
    
    // 登錄使用的一種方式说贝,后面單獨(dú)討論
//    ASAuthorizationPasswordProvider *passwordProvider = [ASAuthorizationPasswordProvider new];
//    ASAuthorizationPasswordRequest *passwordRequest = [passwordProvider createRequest];    
    
    // 系統(tǒng)提供的 Controller,必須使用践惑,需要傳入 requests 數(shù)組
    ASAuthorizationController *authController = [[ASAuthorizationController alloc] initWithAuthorizationRequests:@[appleIDRequest]];//, passwordRequest
    // 設(shè)置代理腹泌,接收登錄成功/失敗的回調(diào)
    authController.delegate = self;
    // 頁面跳轉(zhuǎn)相關(guān)的,通過一個(gè)代理方法傳入一個(gè) window

    authController.presentationContextProvider = self;
    // Controller 初始化期間尔觉,開始授權(quán)流程
    [authController performRequests];
}

#pragma mark - ASAuthorizationControllerDelegate
- (void)authorizationController:(ASAuthorizationController *)controller didCompleteWithError:(NSError *)error  API_AVAILABLE(ios(13.0)){
    // 登錄失敗
    NSLog(@"auth failed!, error:%@, code:%ld, description:%@", error, (long)error.code, error.description);
}

- (void)authorizationController:(ASAuthorizationController *)controller didCompleteWithAuthorization:(ASAuthorization *)authorization  API_AVAILABLE(ios(13.0)){
    // 登錄成功    
    if ( [authorization.credential isKindOfClass:[ASAuthorizationAppleIDCredential class]] ) {
        
        ASAuthorizationAppleIDCredential *credential = (ASAuthorizationAppleIDCredential *)authorization.credential;
                
        // 還有其他的屬性
        NSLog(@"appleid auth success!, %@", authorization.description);       
       // 登錄后具體操作凉袱,如數(shù)據(jù)保存,APP自己的登錄等
    }
}

#pragma mark - ASAuthorizationControllerPresentationContextProviding
- (ASPresentationAnchor)presentationAnchorForAuthorizationController:(ASAuthorizationController *)controller  API_AVAILABLE(ios(13.0)){
    // 返回一個(gè) window侦铜,present 登錄界面需要用到
    return [UIApplication sharedApplication].delegate.window;
}

#pragma mark AppleIDLogin end
@end
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末专甩,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子钉稍,更是在濱河造成了極大的恐慌涤躲,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嫁盲,死亡現(xiàn)場(chǎng)離奇詭異篓叶,居然都是意外死亡烈掠,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門缸托,熙熙樓的掌柜王于貴愁眉苦臉地迎上來左敌,“玉大人,你說我怎么就攤上這事俐镐〗孟蓿” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵佩抹,是天一觀的道長(zhǎng)叼风。 經(jīng)常有香客問我,道長(zhǎng)棍苹,這世上最難降的妖魔是什么无宿? 我笑而不...
    開封第一講書人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮枢里,結(jié)果婚禮上孽鸡,老公的妹妹穿的比我還像新娘。我一直安慰自己栏豺,他們只是感情好彬碱,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著奥洼,像睡著了一般巷疼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上灵奖,一...
    開封第一講書人閱讀 49,079評(píng)論 1 285
  • 那天嚼沿,我揣著相機(jī)與錄音,去河邊找鬼桑寨。 笑死伏尼,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的尉尾。 我是一名探鬼主播爆阶,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼沙咏!你這毒婦竟也來了辨图?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤肢藐,失蹤者是張志新(化名)和其女友劉穎故河,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吆豹,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鱼的,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年理盆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凑阶。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡猿规,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出宙橱,到底是詐尸還是另有隱情姨俩,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布师郑,位于F島的核電站环葵,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏宝冕。R本人自食惡果不足惜张遭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望猬仁。 院中可真熱鬧帝璧,春花似錦、人聲如沸湿刽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诈闺。三九已至,卻和暖如春铃芦,著一層夾襖步出監(jiān)牢的瞬間雅镊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來泰國打工刃滓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留仁烹,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓咧虎,卻偏偏與公主長(zhǎng)得像卓缰,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子砰诵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345