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. qeephp 修改acl.yaml文件实现访问控制
  2. Web数据库:信息化持续改善的最佳工具
  3. c语言项目为什么要build?(gcc、makefile、cmake(qmake)、CMakeLists.txt)(qmake、cmake、qbs区别解析)(qmake还是cmake,mingw作用)
  4. Python学习笔记--科赫雪花的绘制
  5. Hibernate 拦截器的使用--动态表名
  6. 循环斐波那契数列_第五课:斐波那契数列(第一课时)
  7. 奇奇怪怪的知识增加了,大括号的历史你知道吗?
  8. 漫步数理统计九——离散随机变量
  9. Linux基础-06-vi编辑器
  10. [转]JAVA自动装箱和拆箱
  11. MySQL数据库的设计和命令行模式下建立详细过程
  12. jvm中方法区和常量池详解_JVM——内存区域:运行时数据区域详解
  13. 语音识别(ASR)基础介绍第四篇——当今流行做法与CTC-阿里云开发者社区
  14. 简述旋转编码器的工作原理_绝对值编码器工作原理以及故障处理方法有哪些?...
  15. 怎样在input里加入搜索_影视类公众号文章怎样图文排版可以吸引用户?
  16. 熊猫烧香病毒源代码及分析
  17. 51单片机原理以及接口技术(一)-单片机发展概述
  18. Unity工具——SVN工具
  19. android 高仿淘口令,[Android开发]简单版仿淘口令复制弹出框功能
  20. kdj买卖指标公式源码_KDJ胜率极高的买入机会,死记一个指标(附KDJ背离指标源码)...

热门文章

  1. WPF 控件专题 TreeView控件详解
  2. 【配置网卡简单详解】
  3. 能否基于openjdk开发闭源软件
  4. Androidstudio快捷键的使用
  5. 矢量图像格式和位图图像格式的区别
  6. VS 不能启动,在开发者命令模式下以安全模式打开
  7. devTools百度网盘
  8. java 传输 大文件_java高效实现大文件拷贝功能
  9. LittlevGL 6.0 移植到STM32F429平台
  10. 在线协作助力团队合作:解析多种高效工具实现团队协同