大多数浏览器和
Developer App 均支持流媒体播放。
-
“通过 Apple 登录”简介
“通过 Apple 登录”是让用户使用现有 Apple ID 登录各类 app 的快速、简单方法。了解在您的 app 或网站中添加“通过 Apple 登录”按钮来获取新客户有多简单,并从“通过 Apple 登录”提供的内建安全性、防诈骗和隐私保护功能中获益。
资源
相关视频
WWDC21
WWDC20
WWDC19
-
下载
大家好 我的名字是 Gokul 与我的同事 Dima 和 Jonathan 一起 我们很高兴告诉大家有关 Sign in with Apple 的事 我将首先概述 Sign in with Apple 的主要功能 然后 Dima 将介绍 如何将其集成到 你们的原生 App 中 Jonathan 将会现场为你们演示 最后 我们将讨论跨平台 并以一些最佳实践作为结束
Sign in with Apple 是快速的 简单的账户设置 以及登录你们的 App 的方式 它既安全又私密 既适用于你们的用户 也适用于你们的隐私 了解你们如何 与应用中的用户互动 这与 Apple 无关 因此 你们可以放心地 使用 Sign in with Apple Apple 不会跟踪任何此类内容 让我们快速感受一下 当用户轻点该按钮时的体验
他们会看到一张预先填写了 你们要求的信息的表格 如姓名和邮件
用户可以选择他们 想要共享的邮件
他们轻点“Continue”就是这样 他们就登录到你们的 App 了 你们的 App 会获得一个独特稳定的 ID
一个名称以及一个可以 为用户提供的经过验证的 邮件地址 最棒的是 这是一个 安全的双重验证账户 适用于你们 App 中的用户 就是这么简单 更棒的是 这一切都可以在所有用户的 设备上无缝地工作
在一个新设备上 通过简单的轻点即可让 你们使用与之前 App 相同的账户 并准备好再次完全投入使用 非常快 非常容易
因此 Sign in with Apple 可为你们的 App 提供 真正简化的账户设置体验 无需填写繁琐的表单 只需轻轻一点
用户已使用 Apple ID 从 App Store 下载了你们的 App Sign in with Apple 可帮助他们 通过轻点一下 就能使用你们 App
你们还可以获得可用于 与用户通信的经过验证的 邮件地址
这是 Apple 用于通信的 邮件地址 因此 无需进行这些繁琐的 往返发送邮件 并让用户轻点链接 Apple 已经为你们完成了这项工作
登录与 Apple 立即为你们 提供可以使用的邮件 无需额外验证
现在 一些用户可能 不太愿意共享他们的 真实邮件地址 而你们可能最终得到一些 不起作用的假邮件 那么 Sign in with Apple 可以 帮助你们隐藏我的
邮件选项使这些用户可以 共享隐藏的邮件地址 该邮件地址 将路由到其经过验证的邮箱里 这很棒 这是通过 Apple 的 私人邮件中继系统启用的 该系统将邮件转发给 用户的已验证邮箱 它也可以处理回复 所以无论收发 它都能处理 你们可以将其用于 App 的任何类型的业务通信 Apple 一旦将其发送到 用户的收件箱 就不会保留任何消息 总而言之 经过验证的邮件可以 立即用于你们的 App
有了 Sign in with Apple 你不需要记住任何密码 所以也不会忘记
因此它就更安全了
更好的是 你们的 App 收到的每个账户 都受到双重认证保护 这就是你们 App 的最佳账户 无需密码 双重认证 Sign in with Apple 无需你们投入任何成本 也不会给用户带来额外的摩擦 Sign in with Apple 的 内置安全性极佳
目前 打击系统中的账户欺诈是一个难题 而 Apple 可以提供独特的帮助 Sign in with Apple 包含一种 新的隐私友好方式 让你们获得对你们 App 上的 用户确实真实的信心
它将复杂的设备上智能 与账户信息相结合 并将其抽象为一个比特 真实用户或未知用户 对于真正的用户 在你们的 App 中 给予他们应得的贵宾级的待遇
这是一个高可信度的指示器 如果你得到是未知用户 那它可能是 一个用户 它也可能是一个机器人 对待此用户就像对待 你们系统中没有 足够信息做出决策的 任何其他新账户一样 因此 这是帮助你们 打击账户欺诈的 真实用户指示器
最后 Sign in with Apple 是跨平台的 该 API 适用于 所有 Apple 平台:iOS macOS watchOS tvOS
登录体验适用于每个平台 易于使用
通过 JavaScript API 你们可以在网页上 以及 Windows 或 Android 等 其他平台上 Sign in with Apple 我们稍后会详细讨论 这个问题 简化的账户设置 经过验证的邮件地址 内置安全性 反欺诈和跨平台 这是 Sign in with Apple 的 关键功能的快速摘要 接下来 Dima 将加入讲台 讨论如何将其 集成到你的原生 App 中 有请 Dima 多谢 Gokul 嗨 大家好 那么你们已经看到了 这个很棒的功能 它实际上需要什么来集成到 你们的 App 中呢
你们的 App 需要做四件 关键事情才能实现目标 首先 使用 Apple 的自动登录按钮
然后配置并执行授权请求
在用户看到使用 Sign in with Apple 的 UI 并经过快速面容 ID 检查后 授权结果将返回送至你们的 App 此时 你们需要使用 Apple ID 服务器验证结果 并在你们的系统中创建一个账户
最后同样重要的是 凭据状态可能会在返回到 你们的 App 后发生更改 并且你们的 App 需要 很好地处理这些状态更改
首先 让我们看一下使用 Sign in with Apple 按钮 只需几行代码 你们就可以在你们的 App 中 添加 AuthorizationAppleIDButton
初始化后添加操作
这就是你需要做的一切 该按钮支持多种 不同的自定义 以适应你们 App 的设计 它提供不同的视觉风格 和不同类型的标签 这对目前使用有效 API 的 App 而言非常熟悉
接下来 一旦用户执行操作 你们需要配置请求并执行授权
下面就是方法 只需一行代码 即可初始化 Apple ID 授权请求
这是你们在系统中 创建账户所需的全部内容
或者 如果你们的 App 需要 此功能以获得最佳用户体验 则可以设置 requestedScopes 以获取全名和邮件
如果你们的 App 确实需要此信息 则应该只请求此信息 并且在最小信息量方面报错
配置完请求后 初始化 AuthorizationController 设置代理以将结果 返回到你们的 App 中 最后同样重要的是执行请求
执行请求后 将启动向用户 显示的授权 UI 快速进行面容 ID 检查后 授权结果将 返回给你们的 App 我们来谈谈处理这些结果
通过 AuthorizationController didCompleteWithAuthorization 方法 你们将获得 一个授权对象此对象具有 AppleIDCredential 类型的 凭证属性 在处理之前 你们应该检查 这实际上是 AppleIDCredential
此对象包含 在系统中创建账户所需的所有信息 如果用户取消请求 或发生任何其他错误 我们将通过 didCompleteWithError 回调 让你的 App 知道
这两个代理回调 都保证在你们的 App 的 主队列中进行
因此 让我们深入了解 我们将为你们的 App 提供的结果
首先 用户标识符 这是一个独特 稳定的 团队范围的用户标识符 这很棒 你们可以使用它 从不同平台 不同系统 网页端 Android 端的 用户系统中检索信息 它在所有这些方面保持稳定 另外它与你们的开发团队有关
这是你们用户的关键 接下来 我们将返回验证数据 身份令牌和授权码 这是一种短期令牌 可与 Apple ID 服务器一起 使用以交换刷新令牌 如果你们与现有的 身份验证系统集成 那么采用 Sign in with Apple 将会十分自然
或者 如果你们提出要求 我们将返回账户信息 以一个名称和一封可验证的邮件的方式 另外由于 Apple 已对 此邮件进行了验证 因此我们向你们展示后 你们的 App 不再需要执行任何类型的验证
最后 如前所述
一个真实用户的指示器 使用此选项可简化你们的登录体验
所以现在你们已经在你们的系统中创建了一个账户 当用户在你们的 App 中 使用 Apple 设备时 凭据状态可能会更改 而且你需要妥善地处理这些情景
用户可能会停止在 App 中使用 Apple ID 他们可能会退出设备 你们应当妥善地处理这样的事件 为此 身份验证服务的 框架公开了一个 快速 API 允许你们查询此状态
使用先前通过 Apple ID Credential 返回的用户标识符 你们可以检查 GetCredentialState 调用以获取 当前 Apple ID 凭据的状态 这是一个非常快速的 API 调用 它可以返回到三件事 我们会告诉你们 用户已获得授权 并且你们应该让他们 继续使用你们的 App
凭证可能会被撤销 你们应该在此设备上 向用户退出你们的 App 并可选择引导他们重新登陆 notFound 表示用户之前未通过 Sign in with Apple 建立关系
这个 API 非常快 你们应该在 App 启动时 调用它以确保 为每种状态提供 量身定制的体验
此外 我们通过 NotificationCenter 公开通知 以通知你们此凭据状态何时 更改为已撤消 在此设备上把用户退出 并可选择引导他们重新登录
现在 用户已经与 你们的 App 建立了关系 他们正在使用该 App 他们创建了一个账户 他们总会获得 另一台设备 那么他们会再次 使用你们的 App 我们来谈谈这个 以及 Sign in with Apple 如何 在这种情况中帮助你们
当用户在新设备上 重返你们的 App 时 他们将获得一键式登录体验
快速进行面容 ID 检查后 他们会回到你们的 App 中
除此之外 我们知道 你们的系统中已有账户 所以现在我们通过相同的 API 支持 iCloud 钥匙串密码 你们应该请求 Apple ID 和 iCloud 钥匙串 请求的身份验证 我们将提供用户继续 使用他们现有的任何凭证 如果重返登入错误 那么请显示你们的常规登录流程 为了获得最佳用户体验 如果 App 没有现有本地账户 则应调用此启动功能
那么让我们来看看 实现它是多么容易
首先 使用 Apple ID 授权请求 和 Apple ID 密码 请求初始化请求数组 这就行了 就这么简单 传递请求数组并执行请求
如果存在一个 Sign in with Apple 的现有连接 则一个 AppleIDCredential 将会被 返还到你们的 App
如果用户具有存储的 iCloud 钥匙串密码 则该凭据将会被返回到 你们的 App 你们应该使用从此 API 获得的凭据来帮用户登录 如果用户没有现有凭据 API 将立即返回 报错 而且你们应该 显示标准登录流
通过在启动时 执行这些请求 你们可以防止系统中的 账户重复 并简化 返回 App 然后开始使用它 的用户体验
现在 我想在叫 Jonathan 来舞台 以演示如何轻松地构建它 多谢 Dima 大家早上好
Sign in with Apple 可以简化 用户创建账户或 登录 App 的方式 同时保持强大的账户安全性 密码自动填充和 自动强密码已经使你们 可以执行其中一些操作 Sign in with Apple 进一步 改进它们 你们可以使用 与 Sign in with Apple 相同的 本机 API 与密码自动 填充密码集成 我将带你们看看 三个主题 以让你们的用户 使用 Apple ID 登录你们的 App
首先 我将 Sign in with Apple 按钮添加到登录表单中 然后 我将向你们展示 如何实施快速登录流程 这允许了用户只需 轻轻一按即可登录现有凭据 最后 我将向你们展示 如何在 App 启动后 检查用户标识符的凭据状态 以确保你们的用户 已正确登录
为了向你们展示这一切 我有一个测试 App 名字叫《Juice》
在这里 你们可以看到 带有邮件和密码的 典型登录表单
我们将在它下面 添加另一个选项 Sign in with Apple
让我们开始吧 我们在项目设置中 有一个先决条件 即添加 Sign in with Apple 功能
因此 在你们的项目设置中 你们需要选择 App 并 转到“Signing & Capabilities”部分 我已经在这里添加了 Sign in with Apple 的功能 要在你们的 App 中添加它 请继续并单击 Capability 按钮 然后搜索 Sign in with Apple
执行此操作时 Xcode 将在你们 App 的 授权文件中添加相应的条目
然后 这将检查 你们是否已将 Sign in with Apple 功能 添加到 Developer Portal 中的 Apple ID
如果你们尚未这样做 则需要继续然后 登录 Developer Portal 并确保已添加此功能
所以在这里 我想强调 在这里看到的 Associated Domains 功能
这将确保你们在 创建 ASAuthorizationPassword 请求时将密码返回到 凭证中并呈现给用户 我稍后将向你们展示如何 在演示中添加其中一个请求
如果你们希望密码 请求提供 正确的凭据 请参键 2017 年的 《Password Autofill for Apps》会议 以及周四的 《What's New in Authentication》会议
好了 我要回到 Xcode 来看看《Juice》App
如你们所见 这只是一个 简单的演示 App 以突出此 API 的一些关键功能
在它或标签下面 我有一个名为“Login Provider Stack View” 的栈视图
这是我们要添加 Sign in with Apple 按钮的地方
添加 Sign in with Apple 按钮需要分三步来完成 首先 我将在我们的“Provider Stack View” 中添加 Sign in with Apple 按钮 然后我将定义一个函数 该函数将在轻点按钮时 创建并执行请求 最后 我们将采用 必要的身份验证服务协议 为我们提供结果
所以让我们开始 通过在我们的 UI 中添加 Sign in with Apple 按钮来实现这一点 让我们来看看 LoginViewController.swift 文件
因此我们将 使用 AuthenticationServices 模块 那么我们将继续并 在此处导入
所以我在这里定义了一个 名为 setupProviderLoginView 的函数 它正在初始化 ASAuthorizationAppleIDButton 然后它添加了 handleAuthorizationAppleID ButtonPress 函数 我在这里将其作为其动作存根 然后我将按钮添加到 loginProviderStackView 然后在我们的 UI 中显示它 就在上面 我正在覆盖 viewDidLoad 函数 这样我们就可以 继续调用 setupProviderLoginView 这将被添加 那么我会继续运行 App
很棒 按钮现在 在我们的 UI 中可见 但它并没有真正做任何事情 所以让我们跳到第二步 为我们的按钮定义动作
好吧 我们来聊聊这个功能 能做什么 其实我们正在做的是 使用 AppleIDProvider 初始化 ASAuthorizationAppleID 请求 然后我们将其 requestedScopes 属性设置为 包含全名和邮件范围的数组
这部分很关键 系统会要求用户 根据你们在此处设置的范围 来共享信息 然后 该信息将 返回到你们的 Apple ID 凭证 Apple ID 凭证中 你们应该只要求 你们真正需要的东西 那么让我们回到按钮的动作
所以我们使用我
插入到数组中的 请求初始化控制器 然后将设置和代理 presentationContextProvider 为 self 然后我们调用 performRequest
现在我们已经定义了动作 让我们继续运行 App
轻点 Sign in with Apple 按钮
正如你们所看到的 UI 正在询问我们 在请求中设置的请求范围
我现在要取消了
还记得 presentationContextProvider 中的这个代理吗
我们将不得不正式采用 为此所需的 authenticationServices 协议 我把它抄到了下面
因此 ASAuthorizationController 代理有两个函数 一个返回授权 另一个返回错误
让我们继续
我们将定义 AuthorizationController didCompleteWithAuthorization 所以我们在这里做的是 我们正在检查返回的授权 我们将检查授权的凭证 然后 在它是 appleIdCredential 的情况下 我们将为凭证的 用户属性设置一个 常量用户标识符
出于演示目的 我们将 用户标识符保存在钥匙串中 以便我们之后后使用它 我还将使用 ResultViewController 它将继续负责 一些处理 appleIdCredential 属性的样板
因此就在这之下 就在我们定义的下面 我们有了 didCompleteWithError 函数 在流程没有完成 或者没有凭据的 情况下会调用它
最后 我们还有一个协议 就是 ASAuthorizationController PresentationContextProviding
这为控制器 定义了一个函数 presentationAnchor 这要求我们做的是 返回我们希望 Authentication Services 显示 UI 的窗口 所以让我们运行 App
轻点按钮并分享邮件
只需轻点一下即可进行身份验证
所以这里的信号 似乎有一些问题 但我有一个备份视频 可以告诉你们应该发生什么
我们正在这 我们正在共享邮件 然后 ResultViewController 会在那里显示结果 正如你们所看到的 我们有一个用户标识符 全名和邮件地址
好的 实际上看起来这起作用了
好了 我们成功了 好的 让我们回到我们的主题 最后我们来总结一下 我们在 UI 中 添加了一个 Sign in with Apple 按钮 我们定义了此按钮的操作 以及返回结果的 身份验证服务协议 所需的功能 并指定了 UI 的显示位置
现在我们已经通过 使用 Sign in with Apple 按钮 来创建账户 让我们致力于使我们的用户快速登录 为此 我们将定义一个函数 该函数将在用户 拥有现有凭据的 情况下向用户显示 UI 因此 这可以是 Apple ID 或使用 App 授权域的 iCloud 钥匙串密码
所以我在这里定义了 performExistingAccountSetupFlows 函数 所以这里我们有一个数组 其中包含 Apple ID 请求和 使用相应提供程序的密码请求 然后 我们使用这些 请求初始化授权控制器 像之前一样 设置代理 和 presentationContextProvider 然后调用 performRequest
因此 我们向控制器 添加了另一种类型的 凭据请求 即密码请求 我们希望在我们的代理中 处理这种类型的结果 所以让我们继续做下去
那么我们为 ASPasswordCredential 设置了一个 case 因此 在这种情况下 ASPasswordCredential 具有 一个用户属性和一个密码属性 在这种情况下 当它返回给你们时 你们将需要继续对 服务器进行身份验证 甚至不需要向你们的用户 显示任何 UI 那么还有最后一步 实际就是要调用 performExistingAccountSetup Flows 函数
回到我们的类上
我将重写 viewDidAppear 以调用 performExistingAccountSetupFlows
让我们运行 App
正如你们所看到的 当我们显示 loginViewController 时 将向你们的用户 显示现有凭据
这是我们的 QuickSigninFlow 所以我们刚刚实现了 QuickSigninFlow 让我们 继续讨论我们的最后一个主题 即检查 AppleID 用户标识符的凭据状态
在今天演示的早些时候 我们在创建账户时 已将用户标识符保存到钥匙串中 使用此标识符 我们可以检查登录状态 以确保我们的用户 经过适当的身份验证 我们将在 AppDelegate 类中执行此操作 然后我转到 AppDelegate 类
我要删除它
首先 我们要检查 钥匙串中是否有 用户标识符 如果是这样 我们将初始化 ASAuthorizationAppleIDProvider 然后使用 AppleIDProvider 我们将调用凭证 传递用户标识符的状态
所以我们会得到三种不同的 三种不同 类型的案例 一个是授权的 在这种情况下 你们可以 假设用户已通过 正确的身份验证 你们可以继续正常的 App 操作 在它被撤销的情况下 你们需要调用你们 现有的注销逻辑 然后你可以通过 notFound 这个 case 来显示 LoginViewController 所以我要继续运行 App
正如你们所看到的 用户标识符显示在 ResultViewController 中 因为在这种情况下 用户已经被授权 ResultViewController 是故事板中的 初始视图控制器 这就是我要说的了 很简单吧 那么我刚刚向你们 展示了如何在登录表单中 添加 Sign in with Apple 按钮 如何实现 QuickSigninFlow 以使用现有凭证 登录用户 以及如何使用用户标识符 检查凭证状态确保 用户通过你们的 App 进行身份验证 有了这个 我要把会议 交还给 Gokul 他将涵盖 多平台的主题 Gokul 谢谢你 Jonathan 我们刚刚看到 Jonathan 从一个测试 App 开始 添加一个按钮 解决请求和响应 最后处理现有账户 一切易于实施 为用户提供了极好的体验 那其实是一个非常快速的演示 现在让我们来谈谈跨平台 跨平台很重要 它通过一个简单的 JavaScript 库启用 使用此库 你们可以 让用户在任何平台 (如 Windows 或 Android) 上 Sign in with Apple 轻点熟悉的 Sign in with Apple 按钮将 重定向到 Apple 用户可以在其中输入 Apple ID 并登录 登录后 它会重定向回来
你们收到的调用和 信息都与本机 API 非常相似 如果你们提出要求 你们将获得 ID 令牌 甚至姓名或邮件
一旦你们获得 ID 和令牌 你们就可以将其 转换为 App 中的 App 会话 最重要的是 对 Safari 的支持是内置于 Safari 中的
因此 当你们的用户轻点该按钮时 Safari 将显示一个类似 本地 Apple Pay 的工作表 你们的用户可以 简单地使用触控 ID 他们可以 立即登录并快速使用你的网站 这是一次非常棒的体验 所以它内置于 Safari 中
与 JavaScript 库集成 只需四个简单的步骤
首先 在 HTML 中 包含 JavaScript 库 如图所示 一个简单的 div 渲染按钮 你们可以使用许多参数设置样式 以自定义适合 你们网站的内容 使用一些参数配置它 例如你们是否需要名称 邮件和重定向 redirectURI
最后 当用户 完成登录时 结果将使用表单编码值 发回到重定向 redirectURI
你们验证令牌 身份验证代码 并将其转换为 App 会话 并且你们可以决定希望 会话存在多长时间 这样就快速了解了 JavaScript 库的 跨平台支持
最后 让我们通过一些 最佳实践来看看 与 Sign in with Apple 集成的实例
以下是一些一般性 指导原则 如 App Store 指南中所述 除非你们的 App 需要重要的 基于账户的功能 否则就让人们 无需登录即可使用它 例如 你们可以指导 用户在购买后 Sign in with Apple 这样你们就 可以将购买与 他们可以轻松 返回的账户绑定 如果你们只需要唯一标识符 来标识用户 请不要收集姓名或邮件
你不需要它 如果你们通过登录 Apple
收集邮件 请确保你们尊重用户的选择
以下是与 API 集成时 要记住的一些 其他最佳实践
首次启动 App 时 请使用 API 检查现有账户 这样 用户可以 快速使用他们 已经拥有的 App 账户 无论是 iCloud 钥匙串密码 还是现有的 Apple 账户 并且你们的 App 中 没有任何重复的账户
计划为返回 真实用户标识符的用户 提供最佳体验 如果它返回未知 请像对待系统中的 任何新账户一样对待它们 使用 Button API 来绘制按钮
当你们使用 API 绘制按钮时 将其连接到 代码中的 Apple ID 提供程序
最后 一旦用户 Sign in with Apple 他们就会期望 在你们的 App 所在的 所有平台上看到它 所以在所有平台上实现它
以上是最佳实践 总而言之 Sign in with Apple 可以快速轻松地设置 账户并登录你们的 App 简化的一键账户设置 没有繁琐的表单 已验证的邮件地址 即时可用 而且你们可以 用于任何通信
内置安全性没有新密码 每个账户双重认证
真实用户指示器 帮助你们打击账户欺诈 跨平台支持 这样你们的用户 就可以在你们的 App 所在的 每个平台上 Sign in with Apple
请于 10:00 加入我们的实验室 我们很乐意在那 回答你们的任何问题 身份验证服务 框架中还有更多内容 可帮助你们协助 用户登录和 处理密码 请参加明天的 《What's New in Authentication》会议 来了解更多 并且 Sign in with Apple 可在独立的 Watch App 很好地运行 请收听 WWDC App 上的 《Creating Independent Watch Apps》 以了解更多信息 就是这样 感谢你们加入我们的会话 希望你们享受了一次很棒的会议 谢谢大家 [掌声]
-
-
正在查找特定内容?在上方输入一个主题,就能直接跳转到相应的精彩内容。
提交你查询的内容时出现错误。请检查互联网连接,然后再试一次。