iOS 苹果登录 Sign in with apple Swift

话不多说,直接看功能类,解释代码里有

import UIKit
import AuthenticationServices
@available(iOS 13.0, *)
class WMAppleLoginManage: NSObject {static var shared = WMAppleLoginManage()private var callBack:((Bool,String)->Void)?//发起苹果登录func loginInWithApple(callBack:((Bool,String)->Void)?) {self.callBack = callBack// 基于用户的Apple ID授权用户,生成用户授权请求的一种机制let appleIDProvide = ASAuthorizationAppleIDProvider()// 授权请求AppleIDlet appIDRequest = appleIDProvide.createRequest()// 在用户授权期间请求的联系信息appIDRequest.requestedScopes = [ASAuthorization.Scope.fullName,ASAuthorization.Scope.email]// 由ASAuthorizationAppleIDProvider创建的授权请求 管理授权请求的控制器let authorizationController = ASAuthorizationController.init(authorizationRequests: [appIDRequest])// 设置授权控制器通知授权请求的成功与失败的代理authorizationController.delegate = self// 设置提供 展示上下文的代理,在这个上下文中 系统可以展示授权界面给用户authorizationController.presentationContextProvider = self// 在控制器初始化期间启动授权流authorizationController.performRequests()}// 如果存在iCloud Keychain 凭证或者AppleID 凭证提示用户func perfomExistingAccountSetupFlows() {// 基于用户的Apple ID授权用户,生成用户授权请求的一种机制let appleIDProvide = ASAuthorizationAppleIDProvider()// 授权请求AppleIDlet appIDRequest = appleIDProvide.createRequest()// 为了执行钥匙串凭证分享生成请求的一种机制let passwordProvider = ASAuthorizationPasswordProvider()let passwordRequest = passwordProvider.createRequest()// 由ASAuthorizationAppleIDProvider创建的授权请求 管理授权请求的控制器let authorizationController = ASAuthorizationController.init(authorizationRequests: [appIDRequest,passwordRequest])// 设置授权控制器通知授权请求的成功与失败的代理authorizationController.delegate = self// 设置提供 展示上下文的代理,在这个上下文中 系统可以展示授权界面给用户authorizationController.presentationContextProvider = self// 在控制器初始化期间启动授权流authorizationController.performRequests()}private func loginWithServer(user:String,token:String,code:String) {//向你的服务器验证 ,验证通过即可登录}
}@available(iOS 13.0, *)
extension CGAppleLoginManage : ASAuthorizationControllerDelegate,ASAuthorizationControllerPresentationContextProviding {//授权成功地回调func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {if authorization.credential.isKind(of: ASAuthorizationAppleIDCredential.classForCoder()) {// 用户登录使用ASAuthorizationAppleIDCredentiallet appleIDCredential = authorization.credential as! ASAuthorizationAppleIDCredentiallet user = appleIDCredential.user// 使用过授权的,可能获取不到以下三个参数let familyName = appleIDCredential.fullName?.familyName ?? ""let givenName = appleIDCredential.fullName?.givenName ?? ""let email = appleIDCredential.email ?? ""let identityToken = appleIDCredential.identityToken ?? Data()let authorizationCode = appleIDCredential.authorizationCode ?? Data()// 用于判断当前登录的苹果账号是否是一个真实用户,取值有:unsupported、unknown、likelyReallet realUserStatus = appleIDCredential.realUserStatus// 服务器验证需要使用的参数}else if authorization.credential.isKind(of: ASPasswordCredential.classForCoder()) {// 这个获取的是iCloud记录的账号密码,需要输入框支持iOS 12 记录账号密码的新特性,如果不支持,可以忽略// Sign in using an existing iCloud Keychain credential.// 用户登录使用现有的密码凭证let passworCreddential = authorization.credential as! ASPasswordCredential// 密码凭证对象的用户标识 用户的唯一标识let user = passworCreddential.user// 密码凭证对象的密码let password = passworCreddential.password}else{// "授权信息不符合"}}func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {var errorStr : String?switch (error as NSError).code {case ASAuthorizationError.canceled.rawValue :errorStr = "用户取消了授权请求"case ASAuthorizationError.failed.rawValue :errorStr = "授权请求失败"case ASAuthorizationError.invalidResponse.rawValue :errorStr = "授权请求无响应"case ASAuthorizationError.notHandled.rawValue :errorStr = "未能处理授权请求"case ASAuthorizationError.unknown.rawValue :errorStr = "授权请求失败原因未知"default:break}if let str = errorStr {callBack?(false,str)}}func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {return UIApplication.shared.windows.last ?? ASPresentationAnchor()}
}

iOS 苹果登录 Sign in with apple Swift相关推荐

  1. ios 登录 java 后台,IOS苹果登录sign in with apple后端校验

    IOS苹果登录sign in with apple后端校验 最近新开发的app在IOS平台app store connent提审的时候,被拒了,原因是app上如果有接第三方登陆(比如微信,微博,fac ...

  2. 最新苹果服务器认证,iOS 苹果登录Sign in with Apple 和 服务端验证(nodejs 版)

    Sign in with Apple 服务端要做的其实很简单 nodejs需要装三个东西 npm install node-rsa npm install axios npm install json ...

  3. 【iOS】苹果登录Sign in with Apple

    在iOS13中,如果苹果开发者提供任何其他第三方登录,就必须提供"苹果登录"选项.也就是说,如果软件要求"微信登录"或是"QQ登录"时,必须 ...

  4. IONIC4 苹果登录-Sign In With Apple Id

    最近上架APP被苹果拒绝,理由是使用第三方登录需加上苹果登录,否则不给上架,所以在这分享一下ionic4的苹果登录 首先安装cordova插件,获取系统版本插件 ionic cordova plugi ...

  5. 苹果登录 Sign In with Apple

    <?php /*** Sign in with Apple 示例* composer安装: composer require griffinledingham/php-apple-signin* ...

  6. Java Apple_GitHub - izhaorui/AppleLogin-java: 苹果登录 Sign in with Apple 服务端校验

    APP端苹果登录java后端校验 主要校验苹果授权登录token 是否正确 主要方法 public RSAPublicKeySpec build(final String n, final Strin ...

  7. Uniapp苹果登录sign in Apple

    Uniapp苹果登录sign in Apple 前提:软件内,如果已经实现第三方登录,必须也有sign in Apple功能,否则审核会不通过 准备工作:uniapp自带sign in Apple必须 ...

  8. 苹果授权登录Sign In With Apple亲测通过版[100%成功]

    苹果授权登录Sign In With Apple后台代码实现JAVA版本亲测通过版 废话不多说,直接复制把自己的包名写上就可以用了 有个别的小坑,HttpUtil自己写,没附上 Base64一定要用o ...

  9. iOS应用接入Sign In With Apple

    iOS应用接入Sign In With Apple流程 前言 准备工作 开始编写 总结 参考文献 前言 App Store审核要求: New Guidelines for Sign in with A ...

最新文章

  1. 使用 pv 命令监控 linux 命令的执行进度
  2. java.lang.IllegalArgumentException 严重: Context initialization failed
  3. java一年包装_java回顾之包装类
  4. html富文本编辑器插件_vue中使用vuequilleditor富文本编辑器
  5. 车厢调度(信息学奥赛一本通-T1357)
  6. dj电商-数据库的远程连接
  7. Hadoop伪分布安装详解(四)
  8. [Android Pro] Android源码编译之Nexus5真机编译
  9. 03. 二维数组中的查找(C++实现)
  10. 通过 Table 的default-sort属性设置默认的排序列和排序顺序
  11. 基于 RT-Thread Studio的CPK-RA6M4 开发环境搭建指南
  12. Linux学习12—文件服务
  13. 20120329_dmp 文件导入ibm p750-2个LPAR 小机知识点
  14. linux终端快捷键(持续更新)
  15. 计算机内存有何组成,电脑4个4g内存条组成16g内存和16g内存有什么不同?
  16. 【产品分析】共享充电宝
  17. linux文件夹内JPG批量转PNG
  18. ,到底是买新房好还是二手房好?看完你就明白了!
  19. 迅雷因版权问题不能访问
  20. coco2dx精灵和背景遮挡_cocos2dx番外篇——更换精灵图片

热门文章

  1. PHP框架 yii1.1 性能为 yii2的四倍
  2. Driver Genius Professional v16.0.0.226官方版
  3. 第四章:Shiro的身份认证(Authentication)
  4. Ubuntu配置下载源及中文
  5. 民生银行支票套打excel
  6. C# SqlTransaction 多个方法采用同一个事务,保证操作统一性,数据一致性
  7. ant的高级使用,ant命令详解,ant打包,ant编译后打包去掉jar文件
  8. Mono:从猴子到齐天大圣?
  9. 嵌入式linux软件专利,一种嵌入式Linux操作系统网络加速运行的系统及方专利_专利查询 - 天眼查...
  10. Ubuntu分区(UEFI启动)