Страницы

Поиск по вопросам

понедельник, 23 декабря 2019 г.

Первый запуск приложения, авторизовать пользователя. При последующих входах, перенаправлять пользователя на основную Activity( если он авторизован)

#java #android #firebase


Приложение авторизовывает пользователя ( при первом входе ) через google, с помощью
fireBase.

Первый запуск приложения, авторизовать пользователя. При последующих входах, перенаправлять
пользователя на основную Activity(если он авторизован) не показывая activity с авторизацией. 

SharedPreferences не подходит.

Прошу не кидаться камнями коллеги. Я только изучаю android и мне очень нужен совет
более опытных товарищей. Спасибо 

    public static final int SIGN_IN_CODE = 777;

    private GoogleApiClient googleApiClient;
    private ActivityMainBinding binding;

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

        binding = DataBindingUtil.setContentView(this, R.layout.activity_main);

        GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestEmail()
                .build();

        googleApiClient = new GoogleApiClient.Builder(this)
                .enableAutoManage(this, this)
                .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
                .build();

        binding.buttonGoogle.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = Auth.GoogleSignInApi.getSignInIntent(googleApiClient);
                startActivityForResult(intent, SIGN_IN_CODE);
            }
        });
    }

    @Override
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == SIGN_IN_CODE) {
            GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
            handleSignInResult(result);
        }
    }

    private void handleSignInResult(GoogleSignInResult result) {
        if (result.isSuccess()) {
            goMapScreen();
        } else {
            Toast.makeText(this, R.string.not_log_in, Toast.LENGTH_SHORT).show();
        }
    }

    private void goMapScreen() {
        Intent intent = new Intent(this, ScreenMapActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK
| Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }
}

    


Ответы

Ответ 1



Я аналогичную задачу решаю так: Есть 2 активити MainActivity, который объявлен лончером в манифесте и LoginActivity, в котором производятся манипуляции входа LoginActivity после авторизации куда-то пишет токен авторизации (в зависимости от того, что мы понимаем под авторизацией или в преференсы или в БД или в FireBase или даже в некоторых случаях просто как переменная в MainActivity При запуске приложения в MainActivity.onCreate() проверяем факт авторизации (см. выше) если нет авторизации запускаем нечто типа startActivity(new Intent(context, LoginActivity.class)) После успешной авторизации закрываем LoginActivity.finish() и запускаем еще раз MainActivity из LoginActivity через нечто похожее на: startActivity(new Intent(context, MainActivity.class)) Все.

Ответ 2



Вам нужно создать новый класс например SplashScreenActivity.class, который одновременно выполняет две функции показывает заставку и параллельно проверяет авторизацию. Для этого нужно переписать AndroidManifest.xml Например: SplashScreenActivity.class if (/* условие */) { Intent intent = new Intent(SplashScreenActivity.this, MainActivity.class); startActivity(intent); } else { Intent intent = new Intent(SplashScreenActivity.this, SignInActivity.class); startActivity(intent); } Редактировал здесь, так что могут быть ошибки

Ответ 3



Если не подходит SharedPreferences, вы можете хранить их во внутренней папке приложения. File dir = new File(Environment.getCacheDirectory()); File stotage = new File(dir, "KEY_STORAGE"); Напишите в комментариях, если не понятно, как записывать и получать данные из файла. Но сразу, мне удобнее это делать из: BufferedReader

Комментариев нет:

Отправить комментарий