#firebase #flutter #google-cloud-firestore #apple-sign-in
# #firebase #flutter #google-облако-firestore #apple-вход в систему
Вопрос:
Я пытаюсь настроить вход в Apple с помощью следующего кода. При нажатии на кнопку ничего не происходит.
Я получаю следующую ошибку:
Tried calling: authorizationCode
flutter: NoSuchMethodError: The getter 'authorizationCode' was called on null.
Receiver: null
Как мне это исправить?
Future<bool> get appleSignInAvailable => AppleSignIn.isAvailable();
Future<User> appleSignIn() async {
try {
final AuthorizationResult appleResult =
await AppleSignIn.performRequests([
AppleIdRequest(requestedScopes: [Scope.email, Scope.fullName])
]);
if (appleResult.error != null) {
// handle errors from Apple
}
final AuthCredential credential =
OAuthProvider('apple.com').credential(
accessToken:
String.fromCharCodes(appleResult.credential.authorizationCode),
idToken: String.fromCharCodes(appleResult.credential.identityToken),
);
UserCredential result =
await Global.fbAuth.signInWithCredential(credential);
User user = result.user;
updateUserData(user);
return user;
} catch (error) {
print(error);
return null;
}
}
Ответ №1:
Если вы используете симулятор iOS 14, это может быть связано с проблемой, описанной здесь. Обходным решением было бы использовать реальное устройство для отладки или использовать симулятор iOS 13
Кроме того, смотрите Эту тему для справки
Ответ №2:
Я столкнулся с такой же проблемой в одном из моих проектов.Для решения проблемы необходимо добавить свой ключ sha в firebase и facebook.
Также вы можете попробовать приведенный ниже код,
import 'package:apple_sign_in/apple_sign_in.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/services.dart';
class AuthService {
final _firebaseAuth = FirebaseAuth.instance;
Future<User> signInWithApple({List<Scope> scopes = const []}) async {
// 1. perform the sign-in request
final result = await AppleSignIn.performRequests(
[AppleIdRequest(requestedScopes: scopes)]);
// 2. check the result
switch (result.status) {
case AuthorizationStatus.authorized:
final appleIdCredential = result.credential;
final oAuthProvider = OAuthProvider('apple.com');
final credential = oAuthProvider.credential(
idToken: String.fromCharCodes(appleIdCredential.identityToken),
accessToken:
String.fromCharCodes(appleIdCredential.authorizationCode),
);
final authResult = await _firebaseAuth.signInWithCredential(credential);
final firebaseUser = authResult.user;
if (scopes.contains(Scope.fullName)) {
final displayName =
'${appleIdCredential.fullName.givenName} ${appleIdCredential.fullName.familyName}';
await firebaseUser.updateProfile(displayName: displayName);
}
return firebaseUser;
case AuthorizationStatus.error:
throw PlatformException(
code: 'ERROR_AUTHORIZATION_DENIED',
message: result.error.toString(),
);
case AuthorizationStatus.cancelled:
throw PlatformException(
code: 'ERROR_ABORTED_BY_USER',
message: 'Sign in aborted by user',
);
default:
throw UnimplementedError();
}
}
}
Комментарии:
1. Спасибо за ваш ответ, но я уже добавил ключ sha в firebase
2. Можете ли вы показать ошибки, если они есть. Поставьте печать для проверки. Также, пожалуйста, убедитесь, что вы включили вход в Apple в разделе аутентификации firebase
3. Я обновил вопрос сообщением об ошибке, и да, я включил вход в Apple в firebase
4. Можете ли вы попробовать код, который я опубликовал прямо сейчас
5. Спасибо за код, но, к сожалению, при его использовании я получаю ошибки во всех моих файлах входа в систему, но я постараюсь посмотреть, смогу ли я адаптировать то, что вы отправили, к моему существующему коду