2016-03-25 3 views
3

У меня есть приложение с 3 действиями: активность входа, основное действие и активность детали.Поток входа в Google с несколькими действиями

Активность входа в систему использует Google Войти, чтобы получить учетную запись пользователя (идентификатор токена и адрес электронной почты). Как для основной деятельности, так и для дополнительной деятельности требуется GoogleSignInAccount.

Я не хочу, чтобы приложение всегда начиналось с активности входа и прозрачно переписывалось, когда пользователь запускает приложение.

Я не хочу хранить идентификатор маркера и адрес электронной почты пользователя по общим предпочтениям, я бы предпочел напрямую манипулировать GoogleSignInAccount в моем приложении.

Каков правильный поток для обработки этого знака в сценарии? Должен ли я попытаться сделать silentSignIn на каждом экране или есть лучший способ сохранить и получить GoogleSignInAccount?

ответ

2

Да, вы можете использовать silentSignIn для этой цели.

Если вы ищете GoogleSignInAccount на UI потоке, ниже асинхронная версия:

Auth.GoogleSignInApi.silentSignIn(mGoogleApiClient).setResultCallback(
     new ResultCallback<GoogleSignInResult>() { 
      @Override 
      public void onResult(@NonNull GoogleSignInResult result) { 
       if (googleSignInResult.isSuccess() { 
        GoogleSignInAccount gsa = googleSignInResult.getSignInAccount();  
       } 

      } 
     }); 

Примечание: Если mGoogleApiClient не построен с enableAutoManage, вы должны вручную вызвать mGoogleApiClient.connect() и mGoogleApiClient .disconnect() для использования вышеприведенного образца кода. Для получения дополнительной информации см. Подробнее о managing the GoogleApiClient connection lifecycle.

Или на волоске, не UI, вы можете использовать пример код ниже:

try { 
    ConnectionResult result = mGoogleApiClient.blockingConnect(); 
    if (result.isSuccess()) { 
     GoogleSignInResult googleSignInResult =  
       Auth.GoogleSignInApi.silentSignIn(googleApiClient).await(); 
     if (googleSignInResult.isSuccess() { 
      GoogleSignInAccount gsa = googleSignInResult.getSignInAccount(); 
     } 
    } 
} finally { 
    mGoogleApiClient.disconnect(); 
} 

Отъезд documentation для получения более подробной информации, в том числе с помощью маркеров Google Account ID для бэкенд AUTH или API вызовов.

1

Вы также можете передать GoogleSignInAccount, как дополнительный Намерение вход:

GoogleSignInAccount acct = result.getSignInAccount(); 
Intent intent = new Intent(this, AnotherActivity.class); 
intent.putExtra("singedInAccount", acct); 
startActivity(intent); 

и получить его в OnCreate() чужой метод деятельности как таковой:

getIntent().getParcelableExtra("singedInAccount"); 

Обратите внимание, что вы должны используйте getParcelableExtra() вместо getSerializableExtra() до GoogleSignInAccount реализует Parcelable, а не интерфейс Serializable.

Смежные вопросы