Android Firebase 将多个帐户提供商与匹配的电子邮件链接起来

2024-04-14

在我的 firebase 仪表板中我设置了multiple accounts for one email option.

我的应用程序中有简单的电子邮件、Facebook 和 Google Plus 身份验证。

我在 LoginActivity 中这样处理它们:

谷歌加:

private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
    AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    dialog.dismiss();
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        FirebaseUser user = mAuth.getCurrentUser();
                        proceed();
                    } else {
                        // If sign in fails, display a message to the user.
                        Toast.makeText(LoginActivity.this, task.getException().getMessage(),
                                Toast.LENGTH_SHORT).show();

                    }

                    // ...
                }
            });
}

Facebook:

private void handleFacebookAccessToken(AccessToken token) {
    AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
    dialog.show();
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    dialog.dismiss();
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        FirebaseUser user = mAuth.getCurrentUser();
                        proceed();
                    } else {
                        Toast.makeText(LoginActivity.this, task.getException().getMessage(),
                                Toast.LENGTH_SHORT).show();
                    }

                }
            });

}

简单的电子邮件:

mAuth.signInWithEmailAndPassword(email, password)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        dialog.dismiss();
                        proceed();
                    } else {
                        Toast.makeText(LoginActivity.this, "Wrong email or password", Toast.LENGTH_SHORT).show();
                        dialog.dismiss();
                    }
                }
            });

现在我想让拥有相同 Facebook 和 Google Plus 电子邮件的用户能够使用 Facebook 和 Google Plus 进行授权。

This 本文档 https://firebase.google.com/docs/auth/android/account-linking文档说我应该跳过FirebaseAuth.signInWith方法并调用这些函数:

AuthCredential credential = GoogleAuthProvider.getCredential(googleIdToken, null);
mAuth.getCurrentUser().linkWithCredential(credential)

现在很混乱。由于我跳过了signInWith方法,当getCurrentUser仍然为空时,我如何调用它?

文档还说我处理合并,但我不明白。

currentUser = auth.signInWithCredential(credential).await().getUser();

此外,signInWithCredential 没有await method.

这意味着我应该在登录后使用同一电子邮件链接多个帐户?


要链接帐户,应该有一个现有会话。例如,假设一个新用户使用 Google 作为身份验证提供者创建一个帐户。

总之,要执行此操作,您需要:

  • 使用 GIDSignIn 向 Google 验证用户身份。
  • 然后 Google 返回一个 Id Token(如果一切顺利的话)。
  • 您将使用该令牌创建 GoogleAuthProvider 凭证对象。
  • 然后,您可以使用此凭据在 Firebase 中调用signInWithCredential 进行身份验证。

该过程与 Facebook 等其他身份验证提供商类似。为了将帐户与 Facebook 关联,您需要执行上述前三个步骤(与Facebook https://firebase.google.com/docs/auth/android/facebook-loginauth),但您需要调用“linkWithCredential”而不是“signInWithCredential”。如果一切顺利,现在用户将能够通过 Google 或 Facebook 的同一帐户进行身份验证。

如果您调用“signInWithCredential”,您将创建一个使用 Facebook 作为身份验证提供商的新帐户。因此,用户将无法访问具有两个(或更多)身份验证提供商的单个帐户,而是每个身份验证提供商都有两个单独的帐户。这就是为什么文档 https://firebase.google.com/docs/auth/android/account-linking表示您应该跳过调用 Firebase Auth.sign In With 方法。

关于您有关合并的问题,文档提到:“如果凭据已链接到另一个用户帐户,则对 linkWithCredential 的调用将失败”。这意味着用户已经拥有身份验证提供商的帐户。如果您希望用户访问两个帐户的信息,您将需要创建逻辑以将信息从一个帐户合并到另一个帐户。

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

Android Firebase 将多个帐户提供商与匹配的电子邮件链接起来 的相关文章

  • 如何在 PercentRelativeLayout 中使用layout_aspectRatio?

    我尝试在视图上实现 16 9 的纵横比PercentRelativeLayout https developer android com reference android support percent PercentRelativeLa
  • 相机预览的有效模糊

    到目前为止我尝试过的 将每一帧转换为位图 然后用library https github com wasabeef Blurry并将其放入ImageView这是在相机预览前 显然太慢了 就像1 fps 然后我开始使用渲染脚本这会模糊每一帧
  • Facebook 应用程序 - 此 URL 的域不包含在应用程序的域中。为什么?

    尝试使用 Facebook 应用程序登录时 我收到以下错误 无法加载 URL 此 URL 的域不包含在应用程序的域中 为了能够加载此 URL 请将应用程序的所有域和子域添加到应用程序设置中的 应用程序域 字段 如下图所示 URL http
  • 在 iOS 中获取 Facebook 好友时出错

    我正在尝试获取登录用户的 Facebook 好友列表 它在我的帐户中工作正常 但是当我将应用程序详细信息迁移到新帐户并更改应用程序 ID 和应用程序密码时 我收到以下错误 Error Domain com facebook sdk Code
  • 显示葡萄牙语字符 Android

    我正在开发一个 Android 应用程序 当它应该写 n o 或 cabe a 等单词 例如带有 或 的字符 时 它会写 或 我已经检查过源文件编码 它是UTF 8 看起来 UTF8 被解释为 ISO 8859 x 理论上 你可以提供 ja
  • Android:如何根据视图模型实时数据属性为片段编写单元测试?

    我的片段 UI 中有一个列表视图 其元素集取决于来自视图模型 LiveData 属性的值的状态 我想为片段创建工具测试 该片段包含与该属性的值集相关的 3 个场景测试用例 但我不知道从哪里开始 我的代码应该如下所示 class MyView
  • 删除所有(子)片段的正确方法

    我在父级片段线性布局 fragmentContainer 中动态加载一堆子级片段 然后当用户单击按钮时 我需要将它们全部删除并添加新的 我不知道每次会添加多少碎片 这是我一次性删除所有碎片的方法 LinearLayout ll Linear
  • Cloud Functions for Firebase 中的套接字挂起错误

    我有一个由 Pub Sub 事件触发的云函数 它用请求 承诺 https github com request request promise从我用于数据的 API 发出多个 GET 请求 它在 Cloud Functions Emulat
  • 这个错误从何而来?错误:com.facebook.FacebookException:无法获取应用程序名称

    我无法弄清楚这一点 我已将我的密钥哈希和所有内容添加到 Facebook 网页 但我无法找出此错误 11 12 19 51 27 744 D HelloFacebook 5188 Error com facebook FacebookExc
  • 通过拖动块来选择多个项目

    首先 让我告诉你 我对此感到压力很大 因为我什至不知道概念 方法名称 所以我什至无法在谷歌中搜索它 因为我不知道关键字 但我会尝试我的最好解释一下 请随意修改我的内容和标题 我想要实现的是 我的视图组包含许多子视图 或者它可以是 GridV
  • Firestore——仅获取大型同步集合中已更改的文档

    我已阅读下面的所有问题 但在文档中找不到任何内容来描述如何同步集合和接收only更改集合中的文档 我的同步集合中有超过 500 个文档 使用redux saga firebase 同步集合 https redux saga firebase
  • Android 改造参数化@Headers

    我正在使用 OAuth 每次发出请求时都需要将 OAuth 令牌放入标头中 我看到 Header注释 但是有没有办法让它参数化 以便我可以在运行时传入 这是概念 Header Authorization OAuth var api vers
  • 如何在打开导航抽屉时使背景 Activity 变小?

    我想做我的背景Activity打开时稍微小一点Navigation Drawer 模拟存在的效果Airbnb应用 我想最好的解释是截图 但重点不是让 View 变小 而是让它成为与 Drawer 打开 关闭动画同步的动画 因此 如果您开始打
  • 重构 google 的 NetworkBoundResource 类以使用 RxJava 而不是 LiveData

    谷歌的android架构组件教程here https developer android com topic libraries architecture guide html有一部分解释了如何抽象通过网络获取数据的逻辑 在其中 他们使用
  • 什么是“多重”启动模式?

    On http developer android com guide topics manifest activity element html http developer android com guide topics manife
  • 如何从 SD 卡中删除文件

    我正在创建一个文件作为电子邮件的附件发送 现在我想在发送电子邮件后删除图像 有没有办法删除文件 我努力了myFile delete 但它没有删除该文件 我在 Android 上使用此代码 因此编程语言是 Java 使用通常的 Android
  • Android JobScheduler 每天只运行一次

    我检查了 JobScheduler API 它可以从 Android API 级别 21 开始使用 我想安排一个需要互联网并且每天仅运行一次或可选每周运行一次的任务 如果成功执行 我没有找到关于这种情况的例子 有人能帮我吗 谢谢 针对您的问
  • 无法查询 ContentResolver 以从 my_downloads 获取下载文件的名称,但在 all_downloads 中工作正常

    我的应用程序设置为激活一次具有扩展名的文件 myappdata被打开 它通过这个意图过滤器来实现这一点
  • 使用 Arduino 来操作 Android [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有人尝试过让 Android 和 Arduino 相互通信吗 我在网上找到了几个项目 Amarino http www amarino tool
  • 智能手机可以通过 3G/4G 进行点对点通信吗?

    我正在尝试编写一个应用程序 将数据从一个 Android 设备传输到另一个 Android 设备 但这些设备很可能位于城市 州或国家的不同部分 直接的方法是拥有一台中央服务器 或任何类型的服务器 但我试图避免使用中央服务器 我试图传递的数据

随机推荐

  • 如何从元组列表中提取第 n 个元素

    我正在尝试从元组列表中获取第 n 个元素 我有类似的东西 elements 1 1 1 2 3 7 3 5 10 我希望仅将每个元组的第二个元素提取到列表中 seconds 1 3 5 我知道这可以通过for循环 但我想知道是否还有另一种方
  • 如何使用 xamarin 以编程方式制作按钮?

    我正在尝试使用 xamarin ide c 以编程方式创建按钮 我需要什么代码来创建按钮 设置其大小 设置其文本 设置其背景颜色以及设置其约束 有没有办法将按钮定义为屏幕宽度的 1 4 提前致谢 首先创建按钮 UIButton button
  • JavaScript 中的循环函数

    我是 Javascript 新手 我正在寻找一个循环函数 这是Clojure 的实现 http clojuredocs org clojure core clojure core cycle我试图找到一个循环函数 可以无限循环 递归数组的值
  • Android,通过WLAN通话音频流

    我正计划为 Android 开发我的特定 VoIP 应用程序 这是场景 当接到电话时 我想通过本地电脑扬声器听到打电话的人的声音 并且我想通过我自己的电脑麦克风 耳机与他通话 所以我需要通过无线局域网发送我和我正在通话的人的音频流 像这样的
  • RFC 4648(Base[16,32,64])在 Matlab 中的实现

    有没有任何实施RFC4648 https tools ietf org html rfc4648 Base16 Base32 和 Base64 数据编码 Matlab 中 在 MATLAB 中您可以轻松使用嵌入式Java 功能 http w
  • Kubernetes Node 中的内核内存使用率较高

    我非常绝望地寻找解决方案 我正在 AWS 上运行 Kubernetes 集群 v1 16 7 节点规格为 它是一个亚马逊 EC2 t3 medium实例与4GB RAM和 AMI k8s 1 11 debian stretch amd64
  • YAP Prolog 中的正向链接?

    我需要在某些 Prolog 问题中使用前向链接器 我想避免使用普通元解释器从头开始实现它 但如果没有其他选项可用 这就是我必须要做的 因为使用元解释器执行此操作会很慢 而且我我确信应该有一些好的实现 有人知道 YAP 或 SWI Prolo
  • 通过 TCP 客户端套接字接收数据时出现问题

    我正在尝试用 C 语言编写一个 TCP 客户端程序 客户端将在其中启动 连接到服务器 然后它会发送一些信息 然后监听它收到的信息并做出相应的反应 我遇到麻烦的部分是持续聆听 这是我所拥有的 while 1 numbytes recv soc
  • Addon SDK方式制作对话框

    使用 SDK 制作对话框的正确方法是什么 该对话框不是锚定到附加栏等 而是显示在屏幕中央 似乎没有任何 API 可以实现这一重要功能 我确实看到了windows utils has open但我有两个问题 打开对话框似乎需要 chrome
  • 如何检查当前分支是否有任何内容需要提交?

    目标是获得可以在 shell 命令中评估的明确状态 I tried git status但它总是返回 0 即使有项目需要提交 git status echo this is always 0 我有一个想法 但我认为这是一个坏主意 if gi
  • 是否可以自动化即点即用应用程序?

    我有一个小型应用程序 可以通过 COM OLE 自动化实现 Microsoft Word 的自动化 不幸的是 这不适用于虚拟化的即点即用版本的 Word 因为它们在注册表中没有所需的密钥 至少不是预期的位置 换句话说 CreateObjec
  • Apache FOP 1.1 带有 zxing 的 QRCodes

    好的 我在使用 Barcode4j 2 1 和 zxing 0 1 2 在 FOP 1 1 中生成 QR 码时遇到问题 我目前有一个 FOP 1 0 实现正常工作 通过添加
  • html 中颜色选择的效率。 RGB、十六进制、名称

    浏览器解析颜色的速度有差异吗 例如 红色 我可以使用以下CSS red color red color ff0000 color rgb 255 0 0 这些都会产生相同的结果 文本颜色为红色 但从效率的角度来看 什么是最好的搭配 我意识到
  • 如何将 WMF 文件转换为 SVG 文件?

    如何将 WMF 文件转换为 SVG 我有大约 550 个 WMF 文件需要转换为 SVG 格式 对于一个文件 我在 Visio 中打开 WMF 文件并将其另存为 SVG 格式 但转换大约 550 个文件是一个繁琐的过程 实际上 这些WMF文
  • 在特定列上设置 ANSI_PADDING(同一表的不同列中 ANSI_PADDING ON 和 OFF)

    是否可以 使用单个 CREATE TABLE 脚本 设置特定的varbinary列ANSI PADDING ON但其他人ANSI PADDING OFF e g CREATE TABLE PaddingX ColumnA varbinary
  • 可绘制为字节[]

    我有一张来自网络的图像ImageView 它非常小 一个图标 我想将它存储在我的 SQLite 数据库中 我可以得到一个Drawable from mImageView getDrawable 但我不知道下一步该做什么 我不完全理解Draw
  • 如何将原始模数和指数转换为 RSA 公钥(.pem 格式)

    我将 RSA 公钥的模数和指数嵌入到二进制文件中 并且我正在尝试提取整个 blob 并创建可用的 pem 公钥 目前 我正在提取完整的 260 个字节 4 个字节用于指数 256 个字节用于模数 并编码为base64 我正在使用以下 she
  • scikit-learn 中的“详细”参数

    许多 scikit learn 函数都有verbose根据他们的文档 c 控制冗长 越高 消息越多 例如 网格搜索简历 https scikit learn org stable modules generated sklearn mode
  • .Net 4.5 EventSource ETW 提供程序未显示在提供程序列表中

    我一直致力于使用 NET4 5新功能ETW EventSource 我无法使用 perfmon gt Data Collector Sets 将其显示在跟踪提供程序列表中 我能够使用 perfview 查看日志 我能够使用 EventSou
  • Android Firebase 将多个帐户提供商与匹配的电子邮件链接起来

    在我的 firebase 仪表板中我设置了multiple accounts for one email option 我的应用程序中有简单的电子邮件 Facebook 和 Google Plus 身份验证 我在 LoginActivity