如何使用 Firebase 通过我的 Android 应用程序保持用户持续登录

2024-03-30

我目前正在使用 Android Studios 编写一个使用 Firebase 的应用程序。我的问题是,当我登录时,如何在应用程序的整个生命周期中保持该状态,直到我选择注销。

到目前为止我在 MainActivity 中做了什么

/* *************** IN MAINACTIVITY *************** */
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    /* Firebase init */
    Firebase.setAndroidContext(this);
    rootRef = new Firebase(URL);

   /* Other Android code
      ...                  
    */

   firebaseAuthLisener = new Firebase.AuthStateListener() {
        @Override
        public void onAuthStateChanged(AuthData authData) {
            if (authData != null) {
                // user is logged in
                System.out.println("Logged in!");
            } else {
                // user is not logged in
                System.out.println("Not logged in!");
            }
        }
   };
}

/* The Login function gets me to the LoginActivity */
public void Login() {
    Intent intent = new Intent(this,  LoginActivity.class); 
    int reqCode = 1; 
    startActivityForResult(intent, reqCode); 
}

所以当调用Login()函数我登陆LoginActivity, 到目前为止我在 LoginActivity 中做了什么

/* *************** IN LOGINACTIVITY *************** */
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    /* Firebase init */
    rootRef = new Firebase(URL);

    /* Other Android code
      ...                  
     */

   loginResultCallback = new Firebase.AuthResultHandler() {
        @Override
        public void onAuthenticated(AuthData authData) {
           activityDone();
        }
        @Override
        public void onAuthenticationError(FirebaseError firebaseError) {
           System.out.println("Error couldn't login");
        }
   };
}

/* The loginFirebase function logs me into the Firebase */
public void loginFirebase() {
    rootRef.authWithPassword("EMAIL", "PASSWORD", loginResultCallback);
} 

/* The activityDone function returns me to MainActivity */
public void activityDone() {
    Intent resultForMainActivityIntent = new Intent();
    setResult(Activity.RESULT_OK, resultForMainActivityIntent);
    finish();
} 

如前所述,在致电后我会如何activityDone()在我的应用程序的整个生命周期中保持登录状态,直到我选择注销?

EDIT:如果其他人发现了这个线程,我在这里做错的本质上是没有使用回调,另一种重写MainActivity的方式:

/* *************** IN MAINACTIVITY *************** */
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

   /* Firebase init */
   Firebase.setAndroidContext(this);
   rootRef = new Firebase(URL);

   /* Other Android code
      ...                  
    */

    rootRef.addAuthStateListener(new Firebase.AuthStateListener() {
        @Override
        public void onAuthStateChanged(AuthData authData) {
            Log.i(">firebaseAuthLisener<", "[CALLED]");

            if (authData != null) {
                // user is now logged in
                System.out.println("Logged in!");
            } else {
                // user is not logged in
                System.out.println("Not logged in!");
            }
        }
    });
}

/* The Login function gets me to the LoginActivity */
public void Login() {
   Intent intent = new Intent(this,  LoginActivity.class); 
   int reqCode = 1; 
   startActivityForResult(intent, reqCode); 
}

现在应该在从 LoginActivity 返回后立即执行。感谢 Frank van Puffelen 还看到:登录github上的demo https://github.com/firebase/firebase-login-demo-android


当您的应用的用户通过 Firebase 进行身份验证时,Firebase 客户端会将令牌存储在用户 Android 设备上的共享偏好设置中。因此,当应用程序重新启动时,用户已经通过身份验证(除非令牌已过期)。

所以通常你只会打电话Login()(或显示“登录”按钮)onAuthStateChanged() gets null为其authData.

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

如何使用 Firebase 通过我的 Android 应用程序保持用户持续登录 的相关文章

随机推荐

  • CMAKE:更新函数中的列表不起作用

    我跟着this https stackoverflow com questions 22487215 cmake function parameter and return and this https stackoverflow com
  • 在 javascript 中使用正则表达式无效组错误

    我有以下正则表达式来检查多种类型的电子邮件地址输入 W
  • Windows 8 下的 WPF 和 Silverlight 的未来会怎样?

    看到首次发布 HTML5 JS Windows 8 GUI http windows8news com 2011 06 02 microsoft unveil windows 8 tablet ui 大量的WPF 和 Silverlight
  • 如何在 pycaffe 中获取图层类型?

    是否有可能在 pycaffe 中获取每一层的类型 例如 卷积 数据等 我搜索了提供的示例 但找不到任何内容 目前我正在使用图层名称来完成我的工作 这是非常糟糕和有限的 这很容易 import caffe net caffe Net path
  • 使用curl PHP获取gzip压缩的XML文件时出现问题

    我正在尝试使用curl 从 xml gz 文件中获取数据 我可以下载该文件 但我的任何尝试都无法获取可用的 XML 当我尝试打印 XML 时 我收到一长串乱码特殊字符 例如 r 7 E i 5 6 DL u 有没有一种简单的方法来解压缩和编
  • Ruby 模除法

    所以我用一个模块编写了一个在 Ruby 中进行模除法的程序 module Moddiv def Moddiv testfor op1 op2 return op1 op2 end end Program require mdivmod pr
  • 让 UIButton 充当导航控制器

    如何使常规 UIButton 充当导航控制器 以便按下它时我可以打开一个新视图 按照以下方式在 viewDidLoad 方法中创建 yourButton UIButton yourButton UIButton buttonWithType
  • bitbucket-pipelines.yml 文件中的部署环境“暂存”在管道中多次出现

    我正在尝试让 Bitbucket Pipelines 执行定义部署区域的多个步骤 当我这样做时 我收到错误 配置错误您的部署环境 暂存 bitbucket pipelines yml 文件在管道中出现多次 请参阅我们的文档以了解有效的环境及
  • 在 Play 应用程序中启动时调用服务

    我有一个 Play 2 4 应用程序 尝试在应用程序启动时启动每周任务 当前的建议是在急切注入的类的构造函数中执行此操作 Guice 但是 我的任务需要访问服务 如何将该服务注入到我的任务中而不出现错误 Error injecting co
  • iOS 10 问题:即使设置了 ContentSize,UIScrollView 也不滚动

    UPDATE 这是 iOS 10 的问题 这在 iOS 9 中仍然像以前一样有效 当你设置时它就会起作用contentSize在主线程上并将此代码放入 void viewDidLayoutSubviews void viewDidLayou
  • Excel COUNTIF 特殊字符

    是否可以计算整列中的特定特殊字符 我正在尝试数所有逗号 在一个专栏中 这就是我正在使用的 COUNTIF D3 D45 问题是这仅计算单元格中单独的逗号 如果我在单元格中添加任何其他内容 在逗号之前或之后 则不会计数 我正在计数的细胞示例
  • Datanode 在单机上的 Hadoop 中失败

    我使用以下教程在 ubuntu 12 04 LTS 上设置并配置了 sudo 节点 hadoop 环境http www michael noll com tutorials running hadoop on ubuntu linux mu
  • 哪些事件附加到元素?

    如何接收附加到元素的所有事件dojo http dojotoolkit org dojo query mydiv which events does mydiv has 获取 DOM 元素上的所有事件 Get my div myDiv do
  • 复制时谁负责释放数组中的对象?

    在 Objective C 中 如果使用 mutableCopy 将 array1 复制到 array2 并且假设代码在 main 中完成 那么谁负责释放数组中包含的对象 是main 还是array2 我觉得前面的回答都没有抓住重点 或者说
  • 困惑:SQLiteOpenHelper onUpgrade() 的行为如何?并与旧数据库备份一起导入?

    假设我有一个包含 2 列的数据库表 test table 以及 SQLiteOpenHelper 中相应的创建脚本 DB VERSION 1 public void onCreate SQLiteDatabase db db execSql
  • Erlang中如何维护状态?

    我见过人们使用口述 命令 记录用于维护我读过的许多博客中的状态 我发现这是一个非常重要的概念 一般来说 我理解维护状态和递归的含义 但是当涉及到 Erlang 时 我对它的处理方式有点模糊 有什么帮助吗 维护状态的最简单方法是使用gen s
  • 在 Python 中迭代 Stern-Brocot 树的部分内容

    我的目标是迭代 a b a 与 b 的互质对并且 a b我的第一个想法是使用 Stern Brocot 树的递归函数 def Stern Brocot n a 0 b 1 c 1 d 1 if a b c d gt n return 0 x
  • Android BOOT_COMPLETED 事件未启动服务

    我正在编写一个小型 Android 应用程序 它在设备启动时启动我的服务 应用程序在所有 Android 版本 4 4 2 Mi Note 4G 必须在其安全应用程序中启用权限 5 0 Lenovo K3 Note 5 1 一加一 6 Ne
  • Windows 上的 qmake 触摸功能

    qmake 手册记录了touch更新文件时间戳的函数 请参阅 触摸 文件名 参考文件名 http doc qt io qt 5 qmake test function reference html touchfunction 推荐here
  • 如何使用 Firebase 通过我的 Android 应用程序保持用户持续登录

    我目前正在使用 Android Studios 编写一个使用 Firebase 的应用程序 我的问题是 当我登录时 如何在应用程序的整个生命周期中保持该状态 直到我选择注销 到目前为止我在 MainActivity 中做了什么 IN MAI