5

我用谷歌实现了登录没有问题。我正在使用片段代替活动。在 samsung galaxies 上测试代码时,登录系统会空闲并且不调用 onConnected 方法。当条款和条件显示时,这只是第一次发生。有什么建议吗?这是我的代码:

@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();
}
4

2 回答 2

1

我遇到了同样的问题,我通过覆盖 Fragment 中的 onResume 方法来修复它。

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

我仍然不确定它是否有效。

谢谢,拉胡尔

于 2015-02-02T06:06:24.573 回答
0

你应该处理这个 catch 块:

catch (UserRecoverableAuthException userRecoverableException) { 
    startActivity(userRecoverableException.getIntent()); 
} 
于 2013-07-26T06:50:26.540 回答