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