Apple 登录:Apple 返回的“用户”凭据是永久的吗?

Sma*_*alk 10 apple-sign-in

我能够成功访问 Apple 返回的凭据,作为其新(WWDC '19 -- iOS 13)登录 Apple 库的一部分。

在此委托方法中访问凭证:

extension ViewController: ASAuthorizationControllerDelegate {
    func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
        if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
         //here is credentials . 
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后使用“用户”属性来提取用户 ID:

    credential.user 
    //returns, for example, '000046.20082df1df9a41b78cd1552979288e19.2346' dummy value
Run Code Online (Sandbox Code Playgroud)

对于该特定 AppleID(也许是该特定应用程序),此“用户”属性是否被理解为静态/永久?

(我正在访问同步 API,并希望从 44 个字符的 Apple 'user' 凭证中硬编码用户凭证。)

Dav*_*ore 13

的用户标识符属性ASAuthorizationAppleIDCredential是 Apple ID 和开发人员团队之间稳定的唯一标识符。应用撤销不会影响用户 ID 的稳定性。这也意味着在开发团队的应用程序集中,用户 ID 将是相同的,这使其成为开发人员应用程序之间同步的最佳选择。


编辑应用转移:

将应用程序从一个开发团队转移到另一个开发团队确实会导致用户标识符发生变化,因为它被限定为每个团队的稳定用户标识符。

转移使用 Apple 登录的应用程序时的最佳实践是使用 Apple API 端点将旧团队的用户 ID 与新团队的用户 ID 映射。如果由于某种原因开发人员不使用 API 端点,AuthenticationServices通过接受旧用户 ID 来支持应用程序传输,ASAuthorizationAppleIDRequest并且将返回新用户 ID。

通常,AuthenticationServices会做正确的事情。但是,如果用户删除与团队 A 关联的应用程序(并使用 Apple 登录该应用程序),然后重新安装现在与团队 B 关联的同一个应用程序,则关联两个用户 ID 的唯一方法是使用 API端点。


来源:我是负责登录 Apple 的团队的一名工程师。

  • ASAuthorizationAppleIDCredential.h 对“user”有一条注释:“只要用户与请求客户端连接,标识符就会保持稳定。当用户与身份提供者断开连接时,该值可能会发生变化。” 不得不说连接听起来不太稳定。 (3认同)