J'ai configuré Firebase pour qu'il s'exécute localement pour le débogage à l'aide de l'émulateur en suivant ce lien.
Maintenant, je veux pouvoir exécuter mon application connectée à l'hôte local pour les déclencheurs de débogage également. Existe-t-il un moyen d'y parvenir en configurant mon application Flutter pour utiliser l'hôte local?
Mon émulateur fonctionne comme suit:
6 Réponses :
Après avoir parcouru attentivement la documentation ici , je l'ai fait fonctionner en configurant le paramètre d'hôte sur l'instance de Firestore:
import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/material.dart'; import 'package:tracker/screens/screens.dart'; void main() async { // This will set the app to communicate with localhost await Firestore.instance.settings(host: "10.0.2.2:8080", sslEnabled: false); runApp(AppSetupScreen()); }
Remarque : cela ne fonctionnera qu'avec l'émulateur et non avec un périphérique physique.
ça marche dans le simulateur iOS? J'ai essayé de l'utiliser et les demandes vont toujours à l'émulateur Firebase et non à Firebase: /
Je ne l'ai pas essayé dans le simulateur iOS désolé: /, mais cela devrait fonctionner en donnant "localhost: 8080" comme hôte comme spécifié dans la documentation.
@kashlo Oui, cela fonctionne pour iOS / Android si vous suivez ce stackoverflow.com/a/62586957/6133329
On dirait que j'ai connecté ios à localhost: 8080, mais db fonctionne très lentement et je n'ai pas non plus remarqué de journaux dans un fichier. @UsmanZaheer, pouvez-vous s'il vous plaît dire quand a-t-il écrit des journaux et fonctionnait-il rapidement?
Pas:
Firebase init
ajouter des liens qui ont été créés par ini vers package.json dans les fonctions;
"firestore": {"rules": "firestore.rules", "indexes": "firestore.indexes.json"},
émulateurs Firebase: démarrer
dans main () écrire
await Firestore.instance.settings( host: 'http://localhost:8080', sslEnabled: false, persistenceEnabled: false, timestampsInSnapshotsEnabled: true ).catchError((e) => print(e));
L'émulateur est juste à des fins de débogage, je l'ai utilisé pour déboguer mes fonctions cloud. Lorsque vous créez un utilisateur d'authentification, il est enregistré dans Firestore car il n'y a pas d'émulateur d'authentification actuellement, comme pour les autres données, je ne peux pas vraiment dire où il stocke les données (peut-être en mémoire). L'émulateur montre simplement dans la console que la fonction a été touchée et que le succès ou les erreurs ont été détectés.
ÉTAPE 1 [configuration de Firestore en scintillement dans main.dart]
import 'package:firebase_functions_interop/firebase_functions_interop.dart'; import 'package:node_interop/node.dart'; import 'package:node_interop/util.dart'; void devPrepopulateCollections(ExpressHttpRequest request) { var env = new Map<String, String>.from(dartify(process.env)); // <-- important part if (env.containsKey('FUNCTIONS_EMULATOR') && env.containsKey('FIRESTORE_EMULATOR_HOST')) { // TODO: prepopulate firestore emulator from 'yourproject/src/sample_data.json request.response ..write("Prepopulated firestore with sample_data.json!") ..close(); } else { request.response ..write("Do not populate production firestore with sample_data.json") ..close(); } }
ÉTAPE 1 [setup Firestore in Flutter in main.dart] pour la nouvelle version de Firebase
export const prepopulateFirestoreEmulator = functions.https.onRequest( (request, response) => { if (process.env.FUNCTIONS_EMULATOR && process.env.FIRESTORE_EMULATOR_HOST) { // TODO: prepopulate firestore emulator from 'yourproject/src/sample_data.json response.send('Prepopulated firestore with sample_data.json!'); } else { response.send( "Do not populate production firestore with sample_data.json" ); } } );
ÉTAPE 2 [projet init Firebase]
firebase emulators:start --import ../initialData firebase emulators:start --import ../otherStateData
ÉTAPE 3 [config firestore émulator eg firebase.json]
firebase emulators:start flutter run
ÉTAPE 4 [exécuter des émulateurs et une application de flutter]
"emulators": { "ui": { "enabled": true, "host": "localhost", "port": 4000 }, "functions": { "port": 5001 }, "firestore": { "host": "0.0.0.0", <------ Make sure to set it "0.0.0.0" "port": 5002 }, }
A travaillé à la fois sur le simulateur iOS et les émulateurs Android
PS: essayez de redémarrer l'émulateur Firestore ou / et l'application Flutter
lorsque vous arrêtez l'émulateur de Firestore, toutes les données de Firestore disparaissent. Alors peut-être qu'avant d'arrêter l'émulateur, si vous voulez continuer à partir de là où vous en étiez, vous pouvez exporter les données de l'émulateur Firestore comme ça
firebase emulators:export ../data
(../data peut être n'importe quel chemin que vous voulez 😎)
pour charger les données exportées
firebase emulators:start --import ../data
vous pouvez enregistrer différents états de votre émulateur Firestore pour différents cas, exemple
firebase init
Si vous souhaitez utiliser Dart pour les fonctions Firebase, vous pouvez suivre ce https://github.com/pulyaevskiy/firebase-functions-interop
une bonne chose que j'ai trouvée pour moi-même pour détecter si votre fonction s'exécute dans l' émulateur ou en production, vous pouvez en savoir plus ici
functions/index.js
Future<void> main() async { WidgetsFlutterBinding.ensureInitialized(); <--- Important! String host = Platform.isAndroid ? '10.0.2.2:5002' : 'localhost:5002'; await FirebaseFirestore.instance.settings = Settings( host: host, sslEnabled: false, ); }
fonctions / index.dart
Future<void> main() async { WidgetsFlutterBinding.ensureInitialized(); <--- Important! await Firestore.instance.settings( host: '192.168.1.38:5002', <--- Make sure to put your local ip sslEnabled: false); it will not work if you use 'localhost:5002' Google it "how to find my local ip" }
Merci pour ces instructions! Cela a même fonctionné avec mon appareil Android connecté.
Vous êtes les bienvenus, heureux d'entendre que cela a été utile;)
maintenant flutter a des instructions officielles sur la configuration de l'émulateur Firebase pour Flutter firebase.flutter.dev/docs/firestore/usage#emulator-usage
Pourriez-vous mettre à jour cela pour savoir comment vous connecter à l'émulateur de base de données en temps réel? Je ne peux pas comprendre l'incantation magique nécessaire ...
les instructions officielles fonctionnent pour l'utilisation des simulateurs Android ou iOS. Mais pour les tests sur des périphériques physiques, nécessite l'hôte Firestore "0.0.0.0" + combinaison d'adresses IP locales
@SultanmyrzaKasymbekov merci pour la réponse! Connaissez-vous la même solution pour utiliser Firebase Emulator avec FirebaseAuth et Flutter?
Les instructions @BorisSalimov ci-dessus devraient fonctionner pour vous. Sinon, pouvez-vous me dire ce qui s'est passé de votre côté?
Votre main.dart
devrait ressembler à ceci:
firebase emulators:start
dans votre fichier firebase.json
export FIRESTORE_EMULATOR_HOST=localhost:8080
vous devez également définir les paramètres suivants dans votre terminal:
"emulators": { "firestore": { "host": "localhost", "port": 8080 }, ... }
puis exécutez
void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firestore.instance .settings( host: 'http://localhost:8080', sslEnabled: false, persistenceEnabled: false, ) .catchError((e) => print(e)); // // ... // runApp(App(...)); }
en plus de la bonne réponse de @Sultanmyrza
Platform
nécessite dart:io/dart:html
qui s'excluent mutuellement afin de vérifier la plate-forme que j'utilise kIsWeb
FirebaseFirestore __firestore; FirebaseFirestore get _firestore { if (__firestore != null) { return __firestore; } debugPrint('isFirebaseEmulator: $isFirebaseEmulator'); __firestore = FirebaseFirestore.instance; if (isFirebaseEmulator) { __firestore.settings = const Settings( host: kIsWeb ? 'localhost:8080' : '10.0.2.2:8080', sslEnabled: false, ); } return __firestore; }
Dernière mise à jour : pour connecter l'application Flutter à votre suite d'émulateur Firebase locale, suivezces instructions officielles pour la configuration.
Veuillez ne pas afficher d'images de texte. Il est préférable de copier le texte directement dans la question pour faciliter la lecture et la recherche.
Si vous ne devez configurer que partiellement votre application. Par exemple, uniquement Firestore ou fonctionne uniquement. Vous pouvez utiliser le code ici: tianhaoz.com/eng/server/firebase / ...