#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
Комментариев нет:
Отправить комментарий