在真实设备上使用 Apple 登录时无法获取姓名和电子邮件

问题描述 投票:0回答:4

因此,我正在实现使用 Apple 登录,模拟器上一切顺利,我请求电子邮件、全名范围、身份验证 UI 显示,并且我可以获取数据,如下图所示:

但是在真实设备(iPadOS 13、iPad 2018)上测试时,UI 没有显示(它不要求在 UI 上输入姓名和电子邮件),并且我无法从响应中获取电子邮件、全名,并且我还可以确认

authorizedScopes
是空的,我只能获取用户标识符

我相信这是一个错误,会提交雷达,还在苹果开发者论坛上发布了讨论(但他们通常不会批准我的帖子,我不知道为什么)

如果这不是一个错误,有人可以告诉我如何解决这个问题吗? 谢谢

ios xcode applet ios13
4个回答
33
投票

如果有人第一次存储“用户电子邮件”、“名字”失败,那么他应该按照以下步骤操作:

iPhone 设置 -> Apple ID -> 密码和安全 -> Apple ID 登录 -> {您的应用程序} > 停止使用 Apple ID。


31
投票

问题解决了!太长了;博士

这是预期行为

苹果工程师解答 (原帖链接:https://forums.developer.apple.com/thread/121496

嗨,aslkdjalksdjasdasd,

此行为正确,用户信息仅在初始用户注册时在 ASAuthorizationAppleIDCredential 中发送。随后的 使用同一帐户使用“Sign In with Apple”登录您的应用程序 不共享任何用户信息,只会返回用户标识符 ASAuthorizationAppleIDCredential。建议您安全地 缓存包含用户的初始 ASAuthorizationAppleIDCredential 信息,直到您可以验证帐户已成功注册 在您的服务器上创建。

帕特里克

2019/12/15 编辑

Apple 的“使用 Apple 登录”文档中也记录了此行为,请查看文档

确保您的应用程序将凭据和用户信息中继到您的应用程序服务器。 API 会收集此信息,并在用户首次使用“使用 Apple 登录”登录应用程序时与您的应用程序共享该信息。如果用户随后在另一台设备上使用“通过 Apple 登录”,API 不会再次询问用户的姓名或电子邮件地址。仅当用户停止使用“使用 Apple 登录”并稍后重新连接到您的应用程序时,它才会再次收集信息。


0
投票
https://jwt.io/

或使用 iOS swift JWT 库进行编码。 编码后您可以获得用户的

电子邮件


0
投票

首次登录后
    ASAuthorizationAppleIDCredential
  1. 将会有
    email=nil
    。要重置状态,您需要进入设置并在密码和安全页面中重置它。
    JWT 令牌 (
  2. String(data: appleIDCredential.identityToken ?? Data(), encoding: .utf8)
  3. )
    始终包含电子邮件
    ,因此您可以轻松解码有效负载并从那里获取它。
  4. 模拟器
  5. 上,JWT 令牌不包含电子邮件。所以,更喜欢在真实设备上进行测试
© www.soinside.com 2019 - 2024. All rights reserved.