如何在使用苹果功能登录时使用“用户”参数获取电子邮件、姓名等用户信息?

Posted

技术标签:

【中文标题】如何在使用苹果功能登录时使用“用户”参数获取电子邮件、姓名等用户信息?【英文标题】:How to get user information like email, name using "user" param in Sign in with apple feature? 【发布时间】:2020-05-21 07:22:51 【问题描述】:

Apple 在 WWDC19 上在 ios 13 和更高版本的 iOS 中引入了 Apple 登录功能。我已经在我的应用程序中实现了该功能。

当用户第一次对应用进行身份验证时,我们将在下面的委托方法中获取电子邮件、姓名、用户、状态等身份验证信息。

func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization)  

一旦用户成功通过身份验证,Apple 将在 Apple Sign in 下维护 iCloud 中的应用信息。

再次,当用户尝试对同一个应用进行身份验证时,Apple 将返回用户、状态等。它不应返回名称和电子邮件信息。

有没有办法在上述委托方法中使用该用户参数获取用户的电子邮件和姓名。

【问题讨论】:

请查看我的答案并将其标记为已接受,因为我现在提供了链接 id_token 的值是否相同?如果是,您可以使用它从您的数据库中检索存储的信息 @iOSDev 我每次都可以获得相同的“用户”参数。我可以用它在本地存储。但我不想那样做。我需要通过下次验证苹果登录来获得该信息。 任何识别电子邮件/Apple ID 的解决方案请帮忙。我遇到了同样的问题,我需要 Apple ID 来检查我的数据库中用户是否存在用于开放身份验证的 ID。 【参考方案1】:

根据 Apple 文档,您无法通过在同一设备或任何其他设备上再次执行相同的身份验证过程来再次获取姓名或电子邮件,除非用户停止对您的应用使用 Sign in with Apple 并稍后重新连接到您的应用。即使那样,您也只会第一次得到它。

查看文档here

【讨论】:

【参考方案2】:

当您再次尝试对同一应用进行身份验证时,使用 Apple 登录不会返回电子邮件和姓名。

但是,您会获得一个用户 ID(令牌),您可以使用它来验证下次登录。

对于姓名和电子邮件,您可以使用 api 将这些凭据存储在数据库中,并且可以在具有相同令牌的同一用户再次登录时再次获取和验证。

在此处查看来自 Apple 员工 Dima_Beliy 的答案:

范围仅在初始授权期间共享一次。一旦 SIWA API 返回信息,就由客户端应用程序将其存储在他们的系统中。对于后续授权,作为 SIWA API 的一部分返回的“用户”标识符应用作从您的系统中获取先前共享信息的一种方式。

一旦 SWIA API 返回信息,应用程序应该在自己的系统中创建一个帐户,存储信息,然后使用“用户”标识符检索它以进行后续授权。

出于隐私原因,数据仅返回一次,我们不支持持续的数据共享。

https://forums.developer.apple.com/thread/119826

【讨论】:

我可以在苹果论坛中获得错误报告链接吗? @VimalkumarN.M.是的,等一下,让我发给你。 这不是错误。这种情况记录在Apple documentation

以上是关于如何在使用苹果功能登录时使用“用户”参数获取电子邮件、姓名等用户信息?的主要内容,如果未能解决你的问题,请参考以下文章

在没有电子邮件 ID 的情况下使用 Apple 登录

iOS实现苹果第三方登录功能:Sign in with Apple

如何根据 Windows 登录名使用 VBA 获取电子邮件地址?

如何在 Yii 中获取登录用户的电子邮件 ID?

在 Unity 3D 中使用 playgameservices sdk 时如何获取 google 用户的电子邮件 ID?

如何使用 Parse.com 登录获取 Facebook 用户电子邮件