2013-07-25 22 views
5

Tôi đã triển khai đăng nhập bằng google mà không gặp vấn đề gì. Tôi đang sử dụng một mảnh ở vị trí của một hoạt động. Kiểm tra mã trên các thiên hà Samsung nó xảy ra khi hệ thống đăng nhập không hoạt động và không gọi phương thức onConnected. Điều này chỉ xảy ra lần đầu tiên khi các điều khoản và điều kiện hiển thị. Bạn có lời khuyên nào không? Đây là mã của tôi:Đăng nhập Android với Google cộng với vấn đề về lần đăng nhập đầu tiên

@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

Bạn nhận được onConnectionĐược trả lại thay thế? – Lee

+0

Không, tôi không nhận được gì. Nhưng kỳ lạ nếu y cố gắng kết nối lại nó gọi onConnected mà không bị lỗi. –

+0

Bạn có thể đăng các bit liên quan của mã Hoạt động tương ứng không? Tôi muốn xem bạn đang gắn bó như thế nào trong vòng đời Activity. – Lee

Trả lời

0

Bạn nên xử lý khối catch này:

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

tôi phải đối mặt với cùng một vấn đề và tôi cố định nó bằng cách ghi đè onResume phương pháp trong Fragment.

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

Tôi vẫn không chắc liệu giải pháp hợp lệ của nó có hay không.

Xin cảm ơn, Rahul