使用苹果登录 - 模拟器与iPhone的行为不同。

11

我正在尝试使用Xcode(Beta 11.0 beta 6)设置“使用Apple登录”。

在模拟器上运行得很好,但是当我在我的iPhone(iOS 13.1)上运行它时,我没有得到相同的显示。

在模拟器上:

On Simulator

在iPhone上:

On iPhone

这是我如何调用“使用Apple登录”的方式:

- (IBAction)signInWithApple:(id)sender {
    if (@available(iOS 13.0, *)) {
        ASAuthorizationAppleIDProvider *appleIDProvider = [[ASAuthorizationAppleIDProvider alloc] init];
        ASAuthorizationAppleIDRequest *request = [appleIDProvider createRequest];
        request.requestedScopes = @[ASAuthorizationScopeFullName,ASAuthorizationScopeEmail];
        ASAuthorizationController *authorizationController = [[ASAuthorizationController alloc] initWithAuthorizationRequests:@[request]];
        authorizationController.delegate = self;
        authorizationController.presentationContextProvider = self;
        [authorizationController performRequests];
    } else {
        // Fallback on earlier versions
    }
}

根据我的调试,我知道在这两种情况下代码都被执行,并且email + fullname的范围在authorizationController中设置。

我希望在两种情况下都能看到“使用Apple登录”并要求输入我的全名以及是否想要隐藏我的电子邮件地址...

但它只在模拟器上发生。 在iPhone上,我只需“继续”,识别我的面部... 就这样。

在这两种情况下,这是在之后调用的:

-(void)authorizationController:(ASAuthorizationController *)controller
  didCompleteWithAuthorization:(ASAuthorization *)authorization  API_AVAILABLE(ios(13.0)){

    ASAuthorizationAppleIDCredential *appleIDCredential = authorization.credential;
...

但是在模拟器的情况下,我可以获得值

"appleIDCredential.identityToken"
"appleIDCredential.email"
"appleIDCredential.fullName"

当我使用iPhone时,我只能获得以下数值

"appleIDCredential.identityToken"

谢谢你的帮助!:)

附言:在两种情况下,我都尝试使用同一Apple账户连接,因此我尝试查看了苹果配置,但如果这是问题,我不确定哪里出了问题。

1个回答

8
在模拟器上,您会看到注册流程(首次用户体验),而在设备上,您已经通过了注册,并且现在看到登录流程(返回用户体验)。我不确定为什么模拟器没有显示登录流程,但对我来说也是同样的方式运作。
根据 文档此讨论串,完成登录流程后您将无法获取用户信息(电子邮件和全名):
确保您的应用程序将凭据和用户信息传递到您的应用程序服务器。API 在用户使用“使用 Apple 登录”首次登录到应用程序时收集此信息并与您的应用程序共享。如果用户然后在另一台设备上使用“使用 Apple 登录”,则 API 不会再次要求用户提供姓名或电子邮件。只有当用户停止使用“使用 Apple 登录”,然后稍后重新连接到您的应用程序时,才会再次收集信息。
由于用户的信息在后续 API 调用中不会与您的应用程序共享,因此您的应用程序应该在从 API 响应接收到信息后立即将其存储在本地。如果在您的过程或网络中出现后续故障,您可以从本地存储中读取信息并尝试重新处理它。 有一种方法可以通过撤销应用程序对 Apple ID 的使用来返回到您设备上的注册流程。 要执行此操作,您可以转到设备设置→密码和帐户→iCloud→密码和安全性→使用您的 Apple ID 的应用程序→[NameOfYourApp] 应用程序→停止使用 Apple ID→停止使用。 您还可以访问您的 Apple ID 应用程序安全页面 进行操作。它应该看起来像这样:

Apple ID App Security page

我从什么是“使用Apple登录”?中获取了图片和一些提示。


如果我理解正确的话,该进程的安全性似乎相当“差”。这意味着通过我的API进行“登录”时,我只需要发送identityToken吗?我没有其他信息来“交叉检查”吗?非常感谢您的详细回答!那么我将忽略模拟器的行为,并找到一种方式来完成登录流程... ^^ - royraider
是的,根据这个回答identityToken是稳定且唯一的,因此可以安全地用来恢复其他用户信息。 - Eugene Berdnikov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接