2017-02-01 4 views
1

GoogleApiClientconnect()disconnect()の操作を手動で処理したいとします。私がしようとしている:GoogleApiClient:後でsignOutを手動で接続して実行できません

  • ビルド新しいGoogleApiClient
  • enableAutoManageなし)コールonConnected()が呼び出されるconnect()
  • はここだ

signOutがあるsignOut

  • コールdisconnect()後に実行例:

    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スレッド](http://stackoverflow.com/questions/29343922/googleapiclient-is-throwing-googleapiclient-is-not-connected-yet-after-onconne)と同じようです解決されました。 – noogui

    +0

    @nooguiありがとう! 'onCreate()'でクライアントの作成を移動することは、解決策よりももっとうまくいくと思いますが、私は何もできません。このスレッドでは、このバグをGoogleに報告する方法はありません... – wverdese

    答えて

    1

    onCreate()でgoogleAPIClientを作成し、同じアクティビティでサインアウトする必要があります。

    例:の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(""); 
            } 
           } 
          }); 
    

    我々はApplicationContextのでmGoogleAPIClientを作成した場合、我々は適切にGoogleアカウントをサインアウトすることはできません。

    関連する問題