android - Flutter firebase_auth signInWithCredential 不适用于 android

标签 android firebase flutter firebase-authentication

问候 flutter 开发人员正在为 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:158:22) E/flutter (14190): #15 _WidgetsFlutterBinding&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:101:7) E/flutter (14190): #17 _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:85:7) E/flutter (14190): #18 _invoke1 (dart:ui/hooks.dart:168:13) E/flutter (14190): #19 _dispatchPointerDataPacket (dart:ui/hooks.dart:122:5)

其中指出 PlatformException(error, null reference, null) 存在空引用,尽管它在 iPhone 上 100% 有效。我搜索了一下,发现 flutter 插件存在一些问题,一个解决方案是迁移到 androidx,我尝试过,但我一直在获取至少 28 个必需的 compilesdk,我已经更改了它,我该怎么办?

这是被调用的代码

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

此外,由于在这些更改后最终出现了 multidexing 的 gradle 问题,我更新了 android/app/build.gradle 文件以在 defaultConfig 下具有“multiDexEnabled true”属性并添加了“implementation 'com.android.support :multidex:1.0.3'"到 buildTypes


运算符(operator):

其他人也注意到了同样的问题,并在 firebase_auth Dart 包的存储库中提交了一个问题:https://github.com/flutter/flutter/issues/28057

关于android - Flutter firebase_auth signInWithCredential 不适用于 android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54553913/

相关文章:

android - Firebase 在 Android 的适配器中添加监听器

firebase - 如何在 Scoped Model 中从 Firestore 获取数据 - Flutter

firebase - StreamBuild:流,调用返回Firestore流的方法直到更新才检索数据

flutter - 如何在 flutter 中将 Future<List> 转换为 List?

java - 在 Android 上将 SpongycaSTLe 与 iText 结合使用时出现 NoSuchMethodError

android - 需要如何重新配置​​文件才能允许 LiveCode 与 Android 模拟器配合使用?

android - 在 xAxis MPChart 获取重复值

c# - 如何在同一页面上使用 Xamarin.Form 控件和 native 控件

javascript - 从 firebase 检索分割数据

javascript - Firebase实时数据库如何根据网络应用程序中的可用性过滤数据