【问题标题】:Create Session with Android Java Firebase使用 Android Java Firebase 创建会话
【发布时间】:2015-03-18 01:07:07
【问题描述】:

我正在使用电子邮件和密码。我已创建用户并验证用户,但我不知道如何为该用户添加会话。

例如,如果用户登录到他/她的帐户。当他们不想使用应用程序时,他/她可以在手机上删除应用程序的进程,然后摆脱应用程序的进程并且会话应该仍在进行中,因此当他们回到他们的应用程序时,他们应该仍然登录直到他/她注销(未授权)。

我在为已登录用户创建会话时遇到问题。我认为必须使用令牌,但我不知道应该如何使用它。

登录活动:

Firebase user_data = new Firebase("https://myapp.firebaseio.com"); 
user_data.authWithPassword(login_email.getText().toString(), login_pwd.getText().toString(), new Firebase.AuthResultHandler() {
@Override
public void onAuthenticated(AuthData authData) {
    System.out.println("User ID: " + authData.getUid() + ", Provider: " + authData.getProvider());
    Toast.makeText(getBaseContext(), "Login success!", Toast.LENGTH_LONG).show(); 
    Intent toMainActivity = new Intent(getApplicationContext(), MainActivity.class);
    startActivity(toMainActivity);  
  }
            @Override
public void onAuthenticationError(FirebaseError firebaseError) {
                // there was an error
    System.out.println("ERROR.........................................");
     }
});

这是一个简单的场景: 用户登录。(从 Login 类是 Intent 到 Main 活动类) 用户不注销但删除应用程序的进程。 后来用户决定使用该应用程序。

我的问题:当点击应用程序时,它会将用户带回登录页面,而它应该将用户带到主活动页面。

更新 - 初始化

我已经初始化它仍然没有保存登录状态。

我的问题:当点击应用程序时,它会将用户带回登录页面,而它应该将用户带到主活动页面。

这是主要活动页面:

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Firebase.setAndroidContext(this);

    setContentView(R.layout.activity_main);
    Firebase user_data = new Firebase("https://myapp.firebaseio.com"); 
    user_data.addAuthStateListener(new Firebase.AuthStateListener() {
        @Override
        public void onAuthStateChanged(AuthData authData) {
            if (authData != null) {
                System.out.println("Authentication is currently working"); //this did print
            } else {
                System.out.println("Failed authentication");
            }
        }
    });

    AuthData authData = user_data.getAuth();
    if (authData != null) {
        System.out.println("The state is: " + authData); //this did print
    } else {
        System.out.println("Failed");
    }

我检查了身份验证,它们似乎没问题,但是当我在 Main Activity 登录后删除进程时,它会在我重新加载应用程序时跳回登录页面。

以上auth数据监控结果:

工作授权

身份验证当前正在工作

状态

状态为:AuthData{uid='simplelogin:3', provider='password', token='***', expires='1426758087', auth='{provider=password, uid=simplelogin:3 }', providerData='{email=du16493@gmail.com, isTemporaryPassword=false}'}

身份验证当前正在工作

已解决

如果身份验证当前正在运行,只需添加 Intent,当应用在您调用的第一个 Activity 时首次加载到您的手机上时,它应该直接返回到 Main Activity。

这是登录活动页面:

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Firebase.setAndroidContext(this);

    setContentView(R.layout.activity_main);
    Firebase user_data = new Firebase("https://myapp.firebaseio.com"); 
    user_data.addAuthStateListener(new Firebase.AuthStateListener() {
        @Override
        public void onAuthStateChanged(AuthData authData) {
            if (authData != null) {
                System.out.println("Authentication is currently working"); //this did print
                Intent toMainActivity = new Intent( getBaseContext(), MainActivity.class);
                startActivity(toMainActivity);
            } else {
                System.out.println("Failed authentication");
            }
        }
    });

    AuthData authData = user_data.getAuth();
    if (authData != null) {
        System.out.println("The state is: " + authData); //this did print
    } else {
        System.out.println("Failed");
    }

【问题讨论】:

  • 您能详细说明您的问题吗?你问的不是很清楚。
  • 所以我想为登录用户创建一个会话。举个例子。假设我用我的 Android 手机登录,但不想使用这个应用程序,所以我点击主页按钮并删除应用程序的进程。后来我决定使用这个应用程序,所以当我打开应用程序时,它仍然应该登录,但它不是来自我上面给出的代码。
  • 如上所述,身份验证再次被成功提取,但authStateListener 中没有包含任何类型的代码来显示当前活动、UI 等的任何类型的更改。你是记录身份验证。状态并显示会话已恢复,但您在哪里显示或隐藏登录表单?
  • 我不知道如何隐藏登录,它是内置的android代码吗?那么我是否必须在 authstatelistener 中隐藏登录表单?
  • 是的,没错 - 您需要根据身份验证状态让您的代码适当地显示或隐藏登录表单。

标签: java android session firebase


【解决方案1】:

为了使身份验证会话在应用程序重新启动时保持不变,您需要使用您的 Android 上下文初始化 Firebase Android 客户端库:

来自https://www.firebase.com/docs/android/guide/setup.html

Firebase 库必须使用 Android 上下文初始化一次。 这必须在创建或使用任何 Firebase 引用之前发生。你 可以将 Firebase 设置代码添加到您的 Android 应用程序或 Activity 的 onCreate 方法。

@Override
public void onCreate() {
    super.onCreate();
    Firebase.setAndroidContext(this);
    // other setup code
}

Firebase 客户端将在后续应用程序冷启动时自动进行身份验证。要检查身份验证状态,请参阅Firebase Android: Monitoring Authentication

【讨论】:

  • 感谢您的回复,我仍然遇到同样的问题。我更新了答案并添加了主要活动类。在我的登录类中,我也初始化了Firebase.setAndroidContext(this);
猜你喜欢
  • 1970-01-01
  • 2012-06-01
  • 1970-01-01
  • 2014-12-22
  • 2016-06-06
  • 1970-01-01
  • 2019-06-19
  • 2020-08-20
  • 2020-08-18
相关资源
最近更新 更多