Я хочу использовать Play Integrity во Flutter, поэтому использую Firebase App Check. Но произошли ошибки. Я запустил его, чтобы получить токен отладки для использования в Firebase. При удалении getToken() ошибки нет. Я удаляю. Вот моя ошибка.
E/flutter (15118): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: [firebase_app_check/unknown] com.google.firebase.FirebaseException: Error returned from API. code: 403 body: App attestation failed.
E/flutter (15118): #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:652:7)
E/flutter (15118): #1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:310:18)
E/flutter (15118): <asynchronous suspension>
E/flutter (15118): #2 MethodChannelFirebaseAppCheck.getToken (package:firebase_app_check_platform_interface/src/method_channel/method_channel_firebase_app_check.dart:100:22)
E/flutter (15118): <asynchronous suspension>
E/flutter (15118): #3 main (package:app/main.dart:18:9)
E/flutter (15118): <asynchronous suspension>
И это мой код.
import 'package:firebase_app_check/firebase_app_check.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:app/screens/splash_screen.dart';
import 'package:firebase_core/firebase_core.dart';
import 'firebase/firebase_options.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
await FirebaseAppCheck.instance.activate(
androidProvider: AndroidProvider.debug,
);
print(await FirebaseAppCheck.instance.getToken());
runApp(
const App(),
);
}
class App extends StatelessWidget {
const App({super.key});
@override
Widget build(BuildContext context) {
return const MaterialApp(
debugShowCheckedModeBanner: false,
title: "App",
localizationsDelegates: AppLocalizations.localizationsDelegates,
supportedLocales: AppLocalizations.supportedLocales,
home: SplashScreen(),
);
}
}
Как я могу исправить эту ошибку?
Не обязательно звонить getToken()
после звонка activate()
. См. пример по адресу https://firebase.google.com/docs/app-check/flutter/debug-provider#android. Вызов activate()
должен привести к выводу на консоль, аналогичному тому, что показано в примере с распечаткой токена отладки. Клиентские библиотеки Firebase автоматически включают этот токен в запросы к соответствующим службам, поэтому, как правило, нет необходимости напрямую обращаться к токену.