Как выполнить автоматический вход с помощью Firebase в Android Studio? - PullRequest
0 голосов
/ 08 октября 2018

Я создаю ресторанное приложение для участников и не членов.Домашняя страница состоит из 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 голосов
/ 08 октября 2018

Весь подход довольно сомнителен, поскольку существует поставщик анонимной аутентификации , который следует использовать для тех «не членов» (и его также можно использовать вместе с правилами безопасности).сохранение состояния аутентификации на Preferences подвержено ошибкам, потому что оно не учитывает фактическое состояние аутентификации - что приведет к access denied после истечения срока действия токена.

Я такжевидел ваш предыдущий вопрос , хотя, тем не менее, вся бизнес-логика имеет недостатки.

... лучше узнать AccountManager , чтобы узнать, как правильно хранить учетные записи на Android.

0 голосов
/ 08 октября 2018

Вам нужно сделать что-то вроде этого,

MainActivity -> SignIn -> при успешном входе в систему -> В следующий раз, когда вы запустите приложение, вы увидите Home Activity

Попробуйте,

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 Деятельности, если вход в систему успешен, установите UserLoggedIn как true в вашем sharedPreferences.

3.) Наконец, в вашем MainActivity,override 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));
    }
}

Попробуйте и дайте мне знать ваши отзывы.Спасибо!

...