स्पंदन फ़ायरबेस प्रामाणिक त्रुटि।
प्रस्तावना
यह अब तक एक अच्छे के लिए संघर्ष रहा है और कुछ भी काम नहीं कर रहा है, मैंने यहां और यहां इसी तरह के सवालों के जवाब देखे हैं, लेकिन पूर्व में अव्यवस्था नहीं थी और बाद के बदलावों से पहले पोस्ट किया गया था firebase_auth
और मुझे सबसे महत्वपूर्ण लगता है प्रस्तावित समाधान काम नहीं किया है।
समस्या
समस्या स्पंदन के भीतर फायरबेस प्रमाणीकरण के एक बहुत ही सरल प्रारंभिक सेटअप की चिंता है। मैं वास्तव में मेरी firebase परियोजना की स्थापना के रूप में यह पता चलता है है यहाँ और इस्तेमाल किया इस और इस स्थापित करने के लिए firebase_auth
।
समस्या उत्पन्न करने वाला कोड निम्नानुसार है:
void _registerTestUser() async {
try {
UserCredential userCredential = await FirebaseAuth.instance
.createUserWithEmailAndPassword(
email: "[email protected]",
password: "SuperSecretPassword!");
print(userCredential.user.email);
} on FirebaseAuthException catch (e) {
if (e.code == 'weak-password') {
print('The password provided is too weak.');
} else if (e.code == 'email-already-in-use') {
print('The account already exists for that email.');
}
} catch (e) {
print(e);
}
}
जब कोड त्रुटि चलाया जाता है
I / BiChannelGoogleApi (19546): [FirebaseAuth:] getGoogleApiForMethod () Gms: com.google.firebase.auth.api.internal.zz.@fb1556c
लौटा दिया जाता है।
यह उत्तर बताता है कि त्रुटि अच्छी तरह से अप्रासंगिक हो सकती है, अर्थात कोड वैसे भी काम कर सकता है। मैंने लाइन पर एक ब्रेकपॉइंट लगाया UserCredential userCredential = await FirebaseAuth.instance
और आगे बढ़ा, यह जारी है .createUserWithEmailAndPassword(
, फिर एक बार फिर से आगे बढ़ने पर पहली लाइन पर वापस जाता है और त्रुटि प्रदर्शित होती है। पूरी तरह से फंक्शन से बाहर निकलने से पूरी तरह से टूट जाता है, इसलिए print(userCredential.user.email);
लाइन को कभी भी निष्पादित नहीं किया जाता है, जो यह सुझाव देगा कि कोड काम नहीं कर रहा है। इसके अतिरिक्त print(e);
लाइन में catch
वह नहीं है जो इस त्रुटि को आउटपुट कर रहा है।
अन्य सूचना
Pubspec.yaml
dependencies:
flutter:
sdk: flutter
firebase_core: ^0.5.3 #firebase core flutter sdk
firebase_auth: ^0.18.4+1 #firebase authorisation
android / build.gradle
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.3.4' // Google Services plugin
}
android / app / build.gradle
apply plugin: 'com.google.gms.google-services' // Google Services plugin
main.dart
import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_auth/firebase_auth.dart';
FirebaseAuth auth = FirebaseAuth.instance;
void main() {
WidgetsFlutterBinding.ensureInitialized();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
final Future<FirebaseApp> _initialization = Firebase.initializeApp();
@override
Widget build(BuildContext context) {
return MaterialApp(
home: FutureBuilder(
// Initialize FlutterFire:
future: _initialization,
builder: (context, snapshot) {
// Check for errors
if (snapshot.hasError) {
return Error();
}
// Once complete, show your application
if (snapshot.connectionState == ConnectionState.done) {
return MyHomePage();
}
// Otherwise, show something whilst waiting for initialization to complete
return Loading();
},
),
);
}
}
class Loading extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Text('Firebase is loading'),
),
);
}
}
class Error extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Text('There has been an error'),
),
);
}
}
class MyHomePage extends StatelessWidget {
void _registerTestUser() async {
try {
UserCredential userCredential = await FirebaseAuth.instance
.createUserWithEmailAndPassword(
email: "[email protected]",
password: "SuperSecretPassword!");
print(userCredential.user.email);
} on FirebaseAuthException catch (e) {
if (e.code == 'weak-password') {
print('The password provided is too weak.');
} else if (e.code == 'email-already-in-use') {
print('The account already exists for that email.');
}
} catch (e) {
print(e);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('FlutterFire Test')),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
RaisedButton(
child: Text('Register a test user'),
onPressed: () => _registerTestUser(),
color: Colors.blue,
),
],
),
),
);
}
}
साथ ही यह त्रुटि कुछ समय के लिए प्रकट हुई है, हालाँकि यह उत्तर प्रतीत होता है कि इसका मेरे मुद्दे से कोई लेना-देना नहीं है और यह किसी समस्या का संकेत नहीं है।
W / ConnectionTracker (19240): java.lang.IllegalArgumentException: सेवा पंजीकृत नहीं है: lp @ fb1556c W / ConnectionTracker (19240): android.app.oadedApk.forgetServiceDispatcher (LoadedApk.java:1729) पर संपर्क करें। android.app.ContextImpl.unbindService (ContextImpl.java:1874) W / ConnectionTracker (19240): android.content.ContextWrapper.unbindService (ContextWrapper.java:792) W / ConnectionTracker (1940) में। । (150700-0): 2) डब्ल्यू / कनेक्शनटैकर (19240): lq.D पर (: com.google.android.gms.dynamite_measurementdynamite @ 204217100 @ 20.42.17 (150700-0): 10) W / ConnectionTracker (19240) : lc.a पर (: com.google.android.gms.dynamite_measurementdynamite @ 204217100 @ 20.42.17 (150700-0): 2) W / ConnectionTracker (19240): ee.run (: com.google.android.gms पर) .dynamite_measurementdynamite @ 204217100 @ 20.42.17 (150700-0): 3) डब्ल्यू / कनेक्शनटैकर (19240): java.util.concurrent.Executors पर $ RunnableAdapter.call (Executors.java:462) W / ConnectionTracker (19240): java.util.concurrent.FutureTask.run (FutureTask.java) पर। 266) डब्ल्यू / कनेक्शनटैकर (19240): ix.run पर (: com.google.android.gms.dynamite_measurementdynamite @ 204217100 @ 20.42.17 (150-0-0): 6)
संपादित करें
लाइन बदलने onPressed: () => _registerTestUser(),
में main.dart
करने के लिए onPressed: () {_registerTestUser();}
एक ही परिणाम देता है, लेकिन त्रुटि में परिवर्तन थोड़ा, zzao @ fb1556c हो जाता है zzao @ ebc85e9।
जवाब
जबकि सीधे आपके सवाल का जवाब नहीं दिया जा रहा है और जाहिरा तौर पर FlutterFire नमूना कोड के साथ (हालांकि बहुत अलग नहीं है)। यहाँ वह कोड है जिसका उपयोग मैं एक उपयोगकर्ता (Firebase_auth प्रकार उपयोगकर्ता) बनाने के लिए करता हूँ और मुझे आपकी त्रुटि नहीं दिखती है:
User _user = (await _firebaseAuth.createUserWithEmailAndPassword(
email: email,
password: password,
)).user;
मैं तब इस तरह के तरीकों का उपयोग कर सकता हूं await _user.sendEmailVerification();
और इसके गुणों का उपयोग कर सकता हूं जैसे कि _user.email
बिना मुद्दे के।
हो सकता है कि क्रेडेंशियल के बजाय कोशिश करें।
पुनश्च यह मुद्दा: W/ConnectionTracker(19240): java.lang.IllegalArgumentException: Service not registered:
आप देखें कि यहां ट्रैक किया जा रहा है और मुझे विश्वास नहीं है कि यह आपके कोड से संबंधित है:https://github.com/firebase/firebase-android-sdk/issues/1662#issue-638324848
इसमें अपवाद कोड के कई रूप हैं लेकिन वे सभी संबंधित हैं।
अपडेट मैं यह भी मानता हूं कि @amit kumar लगभग सही है, आपFirebaseAuth auth = FirebaseAuth.instance;
पहलेचल रहे हैंFirebase.initializeApp();
। आपको मेरा विश्वास है कि FirebaseAuth को त्वरित करने से पहले आपको अपना भविष्य पूरा करना होगा। शायद मेरा परिवर्तित कोड अप्रासंगिक से ऊपर है।
पहले के रूप में मैं देख सकता हूँ आप आरंभ नहीं किया है firebase
में main.dart
फ़ाइल सही।
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
आप एक बार फिर से कोशिश करने से चूक गए और अगर फिर भी आपको समस्या हुई तो मुझे बताएं
इसे आजमाइए:
void _registerTestUser() async {
try {
await FirebaseAuth.instance
.createUserWithEmailAndPassword(
email: "[email protected]",
password: "SuperSecretPassword!")
.then((userCredential) => print(userCredential.user.email));
} on FirebaseAuthException catch (e) {
if (e.code == 'weak-password') {
print('The password provided is too weak.');
} else if (e.code == 'email-already-in-use') {
print('The account already exists for that email.');
}
} catch (e) {
print(e);
}
}
इसके अलावा UserCredential के बजाय उपयोगकर्ता का उपयोग करने पर विचार करें:
void _registerTestUser() async {
try {
final User user = (await FirebaseAuth.instance
.createUserWithEmailAndPassword(
email: "[email protected]",
password: "SuperSecretPassword!"))
.user;
print(user.email);
} on FirebaseAuthException catch (e) {
if (e.code == 'weak-password') {
print('The password provided is too weak.');
} else if (e.code == 'email-already-in-use') {
print('The account already exists for that email.');
}
} catch (e) {
print(e);
}
}
final FirebaseAuth _auth = FirebaseAuth.instance;
registerUser()async{
_auth.createUserWithEmailAndPassword(
email:"[email protected]",
password: "SuperSecretPassword!",
).then((result){
User user = result.user;
}).catchError((e) {
print(e);
});
}