firebase_app_check 0.3.1 firebase_app_check: ^0.3.1 copied to clipboard
App Check works alongside other Firebase services to help protect your backend resources from abuse, such as billing fraud or phishing.
// Copyright 2022, the Chromium project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:firebase_app_check/firebase_app_check.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'firebase_options.dart';
const kWebRecaptchaSiteKey = '6Lemcn0dAAAAABLkf6aiiHvpGD6x-zF3nOSDU2M8';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
// Activate app check after initialization, but before
// usage of any Firebase services.
await FirebaseAppCheck.instance
// Your personal reCaptcha public key goes here:
.activate(
androidProvider: AndroidProvider.debug,
appleProvider: AppleProvider.debug,
webProvider: ReCaptchaV3Provider(kWebRecaptchaSiteKey),
);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
final String title = 'Firebase App Check';
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Firebase App Check',
home: FirebaseAppCheckExample(title: title),
);
}
}
class FirebaseAppCheckExample extends StatefulWidget {
FirebaseAppCheckExample({
Key? key,
required this.title,
}) : super(key: key);
final String title;
@override
_FirebaseAppCheck createState() => _FirebaseAppCheck();
}
class _FirebaseAppCheck extends State<FirebaseAppCheckExample> {
final appCheck = FirebaseAppCheck.instance;
String _message = '';
String _eventToken = 'not yet';
@override
void initState() {
appCheck.onTokenChange.listen(setEventToken);
super.initState();
}
void setMessage(String message) {
setState(() {
_message = message;
});
}
void setEventToken(String? token) {
setState(() {
_eventToken = token ?? 'not yet';
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
children: [
ElevatedButton(
onPressed: () async {
// Use this button to check whether the request was validated on the Firebase console
// Gets first document in collection
final result = await FirebaseFirestore.instance
.collection('flutter-tests')
.limit(1)
.get();
if (result.docs.isNotEmpty) {
setMessage('Document found');
} else {
setMessage(
'Document not found, please add a document to the collection',
);
}
},
child: const Text('Test App Check validates requests'),
),
ElevatedButton(
onPressed: () async {
if (kIsWeb) {
print(
'Pass in your "webRecaptchaSiteKey" key found on you Firebase Console to activate if using on the web platform.',
);
}
await appCheck.activate(
webProvider: ReCaptchaV3Provider(kWebRecaptchaSiteKey),
);
setMessage('activated!!');
},
child: const Text('activate()'),
),
ElevatedButton(
onPressed: () async {
// Token will be passed to `onTokenChange()` event handler
await appCheck.getToken(true);
},
child: const Text('getToken()'),
),
ElevatedButton(
onPressed: () async {
await appCheck.setTokenAutoRefreshEnabled(true);
setMessage('successfully set auto token refresh!!');
},
child: const Text('setTokenAutoRefreshEnabled()'),
),
const SizedBox(height: 20),
Text(
_message, //#007bff
style: const TextStyle(
color: Color.fromRGBO(47, 79, 79, 1),
fontSize: 16,
),
),
const SizedBox(height: 20),
Text(
'Token received from tokenChanges() API: $_eventToken', //#007bff
style: const TextStyle(
color: Color.fromRGBO(128, 0, 128, 1),
fontSize: 16,
),
),
],
),
),
);
}
}