sign in with Apple,使用Apple授权登录
软件环境:Xcode 11.4、iOS13+
创建时间:2020年 03月15号
更新时间:2021年 03月02号
这篇文章都说了什么
- 使用Apple登录的注意事项
- 接入原理概览
- 客户端编码
- 审核规范
1、背景
霸王条款规定,app如果使用了三方登录(如微信登录)则必须接入Apple登录,否则无法过审。所以我们的app大多都需要开发通过Apple来登录的系列功能。
2、可能影响范围
iOS APP、用户系统
3、注意事项
- 不支持企业账号,如果你打的是企业包,现在还不能使用Apple登录功能。如果你的包同时设置了企业和公司两种类型,那也只能暂时把企业包配置去掉,否则Xcode报错
- iOS 13开始支持,注意版本判断,隐藏按钮
4、概览和配置
先看一下数据的整体交互过程
客户端开发之前,在 Xcode中配置服务。Signing & Capabilities选项下添加sign in with Apple,Xcode会自动配置需要的信息到entitlements文件内。这个文件包含推送配置、universal link等,所以如果配置完成的话里面也会多一条sign in with Apple 的信息。具体如下图
4、客户端编码
// MARK: apple login -----------------------private func appleLogin() {if #available(iOS 13.0, *) {let appleIDProvider = ASAuthorizationAppleIDProvider()let appleIDRequest = appleIDProvider.createRequest()appleIDRequest.requestedScopes = [.fullName, .email]// 由ASAuthorizationAppleIDProvider创建的授权请求 管理授权请求的控制器let authorizationController = ASAuthorizationController(authorizationRequests: [appleIDRequest])// 设置授权控制器通知授权请求的成功与失败的代理authorizationController.delegate = self// 设置提供 展示上下文的代理,在这个上下文中 系统可以展示授权界面给用户authorizationController.presentationContextProvider = self// 在控制器初始化期间启动授权流authorizationController.performRequests()} else {HToast.show("当前系统版本不支持设置Apple登录")}}/// 接口 调用private func getAppleLoginCode(user: String, identity: String) {// 参数var param = [String: String]()param["sub"] = userparam["token"] = identityparam["aud"] = APP_BUNDLE_ID // bundle id}@available(iOS 13.0, *)func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {if authorization.credential is ASAuthorizationAppleIDCredential {let userInfo = authorization.credential as? ASAuthorizationAppleIDCredentiallet identityToken = userInfo?.identityTokenlet user = userInfo?.user ?? ""// 服务器验证需要使用的参数var identityTokenStr = ""if let identityToken = identityToken {identityTokenStr = String(data: identityToken, encoding: .utf8) ?? ""}getAppleLoginCode(user: user, identity: identityTokenStr)} else {HToast.show("授权失败")}}@available(iOS 13.0, *)func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {var errorMsg = "授权失败"switch (error as NSError).code {case ASAuthorizationError.Code.canceled.rawValue:errorMsg = "授权已取消"breakcase ASAuthorizationError.Code.notHandled.rawValue:errorMsg = "授权已取消"breakdefault:break}HToast.show(errorMsg)}@available(iOS 13.0, *)func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {let list = UIApplication.shared.windowsreturn list[list.count - 1]}
服务端编码参考:Sign in with Apple(苹果授权登陆)服务端验证 - 简书
6、审核规范
- 非特殊情况,Apple登录之后,不得要求用户进行二次绑定(如手机号)。这个很关键,即使你的用户系统必须绑定,你也不要理所当然的去做,要注意解释清楚,并长期备注在审核信息下面。每次迭代分配的审核员都是不一样的,他们都不了解你的业务特点,所以要解释明白,避免延误上线。如果你的产品是c端的产品,那最好能直接用,如果你的产品是b端的,建议允许用户进入系统,但是未绑定认证账号之前,一些功能不允许使用。(开始吐槽)这里中小公司不要参考大厂的做法(他们都强制绑定的,我也强制),一旦进行博弈,有可能进入延迟队列,能审核几周甚至一个月。没有点实力,苹果只安排审核员通过邮件和你沟通,催审是很困难的。
- Apple登录的按钮是有规范的,不要让设计同学过度发挥,一般都是黑白色调,或者直接使用系统提供的按钮类进行初始化
官方文档:Apple Developer Documentation
sign in with Apple,使用Apple授权登录相关推荐
- Apple Sign in with Apple(苹果授权登录PHP)
Apple Sign in with Apple(苹果授权登录PHP) 文章目录 Apple Sign in with Apple(苹果授权登录PHP) 一.登录Apple Developer 二.创 ...
- Sign in With Apple (苹果授权登录)
Sign in With Apple (苹果授权登录) 关于Sign in With Apple (苹果授权登录)的问题,公司app上架appStore被拒原因是使用第三方授权登陆但是却没有使用苹果账 ...
- php Sign in with Apple(苹果授权登录PHP后端接口)
详细配置参考:https://developer.okta.com/blog/2019/06/04/what-the-heck-is-sign-in-with-apple 本文主要参考: https: ...
- 苹果授权登录Sign In With Apple亲测通过版[100%成功]
苹果授权登录Sign In With Apple后台代码实现JAVA版本亲测通过版 废话不多说,直接复制把自己的包名写上就可以用了 有个别的小坑,HttpUtil自己写,没附上 Base64一定要用o ...
- iOS 苹果授权登录(Sign in with Apple)
在 iOS13 中,如果 App 提供第三方登录,就必须添加 苹果登录 Sign in with Apple 选项,并要求所有开发者于 2020年4月之前 完成现有应用的更新,否则审核不给通过. iO ...
- iOS 苹果授权登录(Sign in with Apple)系列之Apple Developer配置篇
原文 在 iOS13 中,如果 App 提供第三方登录,就必须添加 苹果登录 Sign in with Apple 选项,并要求所有开发者于 2020年4月之前 完成现有应用的更新,否则审核不给通过. ...
- Apple 授权登录
如果使用了第三方登录(例如 Google auth), 那么 app store 就要求一定要使用 apple 授权登录, 否则上架会被拒绝 Guideline 4.8 - Design - Sign ...
- Sign in with Apple (通过Apple 登录)
在 WWDC 2019 上,苹果推出了自家的 Sign in with Apple 功能,这很 Apple.可能苹果看到第三方登录百家争鸣,琢磨着自己也搞了个,这对很多第三方登录来说可能是个威胁. 使 ...
- Sign In with Apple - 使用苹果账号登录你的应用
编辑:老峰,作者:KANGZUBIN 来源:小专栏<WWDC19 内参> 苹果在 9 月 12 号更新了审核指南,加入 4.8 Sign in with Apple 一条,要求所有使用 第 ...
最新文章
- Xilinx axi dma driver 驱动构建 (二)
- 学习 Spring (十三) AOP 配置
- STM32mini使用UCOSII信号量和邮箱实现任务挂起和恢复
- (chap6 Http首部) 为Cookie服务的首部字段
- 1、MySQL日志及分类
- [图解]ARP协议(一)
- hibernate ——联合主键
- 图论 —— 环与块 —— DAG 图判定
- java 获取指定后缀名的文件
- linux段错误吐核怎么办,CentOS命令
- verycd重整——《TrainSignal视频教程》(TrainSignal)[ISO]
- DS1302时钟模块通信原理(SPI总线)
- win的反义词_小学英语常见的120对反义词大全,聪明的小升初家长快来收藏学习...
- 【西祠日志】【05】修修补补asp留言板,学习git,asp的ajax实现(2015.07.21周二)
- ios11.3相册闪退_iOS11拍照闪退,保存图片闪退问题(writeImageToSavedPhotosAlbum)
- 全球与中国无线充电芯片市场深度研究分析报告
- ssm学生综合素质评价系统
- 软件项目管理第二篇:项目计划 (1)——范围计划
- OSChina 周二乱弹 —— 怎么制作妹子面
- 联想计算机不能进入系统桌面,联想笔记本进不去桌面的解决方法
热门文章
- 汽车外饰胶市场现状及未来发展趋势
- Qt 之 QSS(黑色炫酷)
- 南京申瓯SOC1000-UC IPPBX为中小企业提供电话系统解决方案
- oracle fnd global,Oracle EBS fnd_request.submit_request 与 Fnd_concurrent.wait_for_ruqest
- 绘图神器draw.io(写文必备)
- Windows桌面图片打开慢的原因 wyz_csdn
- Python编写一个函数,计算一个整数各个数字之和
- PayPal集成标准版案例(asp.net)关键源码
- python打造最全画地图,可视化数据
- 感悟和体会数据结构和算法