2013-07-25 111 views
5

我用google實施了登錄,沒有任何問題。我正在使用片段代替活動。 在三星星系上測試代碼時,發生登錄系統空閒並且不會調用onConnected方法。 這只是第一次,當條款和條件顯示。 有什麼建議嗎? 這裏是我的代碼:首次登錄時用Android登錄Google plus問題

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    initGoogle() 
} 


private void initGoogle() { 
    mPlusClient = new PlusClient.Builder(getActivity() , this , this).setVisibleActivities("http://schemas.google.com/AddActivity", "http://schemas.google.com/BuyActivity").build(); 

} 

public void connectWithPlus() { 
    launchProgressScreen(); 
    if(mPlusClient != null && !mPlusClient.isConnected()){ 
     mPlusClient.connect(); 
    }else{ 
     mPlusClient.clearDefaultAccount(); 
     mPlusClient.disconnect(); 
     mPlusClient.connect(); 
    } 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == REQUEST_CODE_RESOLVE_ERR) { 
    mConnectionResult = null; 
    connectWithPlus(); 
} 
} 
@Override 
public void onConnectionFailed(ConnectionResult result) { 
    if (result!= null && result.hasResolution()) { 
     try { 
      result.startResolutionForResult(getActivity(), REQUEST_CODE_RESOLVE_ERR); 
     } catch (SendIntentException e) { 
      connectWithPlus(); 
     } 
     mConnectionResult = result; 
    }else{ 
     onTaskResult(ProgressAlert.TASK_CANCEL_GOOGLE_LOGIN, null); 
    } 
} 
@Override 
public void onConnected(Bundle connectionHint) { 
    AsyncTask<Object, Void, String> task = new AsyncTask<Object, Void, String>() { 
     @Override 
     protected String doInBackground(Object... params) { 
      String token = null; 
      try { 
       token = GoogleAuthUtil.getToken(getActivity(), mPlusClient.getAccountName(),  
         "oauth2:" + Scopes.PLUS_LOGIN); 
      } catch (UserRecoverableAuthException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (GoogleAuthException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      return token; 
     } 

     @Override 
     protected void onPostExecute(String token){ 
      getAuthDelegate().setToken(token, SocialAccount.google); 
      getAuthDelegate().loginUsingGoogle(token, new HashMap<String, String>()); 
     } 
    }; 
    task.execute(); 
} 

@Override 
public void onDisconnected() { 
    Log.w("Google Login", "called disconnected"); 
} 

@Override 
public void onClick(View v) { 
    connectWithPlus(); 
} 
+0

你得到onConnectionFailed回來呢? – Lee

+0

不,我什麼也沒有。但奇怪的是,如果y嘗試再次連接,它會調用onConnected而不會失敗。 –

+0

你可以發佈相應Activity代碼的相關位嗎?我想看看你如何搭配Activity生命週期。 – Lee

回答

0

您應該處理此catch塊:

catch (UserRecoverableAuthException userRecoverableException) { 
    startActivity(userRecoverableException.getIntent()); 
} 
1

我面臨同樣的問題,我在片段覆蓋的onResume方法固定它。

@Override 
    public void onResume() { 
     // TODO Auto-generated method stub 
     super.onResume(); 
     mGoogleApiClient.connect(); 
    } 

我還不確定它的有效解決方案與否。

感謝, 拉胡爾