Flutter Firebase iOS Google Sign In error

房东的猫 提交于 2020-01-06 05:47:09

问题


Issue

I've created an app on Android that I want to test on iOS but I can't seem to get the firebase google sign in working. When I click on the sign in button, the app skips sign in entirely and doesn't even ask me for my google login.

Errors

When I run the app, I get the following errors:

Exception: MissingPluginException(No implementation found for method Query#addSnapshotListener on channel plugins.flutter.io/cloud_firestore)
flutter: MissingPluginException(No implementation found for method init on channel plugins.flutter.io/google_sign_in)

Tried so far

  • flutter upgrade
  • flutter clean
  • flutter pub get
  • Ran the iOS Integration steps from this page https://pub.dev/packages/google_sign_in#-readme-tab- Flutter doctor
  • Downgraded / upgraded cocoapods

Code

import 'package:firebase_auth/firebase_auth.dart';
import 'package:google_sign_in/google_sign_in.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:rxdart/rxdart.dart';

class AuthService {
  // Firebase Variables
  final GoogleSignIn _googleSignIn = GoogleSignIn();
  final FirebaseAuth _auth = FirebaseAuth.instance;
  final Firestore _db = Firestore.instance;

  // RXDart Variables
  Observable<FirebaseUser> user; // firebase user
  Observable<Map<String, dynamic>> profile; // custom user data in Firestore
  PublishSubject loading = PublishSubject();

  AuthService() {
    user = Observable(_auth.onAuthStateChanged);
    profile = user.switchMap((FirebaseUser u) {
      if (u != null) {
        print(_db
            .collection('users')
            .document(u.uid)
            .snapshots()
            .map((snap) => snap.data));
        return null;
      } else {
        return Observable.just({});
      }
    });
  }

  Future<FirebaseUser> googleSignIn() async {
    try {
      loading.add(true);
      GoogleSignInAccount googleSignInAccount = await _googleSignIn.signIn();
      GoogleSignInAuthentication googleAuth =
          await googleSignInAccount.authentication;

      final AuthCredential credential = GoogleAuthProvider.getCredential(
        accessToken: googleAuth.accessToken,
        idToken: googleAuth.idToken,
      );

      final FirebaseUser user =
          (await _auth.signInWithCredential(credential)).user;
      updateUserData(user);

      loading.add(false);
      return null; //user;
    } catch (error) {
   print(error.toString());
      return null;
    }
  }

  void updateUserData(FirebaseUser user) async {
    DocumentReference ref = _db.collection('users').document(user.email);
    CollectionReference refPasswordCollection =
        _db.collection('users').document(user.email).collection('Passwords');
    CollectionReference refCategoriesCollection =
        _db.collection('users').document(user.email).collection('Categories');

    refPasswordCollection.buildArguments();
    refCategoriesCollection.buildArguments();

    userDocSTRING = ref.documentID.toString();
    userPassSTRING = refPasswordCollection.reference().id.toString();
    userCatSTRING = refCategoriesCollection.reference().id.toString();

  Firestore.instance
        .collection('users')
        .document(userDocSTRING.toString())
        .collection(userCatSTRING.toString())
        .document('All')
        .setData({'Name': "All"});
    ref.setData({
      'uid': user.uid,
      'email': user.email,
      'photoURL': user.photoUrl,
      'displayName': user.displayName,
    }, merge: true);
  }

  Future<String> signOut() async {
    try {
      //BuildContext context;
      _auth.signOut(); //.whenComplete(() => Navigator.pop(context, LoginPage));
      return _auth.currentUser().toString();
    } catch (e) {
      return e.toString();
    }
  }
}

var userPassSTRING;
var userDocSTRING;
var userCatSTRING;

final AuthService authService = AuthService();

来源:https://stackoverflow.com/questions/58013572/flutter-firebase-ios-google-sign-in-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!