Flutter Flatter Apple登录包未返回所需的凭据

Flutter Flatter Apple登录包未返回所需的凭据,flutter,flutter-dependencies,Flutter,Flutter Dependencies,我有一个带有Apple登录包的Flitter应用程序:它似乎工作得很好,因为它正在让我登录。它确实提供了一个用户id,但其他凭证都是空白的,请参见此处: { credential = { authorizationCode = "<FlutterStandardTypedData: 0x283033240>"; authorizedScopes = ( ); email = "<null>

我有一个带有Apple登录包的Flitter应用程序:它似乎工作得很好,因为它正在让我登录。它确实提供了一个用户id,但其他凭证都是空白的,请参见此处:

{
credential =     {
    authorizationCode = "<FlutterStandardTypedData: 0x283033240>";
    authorizedScopes =         (
    );
    email = "<null>";
    fullName =         {
        familyName = "<null>";
        givenName = "<null>";
        middleName = "<null>";
        namePrefix = "<null>";
        nameSuffix = "<null>";
        nickname = "<null>";
    };
    identityToken = "<FlutterStandardTypedData: 0x283030560>";
    realUserStatus = 1;
    state = "<null>";
    user = "001061.cc1ba19b029c4da2a0b492026e586439.1240";
};
credentialType = ASAuthorizationAppleIDCredential;
status = authorized;
}
flutter: YES SIGNED IN AND HERE ARE THE CREDENTIALS: null
flutter: USER EMAIL:: = quk98fwjws@privaterelay.appleid.com
flutter: USER NAME:: = null
我真的非常感谢任何帮助,因为如果苹果没有完成登录,苹果不会将我的应用发布到应用商店

非常感谢,如果您有任何问题,请随时与我联系,我希望我已经提供了足够的信息


卡森

我相信这是按计划进行的

Apple仅在您的应用程序第一次登录设备时返回全名和电子邮件,之后的任何登录都会返回空值。我猜您之前已经登录,然后尝试通过新的Firebase Auth用户再次登录,此时名称/电子邮件不再可用

出于测试目的,再次接收这些信息;转到您的设备设置设置>苹果ID、iCloud、iTunes和应用商店>密码和安全>使用苹果ID的应用程序,点击应用程序,然后点击停止使用苹果ID。您现在可以再次登录,您将再次收到全名和电子邮件


这就是苹果设计API的方式-因此建议您将这些API存储在应用程序的其他位置,例如使用共享首选项插件-以便您在需要时始终可以访问这些API。

我相信这是按预期进行的

Apple仅在您的应用程序第一次登录设备时返回全名和电子邮件,之后的任何登录都会返回空值。我猜您之前已经登录,然后尝试通过新的Firebase Auth用户再次登录,此时名称/电子邮件不再可用

出于测试目的,再次接收这些信息;转到您的设备设置设置>苹果ID、iCloud、iTunes和应用商店>密码和安全>使用苹果ID的应用程序,点击应用程序,然后点击停止使用苹果ID。您现在可以再次登录,您将再次收到全名和电子邮件

这就是苹果设计API的方式——因此建议您将这些API存储在应用程序的其他位置,例如使用shared_preferences插件——以便您在需要时始终能够访问这些API

try {
  if (await AppleSI.AppleSignIn.isAvailable()) {
    final AppleSI.AuthorizationResult result =
        await AppleSI.AppleSignIn.performRequests([
      AppleSI.AppleIdRequest(
          requestedScopes: [AppleSI.Scope.email, AppleSI.Scope.fullName])
    ]);
    switch (result.status) {
      case AppleSI.AuthorizationStatus.authorized:
        print(
            'YES SIGNED IN AND HERE ARE THE CREDENTIALS: ${result.credential.email}'); //All the required credentials
        // NOW USE THE CREDS TO SIGN IN TO FIREBASE
        final appleIdCredential = result.credential;
        final oAuthProvider = OAuthProvider(providerId: 'apple.com');
        final credential = oAuthProvider.getCredential(
          idToken: String.fromCharCodes(appleIdCredential.identityToken),
          accessToken:
              String.fromCharCodes(appleIdCredential.authorizationCode),
        );
        final authResult =
            await _auth.signInWithAppleCredential(credential);
        print('USER EMAIL:: = ${authResult.email}');
        print('USER NAME:: = ${appleIdCredential.fullName.familyName}');