簡體   English   中英

Flutter firebase_auth signInWithCredential 不適用於 android

[英]Flutter firebase_auth signInWithCredential is not working on android

問候顫振開發人員正在為 iOS 和 android 開發一個應用程序,它使用電話身份驗證來驗證用戶在 iOS 中一切正常,但是對於 android,當調用此行時,我收到一個錯誤:

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

錯誤 :

E/flutter (14190): [ERROR:flutter/shell/common/shell.cc(184)] Dart Error: Unhandled exception: E/flutter (14190): PlatformException(error, null reference, null) E/flutter (14190) ): #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:551:7) E/flutter (14190): #1 MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:292 :18) E/flutter (14190): E/flutter (14190): #2 FirebaseAuth.signInWithCredential (file:///Users/pocketcarage/Desktop/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_auth -0.8.0+1/lib/src/firebase_auth.dart:211:54) E/flutter (14190): E/flutter (14190): #3 _RegisterState.signIn (package:pocketcarage_official/UI/register.dart:92 :43) E/flutter (14190): E/flutter (14190): #4 _RegisterState.smsCodeDialog.. (package:pocketcarage_official/UI/register.dart:77:23) E/flutter (14190): #5 _InkResponseState。 _handleTap (package:flutter/src/material/ink_well.dart:507:14) E/flutter (14190): #6 _InkResponseState.build。 (package:flutter/src/material/ink_well.dart:562:30) E/flutter (14190): #7 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24) E/flutter ( 14190): #8 TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:242:9) E/flutter (14190): #9 TapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart: 175:7) E/flutter (14190): #10 PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:315:9) E/flutter (14190): #11 PointerRouter._dispatch (package:flutter/ src/gestures/pointer_router.dart:73:12) E/flutter (14190): #12 PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:101:11) E/flutter (14190): #13 _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:180:19) E/flutter (14190): #14 _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:180:19) /flutter (14190): #15 _WidgetsF lutterBinding&BindingBase&GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:138:7) E/flutter (14190): #16 _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:138:7) /flutter (14190): #17 _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:85:7) E/flutter (14190): #18 _invoke1 (dart:ui/hooks.dart:13:7) ) E/flutter (14190): #19 _dispatchPointerDataPacket (dart:ui/hooks.dart:122:5)

其中指出 PlatformException(error, null reference, null) 盡管它在 iPhone 上 100% 工作,但存在空引用。 我進行了搜索,發現 flutter 插件存在一些問題,解決方案將遷移到 androidx,我嘗試過,但我一直要求 compilesdk 至少為 28 並且我已經更改了它,我該怎么辦?

這是被調用的代碼

Future<String> signIn(String smsCode) async {

final AuthCredential credential = PhoneAuthProvider.getCredential(
  verificationId: verificationId,
  smsCode: smsCode,
);

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


final FirebaseUser currentUser = await _auth.currentUser();
DatabaseReference user_db = pDatabase.reference().child("users");
DatabaseReference phone_id = pDatabase.reference().child("phone_id");

String uid = user.uid;
usersModel new_user = new usersModel();
new_user.phone=_phoneController.text;
new_user.email=_emailController.text;
new_user.name=_nameController.text;
user_db.child(uid).child("name").set(new_user.userName);
user_db.child(uid).child("phone").set(new_user.userPhone);
user_db.child(uid).child("email").set(new_user.userEmail);
phone_id.child(new_user.userPhone).set(uid);
assert(user.uid == currentUser.uid);
Navigator.pop(context);
Navigator.of(context).pushNamed('/Home');
return 'signInWithPhoneNumber succeeded: $user';
}

更新:對我的項目進行以下更改后,登錄方法似乎有效:

在 pubspec.yaml 中:將 sdk 版本從 ">=2.0.0-dev.68.0 <3.0.0" 更新為 ">=2.1.0 <3.0.0"

在 android/build.gradle: 更新了 com.android.tools.build:gradle:3.3.1 的依賴以使用版本 3.2.1 更新了 com.google.gms:google-services:4.0.1 的依賴以使用版本4.2.0

此外,由於在這些更改后最終出現了多索引的 gradle 問題,我更新了 android/app/build.gradle 文件,使其在 defaultConfig 下具有“multiDexEnabled true”屬性,並添加了“implementation 'com.android.support:multidex: 1.0.3'" 到 buildTypes


操作:

其他人已經注意到了同樣的問題,並在 firebase_auth Dart 包的存儲庫上提交了一個問題: https : //github.com/flutter/flutter/issues/28057

我遇到過同樣的問題。 這對我有用。

(await _auth.signInWithCredential(credential)).user;

我有同樣的問題,在搜索了一整天后我解決了問題,問題出在 depandcy 請添加以下 depandancy

google_sign_in: ^4.0.1+1 firebase_auth: ^0.8.1+1

try {
      final AuthCredential credential = PhoneAuthProvider.getCredential(
        verificationId: verificationId,
        smsCode: smsOTP,
      );
      final FirebaseUser user =
          (await _auth.signInWithCredential(credential)).user;
} catch (e) {
      print("Error: $e");
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM