Firebase:如何保持 Android 用户登录?

2024-04-06

我正在使用 Firebase SimpleLogin 启用电子邮件/密码身份验证。用户的创建和后续登录一切正常。然而,每当我离开应用程序(即使只有几秒钟),用户在我返回时永远不会登录,即......

authClient.checkAuthStatus(new SimpleLoginAuthenticatedHandler())...

始终返回空用户。

我不会通过 API 注销用户。另外,我在 Firebase 控制台中将用户登录的天数设置为 21。

我在 JS 文档中看到提到了 Remember-me 参数,但我看不到 Android/Java 的任何等效参数。

想知道我是否遗漏了文档中的任何内容或者 Android 是否无法实现?

感谢您的帮助,

Neil.

编辑:添加了代码示例。

用户创建....

public void registerUserForChat(final MyApplication application, String email, String password) {
    Firebase ref = new Firebase(FIREBASE_URL);
    SimpleLogin authClient = new SimpleLogin(ref);
    authClient.createUser(email, password, new SimpleLoginAuthenticatedHandler() {
        @Override
        public void authenticated(com.firebase.simplelogin.enums.Error error, User user) {
            if(error != null) {
                Log.e(TAG, "Error attempting to create new Firebase User: " + error);
            }
            else {
                Log.d(TAG, "User successfully registered for Firebase");
                application.setLoggedIntoChat(true);
            }
        }
    });
}

用户登录....

public void loginUserForChat(final MyApplication application,  String email, String password) {
    Log.d(TAG, "Attempting to login Firebase user...");
    Firebase ref = new Firebase(FirebaseService.FIREBASE_URL);
    final SimpleLogin authClient = new SimpleLogin(ref);
    authClient.checkAuthStatus(new SimpleLoginAuthenticatedHandler() {
        @Override
        public void authenticated(com.firebase.simplelogin.enums.Error error, User user) {
            if (error != null) {
                Log.d(TAG, "error performing check: " + error);
            } else if (user == null) {
                Log.d(TAG, "no user logged in. Will login...");
                authClient.loginWithEmail(email, password, new SimpleLoginAuthenticatedHandler() {
                    @Override
                    public void authenticated(com.firebase.simplelogin.enums.Error error, User user) {
                        if(error != null) {
                            if(com.firebase.simplelogin.enums.Error.UserDoesNotExist == error) {
                                Log.e(TAG, "UserDoesNotExist!");
                            } else {
                                Log.e(TAG, "Error attempting to login Firebase User: " + error);
                            }
                        }
                        else {
                            Log.d(TAG, "User successfully logged into Firebase");
                            application.setLoggedIntoChat(true);
                        }
                    }
                });
            } else {
                Log.d(TAG, "user is logged in");
            }
        }
    });
}

因此,loginUserForChat 方法首先检查是否有登录用户,如果没有,则执行登录。请注意,每次我启动应用程序时,我看到的日志记录都是......

  1. 正在尝试登录 Firebase 用户...
  2. 没有用户登录。将登录...
  3. 用户成功登录 Firebase

如果我退出应用程序,即使是几秒钟,然后返回 - 我会看到相同的日志记录。

我注意到的一件事是调用检查验证状态不获取任何用户凭据 - 我认为它只是检查any本地登录的用户?

非常感激。


另一种方法 - 在您的中尝试此代码onCreate:

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
    // User is signed in
    Intent i = new Intent(LoginActivity.this, MainActivity.class);
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    startActivity(i);
} else {
    // User is signed out
    Log.d(TAG, "onAuthStateChanged:signed_out");
}

这将通过直接将用户带到主活动来保持用户登录状态,而无需在注册活动处停止。因此,除非用户单击注销,否则用户将登录。

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

Firebase:如何保持 Android 用户登录? 的相关文章

随机推荐

  • 如何使用脚本任务声明工作表?

    我试图声明一个工作表来处理 xlsx 文件的单元格 但当我声明工作表对象时 我的 C 脚本失败 Microsoft Office Interop Excel Application xlApp new Microsoft Office In
  • 为什么 java.security.NoSuchProviderException 没有这样的提供者:BC?

    jar bcprov jdk16 145 jar 已添加到项目中 Security addProvider new org bouncycastle jce provider BouncyCastleProvider 已添加到类中 并且Bo
  • Spark清理shuffle溢出到磁盘

    我有一个循环操作 它生成一些 RDD 进行重新分区 然后进行聚合键操作 循环运行一次后 它会计算出最终的 RDD 该 RDD 会被缓存和检查点 并用作下一次循环的初始 RDD 这些 RDD 非常大 并且在每次迭代到达最终 RDD 之前都会生
  • 如何在android studio中添加轮廓材质图标?

    我正在使用 android 材质图标插件 但没有 轮廓图标 选项 任何选项或任何其他插件 目前我正在使用 https github com konifar android material design icon generator plu
  • Pandas 替换非零值

    我知道我可以用以下内容替换所有 nan 值df fillna 0 并将单个值替换为df replace 1 但是如何用单个值替换所有非零值 使用布尔索引 df df 0 value
  • 在 R 中使用 readHTMLTable 删除行

    我正在尝试使用 readHTMLTable 从 NOAA 提取模型数据 据我从 HTML 中可以看出 我试图获取的表格有多个字幕 其中每个字幕都由跨越所有列的单个单元格组成 由于某种原因 这导致 readHTMLTable 忽略紧随副标题的
  • 如何安装Android SDK Platform-Tools 24.0.0?

    我正在按照设置 Android N 预览版的指南进行操作https developer android com preview setup sdk html https developer android com preview setup
  • MVC Get 与 Post

    在研究 MVC 概念时 我了解到在 GET 操作中包含代码来更改服务器对象的状态 数据库更新等 并不是一个好习惯 缓存返回数据 已被给出作为其原因 有人可以解释一下吗 提前致谢 这是 HTTP 标准规定的 GET 动词应该是幂等且安全的 9
  • Python ConfigParser 问题

    ConfigParser 的配置文件是否必须命名为 Config ini 才能工作 我希望名称为 1Config ini 以便它显示在文件夹目录的顶部 这就是我目前拥有的 config ConfigParser ConfigParser c
  • 如何在 3.4+ 中禁用 JooQ 的自我广告消息?

    我是 JooQ 的忠实粉丝 但不幸的是 自从从 3 3 升级以来 每次在我的代码退出之前 它都会向控制台打印一条非常烦人的消息 Feb 02 2015 7 28 06 AM org jooq tools JooqLogger info IN
  • 如何将对象传递到 Xamarin Forms 自定义渲染器?

    如何将某个对象的实例传递给 Xamarin Formscustom render 这是自定义渲染器 public class LoginPageRenderer PageRenderer public override void ViewD
  • 程序集具有强名称,但我收到错误消息,指出需要强名称

    我正在尝试将第三方 COM dll 加载到我的应用程序中 一切都构建得很好 但是当我运行应用程序时 我不断从应用程序中收到此消息 无法加载文件或程序集 程序集 版本 1 0 0 0 文化 中性 PublicKeyToken null 或其依
  • 具有以编程方式确定的常量 DEFAULT 值的 ALTER TABLE

    我正在尝试向表 Employee 添加一列 MSSQL 2005 并使用另一个表 Department 的主键的默认约束 然后我将使该列成为该表的 FK 本质上 如果未提供 DepartmentID 这将根据部门名称将新员工分配到基础部门
  • 使用 df1 中的值从 df2 检索值,其中 df2 列和索引包含一系列值

    我有一个数据框 其中包含员工信息 例如 Name performance factor 1 和 Performance factor 2 我有另一个数据框 我根据 Performance factor 1 和 Performance act
  • 在 Android 中处理来电

    我想在 Android 中处理来电 实际上我想设置一个持续时间 如果我的手机接到任何电话 就会自动向他们每个人发送一条消息 有任何想法吗 只需将您的课程扩展到PhoneStateListener并覆盖onCallStateChanged方法
  • Drupal 在视图中返回结果数

    我在 Drupal 中有一个视图可以过滤我的内容 它带回 7 行 我想要返回的只是返回的数字或结果 7 这可能吗 我尝试使用查看结果计数器 但它为每个结果返回一个数字 1 2 3 4 5 6 7 我只需要第七部分 所以在 SQL 中我会执行
  • 将范围转换为图像

    我正在寻找将气体范围保存为图片 jpg 的方法 类似于 Excel VBA 的东西 Range MainMatrixName CopyPicture Appearance xlScreen Format xlPicture copy Exc
  • 如何使用重塑包重塑此数据框[重复]

    这个问题在这里已经有答案了 我有一个相当大的数据框 结构如下 id x1 x2 x3 y1 y2 y3 z1 z2 z3 v 1 2 4 5 10 20 15 200 150 170 2 5 2 3 7 6 25 35 40 300 350
  • Jenkins 抛出 java.lang.StackOverflowError ——不仅仅是在 unstash 上

    2019 年 7 月 31 日更新该错误有时发生在 unstash 调用之前 但总是在同一服务器上 为了查看问题是否是由于 unstash 在需要覆盖文件的目录中工作引起的 我清理了该目录 但问题仍然发生 这次开始输出 转录 任何拼写错误都
  • Firebase:如何保持 Android 用户登录?

    我正在使用 Firebase SimpleLogin 启用电子邮件 密码身份验证 用户的创建和后续登录一切正常 然而 每当我离开应用程序 即使只有几秒钟 用户在我返回时永远不会登录 即 authClient checkAuthStatus