Flutter Firebase Google 登录无法正常工作。选择账户后停止

2024-02-10

我目前正在尝试在我的应用程序中实现谷歌登录和身份验证。我已经建立了一个项目并在 Firebase 中创建了一个应用程序,将 google-services.json 放入应用程序中,将必要的插件添加到 build.gradle,并在 firebase 中设置 SHA-1 密钥。电子邮件身份验证运行良好,但谷歌身份验证正在引起问题。

所有身份验证都是通过我创建的“身份验证”包完成的。它包含一个身份验证页面并执行所有身份验证逻辑。运行的“主”flutter 应用程序会导入此包以供使用。这个“主”项目的 build.gradle 文件包含 google 服务插件的附加内容(com.google.gms:google-services:4.3.2)。一旦“主”项目运行,它会检查用户当前是否已登录。如果没有,它将控制权传递给“身份验证”包以显示身份验证屏幕并处理登录。

选择我要登录的谷歌帐户后出现问题。选择帐户后,帐户选择对话框将关闭,之后不会发生任何事情。用户未经身份验证(在 Firebase 中确认),不会引发任何异常,并且围绕所有内容的 try-catch 不会捕获任何异常。似乎该函数的所有执行都停止了。我仍然可以在应用程序中移动,但登录方法永远不会完成执行。

您可以在下面看到登录方法。该行执行后final GoogleSignInAccount googleSignInAccount = await googleSignIn.signIn();由于某种原因执行不会继续。

///
  Future<String> _signUpWithGoogle() async {
    bool isLoggedIn = await _firebaseAuth.isLoggedIn();
    if (!isLoggedIn) {
      googleSignIn = GoogleSignIn();
      final GoogleSignInAccount googleSignInAccount =
          await googleSignIn.signIn();
      final GoogleSignInAuthentication googleSignInAuthentication =
          await googleSignInAccount.authentication;

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

      final AuthResult authResult =
          await _firebaseAuth.signInWithCredential(credential);
      final FirebaseUser user = authResult.user;

      assert(!user.isAnonymous);
      assert(await user.getIdToken() != null);

      final FirebaseUser currentUser = await _firebaseAuth.getUser();
      assert(user.uid == currentUser.uid);

      return 'signInWithGoogle succeeded: $user';
    } else {
      FirebaseUser user = await _firebaseAuth.getUser();
      return 'signInWithGoogle succeeded: $user';
    }
  }

我认为如果出现问题,应该返回 PlatformException,但第一次不会返回任何异常。如果我再次触发谷歌登录方法,我会收到一个 PlatformException ,上面写着:

PlatformException(error, Concurrent operations detected: signIn, signIn, null)

您还可以在下面找到“主”应用程序和“身份验证”包的依赖项:

“主要”应用程序依赖项

dependencies:
  flutter:
    sdk: flutter
  cupertino_icons: ^0.1.2
  permission:
  intl_translation:
  flutter_svg:
  sqflite:
  path:
  path_provider:
  uuid:
  qr_flutter:
  vibration:
  reflectable:
  provider:
  launcher_module:
    path: ../modules/launcher_module
  individual:
    path: ../modules/individual
  common:
    path: ../packages/common
  persistence:
    path: ../packages/persistence
  resources:
    path: ../packages/resources
  authentication:
    path: ../packages/authentication
  screen:
  flutter_screen_scaler: ^0.0.1
  page_indicator:
  toast: ^0.1.5
  rxbus: ^0.0.2
  shared_preferences:

“身份验证”包依赖项

dependencies:
  flutter:
    sdk: flutter
  firebase_auth: ^0.15.3+1
  google_sign_in: ^4.1.1
  flutter_facebook_login:
  shared_preferences:
  common: 
    path: "../common"
  toast: ^0.1.5

我还尝试将所有身份验证逻辑移至主应用程序中,并删除对“身份验证”包的引用。然而,同样的事情仍然发生。

在这一切中我是否做错或遗漏了什么?


只是为了将我之前的评论变成官方答案:

初步评论:

上面的代码看起来并没有什么问题。我有几乎相同的代码,具有相同的版本google_sign_in plugin。我要做的就是调试插件的本机代码,以便找出它卡在哪里,然后理解为什么会发生这种情况。鉴于PlatformException你提到的,快速浏览了一下插件的代码后,它肯定卡在了onActivityResult选择要登录的帐户并将结果发送回 Flutter 时的回调。

作者回复后:

事实证明,作者定制了应用程序的启动 Activity,使得onActivityResult不再打电话super.onActivityResult,这阻止了google_sign_in插件将数据从本机端发送回 Flutter 端。

每当Intent这意味着启动后会返回数据,例如请求权限或使用其他应用程序拍照。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flutter Firebase Google 登录无法正常工作。选择账户后停止 的相关文章

  • 找不到模块:错误:包路径。未从包中导出

    import firebase from firebase const firebaseConfig apiKey AIzaSyBOK7x5N5UnjY4TDqndzH7l5tvdNIsWFRc authDomain todo app e3
  • Flutter 屏幕变化回调

    我想在屏幕更改时收到回调 这样我就可以停止在该特定屏幕上运行的重复请求 dispose 仅在使用 Navigator pop 时调用 而在调用 Navigator push 时不调用 有没有办法检测到屏幕已更改且当前未显示 在您的 Mate
  • 在 firebase 函数中设置 dotenv

    我正在尝试将我制作的小型节点表达应用程序移动到 firebase 函数中 该文件有dotenv变量 早些时候我想如果我只是部署并依赖 dotenv 它会起作用 但那并没有发生 于是 我去了firebase的环境配置文章了解如何设置 env
  • Flutter:设置AppBar的高度

    我怎样才能简单地设置高度AppBar在颤振中 栏的标题应保持垂直居中 即AppBar 您可以使用首选尺寸 https api flutter dev flutter widgets PreferredSize class html clas
  • RecyclerView 上的删除按钮删除了错误的项目

    我正在使用 Firestore 适配器RecyclerView我在使用 删除 按钮时遇到问题 当我按下它时 它会删除错误的项目 而不是我想要的项目 这是我的按钮内部的代码onBindViewHolder protected void onB
  • 反应/Firebase。如何在项目中保存更新的数据?

    当我尝试更改数据时 更改正在进入我的 Firestore 数据库 没关系 但是当我重新加载页面或注销并尝试再次登录时 用户数据不会出现在我的项目中 但也会出现存储在我的Firestore Database 即使重新加载页面后 如何保存并显示
  • Firebase 验证电子邮件模板编辑

    是否有或将会有任何方式来编辑验证电子邮件模板或使用不同的语言 而不仅仅是英语 对于非英语用户来说 用户体验很糟糕 请您分享一下此功能的路线图 谢谢 托马斯 在发送 firebase 电子邮件之前 您可以设置模板的语言 您可以在firebas
  • Flutter VideoPlayer 无法播放 YouTube 视频

    我正在开发 flutter 应用程序并使用 ext video player 播放 YouTube 视频 当我在视频播放器上播放频道视频时 它不起作用 但我添加了 YouTube 上的任何视频 播放器正在工作 为什么会发生这样的事 impo
  • Flutter sqflite 插入列表

    我正在尝试将列表插入到 flutter 中的 sql 数据库中 但我不知道该怎么做 有人可以帮助我吗 当我初始化 mi 数据库时 我有这个 Directory documentsDirectory await getApplicationD
  • cmd:找不到服务:活动#Error:ADB 在 flutter 中退出,退出代码为 1

    更新 android studio 后 我运行我的 flutter 程序 错误表明 Launching lib main dart on AOSP on IA Emulator in debug mode Running Gradle ta
  • 无法使用 Firebase 广告:没有静态方法 zzc(Landroid/os/Bundle;

    我正在尝试将 Firebase 广告库添加到我的项目 该项目已经上线 中 构建工作正常 但当我尝试运行时 它崩溃并出现以下错误 11 16 10 33 13 535 540 540 com dap E AndroidRuntime 致命异常
  • Flutter:“UIAlertView”已弃用:首先在 iOS 9.0 中弃用

    我收到以下错误 Users flo pub cache hosted pub dartlang org image picker 0 6 7 12 ios Classes FLTImagePickerPlugin m 1 49 20 war
  • 如何在 Firebase 规则中限制用户根据电话号码读取/写入数据

    目前 我已经实现了类似于下面的项目文件夹结构 项目文件夹结构 https i stack imgur com gXkbO png 我已在代码中添加了电话身份验证 现在 在 Firebase 规则的帮助下 我想根据经过身份验证的电话号码限制我
  • 为 Firebase 项目中的成员分配角色

    我通过控制台在我的 Firebase 项目中添加具有 项目编辑器 角色的成员 该角色具有文档中的所有查看权限 但通过以会员身份登录 我无法看到分析 我尝试将角色更改为 项目所有者 但分析仍然不可见 我是第一次使用 Firebase 并且对角
  • Android minSdkVersion 与 Flutter(v2.8.1)

    我已经安装了 firebase 包 据我们所知minSdkVersion 19被推荐 所以 我想做这个过程 但是 我看到这一行包含在android app build gradle file minSdkVersion flutter mi
  • 将元素大小调整为屏幕宽度/高度的百分比

    是否有一种简单的 非 LayoutBuilder 方法来调整元素相对于屏幕尺寸 宽度 高度 的大小 例如 如何将 CardView 的宽度设置为屏幕宽度的 65 不能在里面完成build方法 显然 因此必须推迟到构建后 是否有一个首选的地方
  • Flutter 的 %1 安装错误不是有效的 win32 应用程序

    我是颤振的新手 并尝试通过以下步骤安装它 1 下载并解压到驱动器中 2 在环境变量中设置路径 现在我正在尝试运行 flutter doctor 它向我显示以下错误 请检查是否有人遇到同样的问题 谢谢 Flutter Channel beta
  • 如何在不影响背景内容的情况下弯曲底部导航栏角?扑

    我创建了一个带有颤动的自定义底部导航栏 但我仍然可以看到白色填充了弧角后面的背景 我想看看背景内容 这就是底部导航栏的样子 正如你所看到的 角落里充满了白色 这是我的底部导航栏代码 bottomNavigationBar Container
  • 使用 OneSignal/Firebase 从 iOS 设备发送推送通知

    我正在开发一个应用程序 并试图找出当不同用户执行特定操作时如何通知特定用户 我试图避免设置自己的后端服务器 因为我相信我想做的事情可以通过 OneSignal Firebase 来完成 我还没有尝试过 但我认为每个用户都可以获得自己的 On
  • flutter:如果禁用应用程序委托调配,则 UIApplicationDelegate 收到的远程通知需要转发到 FIRAuth

    当我想在 firebase 中使用短信验证时 该应用程序仅在 iOS 上失败 APN 证书已在 firebase 上配置并且FirebaseAppDelegateProxyEnabled是 NOInfo plist 在 verifyPhon

随机推荐

  • 从 Xamarin.Forms 应用程序打印

    我是 Xamarin 新手 目前正在使用 Xamarin Forms 开发示例或 概念证明 应用程序 我应该从这个应用程序执行打印任务 尽管我现在还不确定要打印什么 屏幕 标签内容 文件等 无论哪种方式 从 Xamarin Forms 应用
  • 使用来自互联网的图像更新 Android 小部件(使用异步任务)

    我有一个简单的 Android 小部件 我想用互联网上的图像进行更新 我可以在小部件上显示静态图像 没有问题 有人告诉我 您需要为此使用异步任务 而我对此没有太多经验 这是我的小部件 Override public void onUpdat
  • Docker Rancher - 从 WSL 使用 docker 时权限被拒绝

    我已经在 Windows 10 上使用 dockerd 选项安装了 Docker Rancher 并为我当前的 WSL 发行版 Ubuntu 安装了 WSL 当我尝试在 WSL2 中使用 docker 时 出现以下错误 fpapi xxx
  • Java 中 int 转换为数组 char

    我试图在不使用字符串操作的情况下将整数转换为字符数组 我的尝试是 int number 12 char test Character toChars number for char c test System out println c 没
  • 在多对多关系上添加元素

    我正在做一个项目 从学校的角度 你可以计算每个学生的平均值 您可以在一个屏幕上注册学生 第一个实体 在另一个屏幕上注册科目 第二个实体 学生有姓名 电子邮件 成绩和平均分作为属性 科目有姓名 它们彼此之间是多对多关联的 我正在尝试为每个学生
  • UITableView 和单元格重用

    我有一个UITableView我已经子类化了UITableViewCell 叫它CustomCell 所以它有几个标签和一个UIImageView 只有某些单元格才会真正显示图像 这是我的代码tableView cellForRowAtIn
  • 如何获取AVPlayer的视频帧?

    我有 PlayerView 类用于显示 AVPlayer 的播放 代码来自文档 https developer apple com library archive documentation AudioVideo Conceptual AV
  • 来自 StringIO 源的 Python xml etree DTD?

    我正在调整以下代码 通过中的建议创建这个问题 https stackoverflow com questions 2835077 lxml unicode entity parse problems 它采用 XML 文件及其 DTD 并将它
  • 在 Vista 上安装后无法使用 gem 和 ruby​​ 命令

    我昨天按照此站点上的说明在 Vista 32 位上安装了 Ruby 和 Ruby on Rails http rubyonrails org down http rubyonrails org down 所以我下载了安装程序 然后是 Gem
  • 当数据量较小时,node.js response.write(data) 需要很长时间

    我注意到 Node js 中以下代码的性能出现了奇怪的行为 当尺寸为content为1 4KB 请求的响应时间大约为16ms 然而 当尺寸为content只有988字节 请求的响应时间奇怪地长得多 大致200ms response writ
  • AngularJS - ngSwitch 和 ng Click 在 ng Repeat 中不起作用

    我想显示列表的元素 这要归功于ngSwitch但我不知道该怎么做ngRepeat 我一开始没有列出清单 只是为了了解如何ngSwitch工作并向您展示我想要做什么 这里有一个 jsFiddle 可以帮助您理解 jdFiffle 1 http
  • 在 RStudio 中记录 R 包中的 R6 类和方法

    我正在努力处理 R6 类及其方法的文档 我的目标是在 RStudio 中获得方法的自动完成功能 目前 我只得到方法的名称 但没有得到我通常使用的帮助信息roxygen2用参数等记录函数 目前 这是我的班级 importFrom R6 R6C
  • NativeScript 与 Flutter [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我已经开始工作Nativescript 与 Angular https www nativescript org 最好的部分是代码共享技术 我可
  • UOW + Repository + Autofac加载两个不同的DbContext

    我今天遇到了一个问题 我无法解决它 我搜索了很多 但无法找到解决方案 如果可以的话请帮助我 我正在实现一个 MVC 应用程序 它使用 EF 存储库模式 工作单元和 Autofac 作为依赖注入器 我能够使用一个 DbContext 类 但我
  • 在访问外部Web服务之前获取代理配置(.NET 2.0)

    当尝试调用外部 Web 服务 通过互联网 上的方法时 它抛出了我 远程服务器返回错误 407 需要代理身份验证 为了解决这个问题 我使用以下代码来设置我们在办公室使用的代理 Set the system proxy with valid s
  • 更新+使用(行锁)+ CTE

    我找不到任何有关 T SQL 语句语法的文档 我需要做一个WITH ROWLOCK CTE 结果更新 像这样的东西 所以更新后将是top1000 table1 col2 声明WITH ROWLOCK 在更新 table1 的行期间至关重要
  • 如何将对子模块所做的更改的提交推送到主 git 存储库中?

    我决定将我的应用程序存储库从 SVN 切换到 git 我的回购结构是这样的 AndroidStudioProjects MyMine tree L 1 ActionBarSherlock Android Universal Image Lo
  • 存储8个整数的avx2指令是什么?

    我想存储a中的8个整数 m256i变量为 8 x 32 位数组ints 我认为这方面的说明是 mm256 store epi32 但我收到一条错误消息 该指令甚至不存在 看看 根据您的目的地是否一致 您需要 or
  • 寻找橄榄球联赛中连续获胜次数最多的次数

    假设橄榄球联赛的结果是由这种数据给出的 Date Round Home Team Visitor Team Result 18 10 2018 1 ABC XYZ 30 20 18 10 2018 1 PQR ABC 13 12 有人可以阐
  • Flutter Firebase Google 登录无法正常工作。选择账户后停止

    我目前正在尝试在我的应用程序中实现谷歌登录和身份验证 我已经建立了一个项目并在 Firebase 中创建了一个应用程序 将 google services json 放入应用程序中 将必要的插件添加到 build gradle 并在 fir