【iOS審核】 Guideline 4.8 - Design - sign in with Apple

由于項目中集成了Facebook生音,Google,instagram等第三方登錄晌杰,所以審核出現(xiàn)了4.8提示, 必須要支持Apple登錄筷弦,所以記錄一下對接流程肋演。

  • 先了解下:

官方文檔網(wǎng)站:https://developer.apple.com/cn/sign-in-with-apple/get-started/

準則
使用第三方或社交登錄服務來設置或驗證用戶 app 內(nèi)主要帳戶的 app 必須同時提供“通過 Apple 登錄”作為等效登錄方式。在您規(guī)劃和設計 app 或網(wǎng)站以整合“通過 Apple 登錄”時烂琴,請確保遵循以下準則爹殊。另外,Human Interface Guidelines 包含了可供下載的居左對齊监右、居中對齊和僅徽標按鈕边灭。自 2020 年 6 月 30 起异希,app 更新必須遵循這些準則健盒。
通過Apple登錄, 設置賬戶并使用您的app称簿,所有賬戶都通過雙重認證受到保護扣癣, 具有極高的安全性, Apple不會跟蹤用戶在您的app或網(wǎng)站中的活動憨降。

Xcode 11
要測試您的 app父虑,請使用最新的 Xcode 11,并將您的設備更新至 iOS 13授药、iPadOS士嚎、macOS Catalina 和 Apple tvOS 13呜魄。要測試您的網(wǎng)站,您需要將它與一個支持“通過 Apple 登錄”且在 App Store 中提供的 app 組合在一起莱衩。

App
使用 AuthenticationServices 框架讓用戶可以設置帳戶并登錄您的原生 iOS爵嗅、macOS、Apple tvOS 和 watchOS app笨蚁。

  • 接入集成:

  1. 登錄蘋果開發(fā)者中心后臺睹晒, 找到對應的Identifiers, 勾選 Sign In with Apple, 保存后重新編輯下Profiles文件:
  1. 打開Xcode項目,TARGETS -> Signing & Capabilites , 添加 Sign In with Apple 配置:
  1. TARGETS -> General -> Frameworks, Libraries, and Embedded Content , 添加 AuthenticationServices.framework, Apple ID登錄流程也是基于這個框架來實現(xiàn):
  • 代碼集成:

  1. 導入#import <AuthenticationServices/AuthenticationServices.h>

  2. 繼承ASAuthorizationAppleIDButton創(chuàng)建一個登錄按鈕括细,按鈕默認大小是(130伪很,30)
    創(chuàng)建時有兩個類型設置:ASAuthorizationAppleIDButtonType(按鈕的文字是singin 還是 continue) 和 ASAuthorizationAppleIDButtonStyle(按鈕的外形是否有邊框/是否背景為黑色)
    Apple登錄只在iOS13及以上有效, 所以可加上iOS13.0 的判斷:

if (@available(iOS 13.0, *)) {
      ASAuthorizationAppleIDButton *appleBtn = [[ASAuthorizationAppleIDButton alloc] initWithAuthorizationButtonType:ASAuthorizationAppleIDButtonTypeSignIn authorizationButtonStyle:ASAuthorizationAppleIDButtonStyleWhiteOutline];
      [appleBtn addTarget:self action:@selector(signInWithApple) forControlEvents:UIControlEventTouchUpInside];
        
      [self.view addSubview:appleBtn];
      [appleBtn mas_makeConstraints:^(MASConstraintMaker *make) {
          make.centerX.mas_equalTo(self.view);
          make.top.mas_equalTo(self.bottomView.mas_bottom).mas_offset(Handle(7));
      }];
 }

這里有個小知識,若需要按鈕是圓形的奋单, 只需要設置按鈕的appleBtn.cornerRadius锉试, 按鈕最小的size 是CGSizeMake(30,30), 所以最小的cornerRadius = 15

  1. 登錄方法實現(xiàn):
- (void)signInWithApple{
    if (@available(iOS 13.0, *)) {
        ASAuthorizationAppleIDProvider *appleIDProvider = [[ASAuthorizationAppleIDProvider alloc] init];
        
        ASAuthorizationAppleIDRequest *request = appleIDProvider.createRequest;
        request.requestedScopes = @[ASAuthorizationScopeFullName, ASAuthorizationScopeEmail];
        
        ASAuthorizationController *vc = [[ASAuthorizationController alloc] initWithAuthorizationRequests:@[request]];
        vc.delegate = self;
        vc.presentationContextProvider = self;
        [vc performRequests];
    }
}

這里是基于Apple ID授權(quán)用戶,先生成用戶授權(quán)請求機制ASAuthorizationAppleIDProvider览濒, 再創(chuàng)建一個ASAuthorizationAppleIDRequest键痛,創(chuàng)建一個請求控制器ASAuthorizationController,并設置授權(quán)請求的代理匾七, 設置展示上下文的代理絮短,最后啟動授權(quán)流程。

  1. 上下文代理實現(xiàn):
//  ASAuthorizationControllerPresentationContextProviding  顯示在哪個視圖上面

- (ASPresentationAnchor)presentationAnchorForAuthorizationController:(ASAuthorizationController *)controller API_AVAILABLE(ios(13.0))
{
    return self.view.window;
}
  1. 授權(quán)代理實現(xiàn):
// ASAuthorizationControllerDelegate  授權(quán)回調(diào)

- (void)authorizationController:(ASAuthorizationController *)controller didCompleteWithAuthorization:(ASAuthorization *)authorization API_AVAILABLE(ios(13.0))
{
    if ([authorization.credential isKindOfClass:[ASAuthorizationAppleIDCredential class]])       {
        ASAuthorizationAppleIDCredential *credential = authorization.credential;
        
        NSString *state = credential.state;
        NSString *userID = credential.user;
        NSPersonNameComponents *fullName = credential.fullName;
        NSString *email = credential.email;
        NSString *authorizationCode = [[NSString alloc] initWithData:credential.authorizationCode encoding:NSUTF8StringEncoding]; // refresh token
        NSString *identityToken = [[NSString alloc] initWithData:credential.identityToken encoding:NSUTF8StringEncoding]; // access token
        ASUserDetectionStatus realUserStatus = credential.realUserStatus;
        
        NSLog(@"state: %@", state);
        NSLog(@"userID: %@", userID);
        NSLog(@"fullName: %@", fullName);
        NSLog(@"email: %@", email);
        NSLog(@"authorizationCode: %@", authorizationCode);
        NSLog(@"identityToken: %@", identityToken);
        NSLog(@"realUserStatus: %@", @(realUserStatus));
         
         // 拿到對應數(shù)據(jù)后昨忆, 跟自己的服務器后臺進行交互丁频, 把數(shù)據(jù)傳給后臺進行登錄驗證
    }
}

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

關(guān)于服務器后臺如何進行賬號驗證, 可查看這篇文章:從登錄到服務器驗證

到這里邑贴, 基本已經(jīng)實現(xiàn)了蘋果登錄功能席里, 關(guān)于更多的監(jiān)聽Apple登錄退出等, 我這個項目并沒有做處理拢驾,具體可添加實現(xiàn) ASAuthorizationAppleIDProviderCredentialRevokedNotification這個通知奖磁。


參考文檔:http://www.reibang.com/p/efb02bc8935a

如果對你有幫助, 可轉(zhuǎn)發(fā)擴散繁疤!


更新提示:

新一次提交審核咖为, 被拒了, 理由是Guideline 4.0 - Design:

4.0被拒

其實就是說我把圖標蘋果登錄的圖標自定義改成了圓的3砝啊躁染! 未按照“Apple人機界面登錄指南”中的按鈕進行設計!

所以說架忌, 大家還是不要搞自定義或者原型圖標吞彤, 就下面這種就行了,別在意整體統(tǒng)一美觀了:


后續(xù)又來了!J嗡 挠羔!

又一次被拒, 心塞的一匹埋嵌, 依然是4.0 說蘋果登錄圖標有問題H焐蕖!

先看一下官方文檔@蚰铡拌喉! (很重要!@)
https://developer.apple.com/design/human-interface-guidelines/sign-in-with-apple/overview/buttons/

其實蘋果是支持自定義圖標的尿背, 但你需要下載它給的圖標文件, 然后進行按鈕設置捶惜, 如果使用系統(tǒng)的按鈕田藐, 也要按照他給定的大小進行設置,so~

下載資源文件給設計吱七, 讓設計做一個標準大小的按鈕圖汽久,然后我們再進行處理:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市踊餐,隨后出現(xiàn)的幾起案子景醇,更是在濱河造成了極大的恐慌,老刑警劉巖吝岭,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件三痰,死亡現(xiàn)場離奇詭異,居然都是意外死亡窜管,警方通過查閱死者的電腦和手機散劫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來幕帆,“玉大人获搏,你說我怎么就攤上這事∈” “怎么了常熙?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長仗扬。 經(jīng)常有香客問我症概,道長蕾额,這世上最難降的妖魔是什么早芭? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮诅蝶,結(jié)果婚禮上退个,老公的妹妹穿的比我還像新娘募壕。我一直安慰自己,他們只是感情好语盈,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布舱馅。 她就那樣靜靜地躺著,像睡著了一般刀荒。 火紅的嫁衣襯著肌膚如雪代嗤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天缠借,我揣著相機與錄音干毅,去河邊找鬼。 笑死泼返,一個胖子當著我的面吹牛硝逢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播绅喉,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼渠鸽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了柴罐?” 一聲冷哼從身側(cè)響起徽缚,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎革屠,沒想到半個月后猎拨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡屠阻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年红省,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片国觉。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡吧恃,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出麻诀,到底是詐尸還是另有隱情痕寓,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布蝇闭,位于F島的核電站呻率,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏呻引。R本人自食惡果不足惜礼仗,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧元践,春花似錦韭脊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至象浑,卻和暖如春蔫饰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背愉豺。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工死嗦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人粒氧。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓越除,卻偏偏與公主長得像,于是被迫代替她去往敵國和親外盯。 傳聞我的和親對象是個殘疾皇子摘盆,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354