如何在Android Studio中使用Firebase自动登录?

时间:2018-10-08 04:14:36

标签: java android firebase sharedpreferences autologin

我正在为会员和非会员创建一个餐厅应用程序。主页包含3个按钮-菜单,登录和注册。我想让非会员在点击菜单按钮时自动登录(默认phoneId)进入系统,而会员每次都会登录或注册。

我尝试对非成员自动登录使用sharedPreferences(默认phoneId),但是我不知道默认phoneId是否可以与Firebase同步。我想跟踪非会员的交易订单。有什么方法只能让默认的phoneId具有自动登录功能吗?

p / s我只是一个初学者,正在为我的项目做这个应用程序。请帮助谢谢。

MainActivity.java

public class MainActivity extends AppCompatActivity {

Button btnSignIn, btnSignUp, btnMenu;
public AppPreferences appPreference;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    appPreference = new AppPreferences(this);

    btnMenu = (Button)findViewById(R.id.btnMenu);
    btnSignUp = (Button)findViewById(R.id.btnSignUp);
    btnSignIn = (Button)findViewById(R.id.btnSignIn);



    btnMenu.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Intent home = new Intent(MainActivity.this, Home.class);
            //Here save user info to preferences
            appPreference.setUserPhoneId(Constant.DEFAULT_PHONE_ID);
            appPreference.setUserPassword(Constant.DEFAULT_PASSWORD);
            startActivity(home);


        }
    });

    btnSignUp.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Intent signUp = new Intent(MainActivity.this, SignUp.class);
            startActivity(signUp);
        }
    });

    btnSignIn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Intent signIn = new Intent(MainActivity.this, SignIn.class);
            startActivity(signIn);
        }
    });
}
} 

AppPreferences.java

public class AppPreferences {

// Class variables
private Context context;
private static SharedPreferences sharedPreferences;
private static SharedPreferences.Editor editor;
public static final String PREF_NAME = "iMenuApp";
private int PRIVATE_MODE = 0;

// Define your preferences key
private static final String USER_PHONE = "9876543210";
private static final String USER_PASSWORD = "12345";

public AppPreferences(Context context)
{
    this.context = context;
    sharedPreferences = this.context.getSharedPreferences(PREF_NAME, PRIVATE_MODE);

    if (sharedPreferences != null)
    {
        editor = sharedPreferences.edit();
    }
}

//Store user PhoneId


public void setUserPhoneId(String userId){
    String TAG = "AppPref:setUserId";
    try
    {
        editor.putString(USER_PHONE, userId);
        editor.commit();
    } catch (Exception e) {
        Log.e(TAG, String.valueOf(e));
    }
}

// Get userPhoneId
public String getUserPhoneId(){
    return sharedPreferences.getString(USER_PHONE,"default_phone");
}

//Store userPassword
public void setUserPassword(String userPassword){
    String TAG = "AppPref:setUserPassword";
    try
    {
        editor.putString(USER_PASSWORD, userPassword);
        editor.commit();
    } catch (Exception e) {
        Log.e(TAG, String.valueOf(e));
    }
}

// Get userPassword
public String getUserPassword(){
    return sharedPreferences.getString(USER_PASSWORD,"default_password");
}


}

2 个答案:

答案 0 :(得分:1)

整个方法相当可疑,因为有一个anonymous authentication provider,应该将其用于那些“非成员”(也可以与安全规则一起使用)。将身份验证状态存储到Preferences很容易出错,因为它不考虑身份验证的实际状态-令牌过期后,将导致access denied

我也看过您以前的question,尽管整个业务逻辑还是有缺陷的。

...有关如何在Android上正确存储帐户的信息,请参见AccountManager

答案 1 :(得分:0)

您需要执行以下操作

MainActivity-> SignIn->如果登录成功->下次将应用程序启动到Home活动

尝试一下

1。)首先,您在boolean类中定义一个新的USER_LOGGED_IN首选项键setUserLoggedIn()并创建getUserLoggedIn()AppPreferences方法,如下所示。

    private static final boolean USER_LOGGED_IN = false;

     public static void setUserLoggedIn(boolean value) {
                String TAG = "AppPref:setUserLoggedIn";
        try{
            editor.putBoolean(USER_LOGGED_IN, value);
            editor.commit();
        } catch (Exception e) {
            Log.e(TAG, String.valueOf(e));
        }
     }

    public static boolean getUserLoggedIn() {
        return sharedPreferences.getBoolean(USER_LOGGED_IN, false);       
    }

2。)然后,在您的SignIn活动中,如果登录成功,请在您的true中将UserLoggedIn设置为sharedPreferences

3。)最后,在您的MainActivityoverride onResume()方法中,

@Override
protected void onResume() {
    super.onResume();
    boolean userLoggedIn = AppPreferences.getUserLoggedIn();

    if(userLoggedIn){
        MainActivity.this.startActivity(new Intent(getApplicationContext(), Home.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK));
    }
}

尝试一下,让我知道您的反馈。 谢谢!