com.apple.AuthenticationServices.Authorization 错误代码 1000

57

我在DidCompleteWitherror中收到以下错误:

com.apple.AuthenticationServices.Authorization Error Code 1000
我正在使用以下代码登录到苹果:

var appleIdProvider = new ASAuthorizationAppleIdProvider();
var request = appleIdProvider.CreateRequest();
request.RequestedScopes = new ASAuthorizationScope[] { ASAuthorizationScope.Email, ASAuthorizationScope.FullName };
var authController = new ASAuthorizationController(new[] { request });
authController.Delegate = this;
authController.PresentationContextProvider = this;
authController.PerformRequests();
...
[Export("authorizationController:didCompleteWithAuthorization:")]
public void DidComplete(ASAuthorizationController controller, ASAuthorization authorization)
{
...
}

[Export("authorizationController:didCompleteWithError:")]
public void DidComplete(ASAuthorizationController controller, NSError error)
{
...
}
  • 我检查了Entitlements.plist中的Apple登录
  • 我在管理控制台创建了应用程序ID,并验证了我的域名。即使Web授权已经起作用。
  • 我尝试切换到带有苹果登录的预配配置文件。

这个错误的原因是什么?


登录在开发和测试环境中有时会出现问题,即使所有设置都正确。对于开发和测试来说不是很稳定。 - MartianMartian
11个回答

92

我遇到了这个错误,因为我忘记添加登录功能并重新启动应用程序。

capability


我在我的问题中提到了它。我在Entitlements.plist中检查了苹果登录 - Access Denied
@AccessDenied,你说得对。抱歉。当我在寻找我的问题时,我是通过标题找到它的。如果它没有帮助,我可以删除它。 - Vladislav Zaynchkovsky
8
没问题,留给其他人吧。也许它会帮助其他人。 - Access Denied
也帮助了我。那个设置在从 Cordova 切换到 Capacitor 后没有保存下来。 - Craig

51

在搜索后,我发现它可以在真实设备上运行,但在模拟器上有时会出现问题。

但是,通过登录这里并删除设备下的模拟器来解决了这个问题。然后再次构建它。不要忘记在“签名和功能”中添加“使用Apple登录”。


1
我发现在模拟器上它运行良好一段时间,然后开始出现这篇文章中的错误代码。Noe的建议对我很有用。可能是因为从多个不同的模拟器设备登录,不确定,但按照上述方法将其从我的开发帐户中删除就足够了。甚至不需要重新构建或重新启动。只需重试即可成功。 - Paul Bruneau
1
@PaulBruneau 同样的情况 :) - Heartless Vayne
1
是的,这是因为“使用 Apple 登录”没有添加到“签名和能力”。 - Eric

31

首先,对我来说以上所有答案都是正确的。

其次,我花了几个小时才发现我错过了在release配置中添加“使用Apple ID登录授权”的步骤,所以我在这里粘贴我所做的内容。

您可以通过以下任一方法进行检查:

1. 在Xcode中的签名和能力下的每个选项卡下进行检查

输入图像描述

2. 在vscode(或其他文件工具)中搜索com.apple.developer.applesignin,您应该会找到3个授权文件

输入图像描述

3. 在vscode(或其他文件工具)中检查项目文件夹中的文件,您应该会找到包含com.apple.developer.applesignin3个授权文件

输入图像描述


1
由于某种原因,我的能力只有(调试)。可能是我换电脑时改变了设置,因为以前它是可以工作的。但这次更改保存了我,我进行了更改并且它起作用了!谢谢!!! - Lucas Leandro
什么是“错过和捕获”?我错过了确切的事情,但它被解决了。谢谢@JerryZhou - Sandeep Rana
1
如果我只找到一个授权文件,该怎么办? - MartianMartian
谢谢兄弟,你救了我的一天。我不知道在调试模式下发生了什么,它没有应用该功能,只需添加它,就能正常工作。 - mychar

16

结果发现csproj中缺少设置而引起问题。

在这里找到了答案:https://xamarin.github.io/bugzilla-archives/25/25141/bug.html

我打开了csproj并发现一些构建配置缺少CodesignEntitlements,有一些是空的:

<CodesignEntitlements>Entitlements.plist</CodesignEntitlements>

在将其添加到/更新所有构建配置后,它最终起作用了。

附注:在此之前,我尝试创建一个空的 Xamarin 项目(使用相同的 bundle 名称),并在模拟器上重现了问题。然后我创建了一个 Swift 项目(使用相同的 bundle 名称),它能够正常工作。因此,很明显这是一个 Xamarin 特定的 bug。


1
这就是我的问题的解决方案。 - WikipediaBrown

4

尽管Apple的文档会误导您,但无需进行Apple的验证步骤。

您可以尝试运行新构建,并确保创建带有更新功能的新配置文件。

请确保在构建设置中添加了“Apple登录”授权,并在开发者门户网站中的Apple证书中添加。

如果您正在运行开发版本,则尝试切换到生产版本。您可能需要签署Ad Hoc分发的应用程序包并以这种方式安装。

如您可以在Apple文档中查看,1000错误代码确实意味着错误是未知的,因此该解决方案可能不适用于您。在您的代码方面,我认为它看起来没问题! 您还可以查看这些示例


我已经在以下链接中看到了这些信息,感谢您在这里复制它:https://github.com/expo/expo/issues/5781 - Access Denied

1
我在操作系统设置中退出Apple ID时能够重现这个问题。
如果我在提示“使用Apple ID登录。您需要在设置中使用您的Apple ID登录”时点击“关闭”,那么我会得到错误代码1000prompt

1

我正在使用Swift,想要说的是,有时候iPhone上的Apple Id登录需要进行双重认证,所以我的代码如下:

        if #available(iOS 13.0, *) {
            let appleIDProvider = ASAuthorizationAppleIDProvider().createRequest()
            appleIDProvider.requestedScopes = [.fullName, .email]
            
            //let passwordProvider = ASAuthorizationPasswordProvider().createRequest()
            
            let authorizationController = ASAuthorizationController(authorizationRequests: [appleIDProvider])
            authorizationController.delegate = self
            authorizationController.presentationContextProvider = self
            authorizationController.performRequests()
        } else {
            // Fallback on earlier versions
        }

密码请求ASAuthorizationPasswordProvider已经被注释并跳过,因为苹果手机需要使用Apple ID。

当需要使用两步验证的Apple ID时,我们可以请求此提供程序ASAuthorizationPasswordProvider,但我们必须删除代码。删除代码后,所有运行工作正常。


听起来你发现了一个用户可能会遇到的问题,除非你有信心这只是一个模拟问题? - aehlke

0

我通过将Apple登录添加到登录与功能选项卡中解决了这个错误。


0
我必须在继续之前组建一个开发团队。

0
对于那些仍然在与React Native一起努力解决此错误的人,你只需要从你对@invertase/react-native-apple-authentication hook的调用中移除getCredentialStateForUser。

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