У меня есть приложение Flutter в производстве со многими пользователями, использующими Firebase Backend. Я хочу добавить к нему аутентификацию Firebase, создав собственный токен с помощью облачной функции Google.
Я создал еще один проект Firebase в качестве среды разработки, внедрил и протестировал аутентификацию Firebase через облачную функцию NodeJS, все отлично, и теперь я развернул облачную функцию в рабочей среде.
Я не использую ключи API Google API в NodeJS, поскольку все облачные функции автоматически аутентифицируются в GCP. Во Flutter я заменил среду разработки google-services.json на правильную в продакшене. У меня нет GoogleService-Info, тестирую на Android.
В main.dart я инициализирую свое приложение следующим образом
if (Firebase.apps.isEmpty) {
try {
await Firebase.initializeApp(
name: "foo",
options: DefaultFirebaseOptions.currentPlatform,
);
} catch (e) {
print("could not initialize firebase ${e}");
}
}
options: DefaultFirebaseOptions.currentPlatform, это файл, сгенерированный FlutterFire CLI, он содержит учетные данные производственного приложения, это единственный файл, который я забыл изменить, когда проводил тестирование среды разработки, я забыл создать новые приложения для разработки и изменить значения в firebase_options.dart
Теперь происходит то, что облачная функция правильно генерирует токен, но всякий раз, когда я пытаюсь войти с помощью этого токена во Flutter
await FirebaseAuth.instance.signInWithCustomToken(firebase_token);
я получаю эту ошибку
flutter (14645): Authentication error [firebase_auth/custom-token-
mismatch] The custom token corresponds to a different audience.
Как исправить эту ошибку? Я не могу просто создавать новые приложения Firebase, если это основная причина ошибки, по двум причинам.
Я не могу удалить существующее, потому что существующие пользователи не смогут использовать приложение
Я не могу создавать новые приложения, потому что требуется имя пакета Android, которое используется существующими приложениями.
Поэтому я хочу решение, которое не требует беспокойства существующих пользователей, если это возможно.





Проблема решена запуском Flutter clean и Flutter pub get.
Оказывается, Flutter кэширует учетную запись службы Google между сборками. Удаление приложения и очистка кеша приложения не помогает, это Flutter кэширует файл на ПК.
Я отвечаю на свой вопрос, а не удаляю этот пост, потому что этот ответ может помочь будущим пользователям. В других ответах на эту тему говорится о создании нового приложения, создании нового ключа или чего-то еще.
Если вы столкнулись с этой ошибкой, и у вас ничего не работает, то просто очистите кеш на вашем ПК.