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