公司要开发新的APP,涉及到第三方登录。之前看过WWDC2019视频,了解到如果新的APP(目前为止未在AppStore发布过的)如果有第三方登录功能,那么必须适配苹果推出的Sign In With Apple才能被审核通过。所以就根据苹果文档和WWDC2019视频,总结出以下操作方案,仅供大家参考。
1、什么是Sign In With Apple
苹果在WWDC2019推出了Sign In With Apple(以下简称SIWA),即用户通过端上的Apple ID就可以登录第三方应用。目的是为用户提供一种快速,安全且隐私友好的方式来设置帐户并开始使用您的服务。这次苹果提供的Sign In With Apple快捷登录,也是通过这个跨平台的功能使得在这个生态环境中的应用操作更加方便简洁。详情请参考:WWDC2019 Sign In With Apple 视频
官方文档介绍:https://developer.apple.com/cn/sign-in-with-apple/get-started/
https://developer.apple.com/cn/news/?id=09122019b
通过视频观看,苹果反复的阐述安全性,包括本身Apple ID具备的双重认证、用户可以隐藏自己的Apple ID等,这些都使得用户隐私得到了最大的保护,虽然我们依然可以通过API来获取到诸如用户姓名这样的信息,但是最为关键的user则是毫无规律可言的(至少在我们开发者看来),而这个user则为同一个开发者账号下的所有app中保持有且仅有一个,这个特点看上去能够和已有的帐号体系打通。
Sign In With Apple特点:
Streamlined account setup(简化帐户设置)
Verified email addresses(验证电子邮件地址)
Built-in security(内置安全性)
Anti-fraud(反欺诈):包括:
Cross-platform(跨平台):支持苹果生态的所有系统。eg: iOS,macOS, watchOS, tvOS, JavaScript等。
接入Sign In With Apple的好处:应用程序或网站中显示“使用Apple登录”按钮意味着人们可以使用他们已有的Apple ID进行点击或登录,而无需填写表格,验证电子邮件地址和选择密码。使用Apple登录提供了一种新的,更私密的方式,可以简单快速地登录应用程序和网站,同时为人们提供他们可以信赖的一致登录体验,以及不必记住多个帐户和密码的便利。如果您选择询问姓名和电子邮件地址,人们可以选择保留其电子邮件地址的私密性,而共享一个唯一的随机电子邮件地址。有关开发人员的指导,请参阅AuthenticationServices。
2、如何接入Sign In With Apple
2.1:系统配置:苹果开发文档明确规定:苹果电脑系统macos(10.15)(吓的我赶紧升级我的笔记本系统),手机iOS系统ios(13.0)(毫不犹豫的升级)。由于只有Xcode11才支持Sign In With Apple接入代码的开发,所以Xcode我升级到了11.1正式版。
上面三个条件缺一不可。
2.2:工程配置
2.2.1按照下图所示
2.2.2:点击 “+”号,在弹出的框里搜索 Sign In With Apple,然后双击菜单中的 Sign In With Appple,添加到工程中。
2.2.3:添加成功Sign In With Apple,如下图所示
2.2.4:如果项目中没有 AuthenticationServices.framework ,请务必添加 AuthenticationServices.framework 。
2.3:集成Sign In With Apple 流程
3、集成Sign In With Apple
3.1:集成SIWA,一般用到的是下面几个类:
Sign In with Apple Entitlement:一种权利,可让您的应用程序使用“通过Apple登录”。Key: com.apple.developer.applesignin
class ASAuthorizationAppleIDProvider:一种用于基于用户的Apple ID生成用于验证用户身份的请求的机制。
class ASAuthorizationController:一个控制器,用于管理提供者创建的授权请求。
class ASAuthorizationAppleIDCredential:成功的Apple ID身份验证产生的凭证。
class ASAuthorizationAppleIDButton:苹果封装的关于SIWA的按钮类。
calss ASPasswordCredential:密码认证管理类
3.2:集成SIWA开发
主要通过使用#import <AuthenticationServices/AuthenticationServices.h>框架来实现整个的苹果ID登录流程。而核心的类是ASAuthorizationAppleIDProvider,它是来创建和发起苹果ID登录请求的提供者。
3.2.1:SIWA按钮
3.2.2按钮的点击实现:
3.2.3:授权代理方法:
3.2.3.1:授权成功的方法:
- (void)authorizationController:(ASAuthorizationController *)controller didCompleteWithAuthorization:(ASAuthorization*)authorization API_AVAILABLE(ios(13.0))
3.2.3.1:授权失败的方法:
- (void)authorizationController:(ASAuthorizationController *)controller didCompleteWithError:(NSError*)error API_AVAILABLE(ios(13.0))
3.2.4:授权页面显示
初次授权和已经授权再次点击时所展现出的界面是不一样的,如下图所示:左边图片是初次登陆页面展示,右边图片是再次登陆页面展示
弹出页面后,按页面所示进一步操作即可。
在初次授权中,姓名这一栏是可以自己修改的,点击<姓名>这一栏,就可以根据需要修改
电子邮件:
可以选择显示或者隐藏,也可以选择其他的邮箱,点击共享我的电子邮件,可以弹出你自己所有的APPID邮箱账号,你可以选择其他的账号。
如果你选择<共享我的电子邮件>,那么在授权成功后,你会拿到真实的邮箱:
如果你选择<隐藏邮件地址>,那么在授权成功后,你会拿到一个经过处理后的混乱的邮箱:
相关示例代码,请点击这里
4、Sign In With Apple按钮样式
样式介绍:官方介绍
4.1:Sign In with Apple 提供了两种按钮样式变种:【Sign In with Apple】 和 【Continue with Apple】。根据需要,选择最适合自己服务的登录场景所需要的样式。
4.2:根据平台的不同,该系统最多可以为使用Apple登录按钮提供三种外观:白色(white),带有轮廓的白色(white with an outline)和黑色( black)。选择最适合您在其上显示按钮的背景的外观。
4.2.1:白色:
白色样式在iOS,macOS,tvOS和Web中可用。在提供足够对比度的深色或彩色背景上使用此样式。
4.2.2:白色带轮廓
白色轮廓样式可在iOS,macOS和Web中使用。在无法提供足够对比度的白色或浅色背景上使用此样式;不要在黑暗或饱和的背景上使用它。
4.2.3:黑色
黑色样式适用于所有平台和网络。在可提供足够对比度的白色或浅色背景上使用此样式;不要在黑色或深色背景上使用它。
4.3:按钮尺寸和位置
4.3.1:突出显示“使用Apple登录”按钮。使“使用Apple登录”按钮与其他登录按钮的大小相同,并避免使人们滚动查看该按钮。
4.3.2:调整拐角半径以匹配应用程序中其他按钮的外观。默认情况下,“使用Apple登录”按钮具有圆角。在iOS,macOS和网络中,您可以更改转角半径以产生带有方形角的按钮或弧形形的按钮。有关开发人员的指导,请参阅cornerRadius(iOS和macOS)和“使用Apple Buttons显示和配置登录”(Web)。
4.3.3:保持最小的按钮大小和按钮周围的边距。请注意,按钮标题的长度可能会因地区而异。使用以下值作为指导:
5、关于使用Sign In With Apple审核的问题
关于苹果对Sign In With Apple适配审核的规则,官方文档说明 第4.8条
Apps that exclusively use a third-party or social login service (such as Facebook Login, Google Sign-In, Sign in with Twitter, Sign In with LinkedIn, Login with Amazon, or WeChat Login) to set up or authenticate the user’s primary account with the app must also offer Sign in with Apple as an equivalent option. A user’s primary account is the account they establish with your app for the purposes of identifying themselves, signing in, and accessing your features and associated services.
仅使用第三方或社交登录服务(例如Facebook登录,Google登录,Twitter登录,LinkedIn登录,Amazon登录或微信登录)的应用来设置或验证用户的主帐户该应用程序还必须提供“与Apple登录”作为等效选项。用户的主要帐户是他们在您的应用中建立的帐户,用于识别自己的身份,登录并访问您的功能和相关服务。
如果是下面这类类型的应用则不需要添加:
您的应用专门使用公司自己的帐户设置和登录系统。
您的应用是教育,企业或商业应用,要求用户使用现有的教育或企业帐户登录。
您的应用程序使用政府或行业支持的公民身份识别系统或电子ID来对用户进行身份验证。
您的应用是特定第三方服务的客户端,要求用户直接登录其邮件,社交媒体或其他第三方帐户才能访问其内容
另外需要注意,关于何时接入Sign In With Apple,苹果在有关“通过 Apple 登录”的指南更新有说明:
We’ve updated the App Store Review Guidelines to provide criteria for when apps are required to use Sign in with Apple. Starting today, new apps submitted to the App Store must follow these guidelines. Existing apps and app updates must follow them by April 2020. We’ve also provided new guidelines for using Sign in with Apple on the web and other platforms.
我们更新了《 App Store审查指南》,为何时需要应用程序使用“使用Apple登录”提供了标准。从今天开始,提交到App Store的新应用必须遵循这些准则。现有应用程序和应用程序更新必须在2020年4月之前进行。我们还提供了有关在网络和其他平台上使用Apple登录功能的新指南。
6、关于Sign In With Apple登录后和服务器交互的问题,
7、附录:
苹果最新更新:https://developer.apple.com/news/