软件环境:Xcode 11.4、iOS13+
创建时间:2020年 03月15号
更新时间:2021年 03月02号

这篇文章都说了什么

  1. 使用Apple登录的注意事项
  2. 接入原理概览
  3. 客户端编码
  4. 审核规范

1、背景

霸王条款规定,app如果使用了三方登录(如微信登录)则必须接入Apple登录,否则无法过审。所以我们的app大多都需要开发通过Apple来登录的系列功能。

2、可能影响范围

iOS APP、用户系统

3、注意事项

  1. 不支持企业账号,如果你打的是企业包,现在还不能使用Apple登录功能。如果你的包同时设置了企业和公司两种类型,那也只能暂时把企业包配置去掉,否则Xcode报错
  2. 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、审核规范

  1. 非特殊情况,Apple登录之后,不得要求用户进行二次绑定(如手机号)。这个很关键,即使你的用户系统必须绑定,你也不要理所当然的去做,要注意解释清楚,并长期备注在审核信息下面。每次迭代分配的审核员都是不一样的,他们都不了解你的业务特点,所以要解释明白,避免延误上线。如果你的产品是c端的产品,那最好能直接用,如果你的产品是b端的,建议允许用户进入系统,但是未绑定认证账号之前,一些功能不允许使用。(开始吐槽)这里中小公司不要参考大厂的做法(他们都强制绑定的,我也强制),一旦进行博弈,有可能进入延迟队列,能审核几周甚至一个月。没有点实力,苹果只安排审核员通过邮件和你沟通,催审是很困难的。
  2. Apple登录的按钮是有规范的,不要让设计同学过度发挥,一般都是黑白色调,或者直接使用系统提供的按钮类进行初始化

官方文档:Apple Developer Documentation

sign in with Apple,使用Apple授权登录相关推荐

  1. Apple Sign in with Apple(苹果授权登录PHP)

    Apple Sign in with Apple(苹果授权登录PHP) 文章目录 Apple Sign in with Apple(苹果授权登录PHP) 一.登录Apple Developer 二.创 ...

  2. Sign in With Apple (苹果授权登录)

    Sign in With Apple (苹果授权登录) 关于Sign in With Apple (苹果授权登录)的问题,公司app上架appStore被拒原因是使用第三方授权登陆但是却没有使用苹果账 ...

  3. php Sign in with Apple(苹果授权登录PHP后端接口)

    详细配置参考:https://developer.okta.com/blog/2019/06/04/what-the-heck-is-sign-in-with-apple 本文主要参考: https: ...

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

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

  5. iOS 苹果授权登录(Sign in with Apple)

    在 iOS13 中,如果 App 提供第三方登录,就必须添加 苹果登录 Sign in with Apple 选项,并要求所有开发者于 2020年4月之前 完成现有应用的更新,否则审核不给通过. iO ...

  6. iOS 苹果授权登录(Sign in with Apple)系列之Apple Developer配置篇

    原文 在 iOS13 中,如果 App 提供第三方登录,就必须添加 苹果登录 Sign in with Apple 选项,并要求所有开发者于 2020年4月之前 完成现有应用的更新,否则审核不给通过. ...

  7. Apple 授权登录

    如果使用了第三方登录(例如 Google auth), 那么 app store 就要求一定要使用 apple 授权登录, 否则上架会被拒绝 Guideline 4.8 - Design - Sign ...

  8. Sign in with Apple (通过Apple 登录)

    在 WWDC 2019 上,苹果推出了自家的 Sign in with Apple 功能,这很 Apple.可能苹果看到第三方登录百家争鸣,琢磨着自己也搞了个,这对很多第三方登录来说可能是个威胁. 使 ...

  9. Sign In with Apple - 使用苹果账号登录你的应用

    编辑:老峰,作者:KANGZUBIN 来源:小专栏<WWDC19 内参> 苹果在 9 月 12 号更新了审核指南,加入 4.8 Sign in with Apple 一条,要求所有使用 第 ...

最新文章

  1. Xilinx axi dma driver 驱动构建 (二)
  2. 学习 Spring (十三) AOP 配置
  3. STM32mini使用UCOSII信号量和邮箱实现任务挂起和恢复
  4. (chap6 Http首部) 为Cookie服务的首部字段
  5. 1、MySQL日志及分类
  6. [图解]ARP协议(一)
  7. hibernate ——联合主键
  8. 图论 —— 环与块 —— DAG 图判定
  9. java 获取指定后缀名的文件
  10. linux段错误吐核怎么办,CentOS命令
  11. verycd重整——《TrainSignal视频教程》(TrainSignal)[ISO]
  12. DS1302时钟模块通信原理(SPI总线)
  13. win的反义词_小学英语常见的120对反义词大全,聪明的小升初家长快来收藏学习...
  14. 【西祠日志】【05】修修补补asp留言板,学习git,asp的ajax实现(2015.07.21周二)
  15. ios11.3相册闪退_iOS11拍照闪退,保存图片闪退问题(writeImageToSavedPhotosAlbum)
  16. 全球与中国无线充电芯片市场深度研究分析报告
  17. ssm学生综合素质评价系统
  18. 软件项目管理第二篇:项目计划 (1)——范围计划
  19. OSChina 周二乱弹 —— 怎么制作妹子面
  20. 联想计算机不能进入系统桌面,联想笔记本进不去桌面的解决方法

热门文章

  1. 汽车外饰胶市场现状及未来发展趋势
  2. Qt 之 QSS(黑色炫酷)
  3. 南京申瓯SOC1000-UC IPPBX为中小企业提供电话系统解决方案
  4. oracle fnd global,Oracle EBS fnd_request.submit_request 与 Fnd_concurrent.wait_for_ruqest
  5. 绘图神器draw.io(写文必备)
  6. Windows桌面图片打开慢的原因 wyz_csdn
  7. Python编写一个函数,计算一个整数各个数字之和
  8. PayPal集成标准版案例(asp.net)关键源码
  9. python打造最全画地图,可视化数据
  10. 感悟和体会数据结构和算法