2017-02-01 2 views
1

Я хочу вручную обработать операции connect() и disconnect() на GoogleApiClient. Я пытаюсь:GoogleApiClient: невозможно вручную подключиться и выполнить signOut после этого

  • строить новый GoogleApiClient (без enableAutoManage)
  • вызова connect()
  • когда onConnected() называется выполнять signOut
  • вызов disconnect() после signOut закончилась

Вот пример:

fun signOut(googleApiClient: GoogleApiClient, resultCallback: (Status) -> Unit) { 
    Auth.GoogleSignInApi.signOut(googleApiClient).setResultCallback(resultCallback) 
} 

fun test() { 
    val googleApiClient = GoogleApiClient.Builder(activity) 
     .addApi(Auth.GOOGLE_SIGN_IN_API, buildGoogleSignInOptions(googleAuthId)) 
     .build() 
    googleApiClient.registerConnectionCallbacks(object : ConnectionCallbacks { 
     override fun onConnected(connectionHint: Bundle?) { 
      signOut { status -> 
       //TODO something with status 
       googleApiClient.disconnect() 
      } 
     } 

     override fun onConnectionSuspended(cause: Int) { 
      //nop 
     } 
    }) 
    googleApiClient.registerConnectionFailedListener { 
     //TODO handle failure 
    } 
    googleApiClient.connect() 
} 

Однако когда onConnected() называется signOut вызов не выполняется

IllegalStateException: GoogleApiClient is not connected yet 

Я делаю что-то неправильно, или это ошибка из библиотеки?

+1

Ошибка, похоже, с этим [SO thread] (http://stackoverflow.com/questions/29343922/googleapiclient-is-throwing-googleapiclient-is-not-connected-yet-after-onconne) и была решена. – noogui

+0

@noogui Спасибо! Перемещение создания клиента в 'onCreate()' звучит скорее обходным решением, чем решением, но я думаю, что больше ничего не могу сделать. Как говорится в этой теме, невозможно сообщить об этой ошибке Google ... – wverdese

ответ

1

Нам нужно создать googleAPIClient в onCreate() и вывести его в том же действии.

Ex: В OnCreate()

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
      .requestIdToken(this.getString(R.string.default_web_client_id)) 
      .requestEmail() 
      .requestProfile() 
      .build(); 


    mGoogleApiClient = new GoogleApiClient.Builder(activity) 
      .enableAutoManage(activity, new GoogleApiClient.OnConnectionFailedListener() { 
       @Override 
       public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 
       } 
      }) 
      .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() { 
       @Override 
       public void onConnected(@Nullable Bundle bundle) { 
       } 

       @Override 
       public void onConnectionSuspended(int i) { 

       } 
      }) 
      .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
      .build(); 

И Выход его:

Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(
      new ResultCallback<Status>() { 
       @Override 
       public void onResult(@NonNull Status status) { 

        if (mListener != null) { 
         mListener.onSigout(""); 
        } 
       } 
      }); 

Если мы создаем mGoogleAPIClient с ApplicationContext, мы не можем выйти из аккаунта Google должным образом.

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