因此,我正在实现使用 Apple 登录,模拟器上一切顺利,我请求电子邮件、全名范围、身份验证 UI 显示,并且我可以获取数据,如下图所示:
但是在真实设备(iPadOS 13、iPad 2018)上测试时,UI 没有显示(它不要求在 UI 上输入姓名和电子邮件),并且我无法从响应中获取电子邮件、全名,并且我还可以确认
authorizedScopes
是空的,我只能获取用户标识符
我相信这是一个错误,会提交雷达,还在苹果开发者论坛上发布了讨论(但他们通常不会批准我的帖子,我不知道为什么)
如果这不是一个错误,有人可以告诉我如何解决这个问题吗? 谢谢
如果有人第一次存储“用户电子邮件”、“名字”失败,那么他应该按照以下步骤操作:
iPhone 设置 -> Apple ID -> 密码和安全 -> Apple ID 登录 -> {您的应用程序} > 停止使用 Apple ID。
问题解决了!太长了;博士
这是预期行为
苹果工程师解答 (原帖链接:https://forums.developer.apple.com/thread/121496)
嗨,aslkdjalksdjasdasd,
此行为正确,用户信息仅在初始用户注册时在 ASAuthorizationAppleIDCredential 中发送。随后的 使用同一帐户使用“Sign In with Apple”登录您的应用程序 不共享任何用户信息,只会返回用户标识符 ASAuthorizationAppleIDCredential。建议您安全地 缓存包含用户的初始 ASAuthorizationAppleIDCredential 信息,直到您可以验证帐户已成功注册 在您的服务器上创建。
帕特里克
Apple 的“使用 Apple 登录”文档中也记录了此行为,请查看文档。
确保您的应用程序将凭据和用户信息中继到您的应用程序服务器。 API 会收集此信息,并在用户首次使用“使用 Apple 登录”登录应用程序时与您的应用程序共享该信息。如果用户随后在另一台设备上使用“通过 Apple 登录”,API 不会再次询问用户的姓名或电子邮件地址。仅当用户停止使用“使用 Apple 登录”并稍后重新连接到您的应用程序时,它才会再次收集信息。
首次登录后
ASAuthorizationAppleIDCredential
email=nil
。要重置状态,您需要进入设置并在密码和安全页面中重置它。JWT 令牌 (String(data: appleIDCredential.identityToken ?? Data(), encoding: .utf8)
始终包含电子邮件,因此您可以轻松解码有效负载并从那里获取它。 在