2013-08-07 25 views
6

Bất kỳ ai cũng có thể cho tôi biết tôi đang làm gì sai? Tôi cần phải có mã thông báo truy cập từ Google Plus ..Nhận mã thông báo truy cập từ google plus Android

tôi đặt này trong phương pháp onConnected() của tôi, nhưng tôi không nhận được các thẻ truy cập, thay vào đó tôi nhận được lỗi ...

Code:

try { 
     String token = GoogleAuthUtil.getToken(this, mPlusClient.getAccountName() + "", "oauth2:" + Scopes.PLUS_PROFILE + 
           "https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email"); 
     Log.d("AccessToken", token); 
    } 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(); 
    } 

Lỗi:

08-07 10:10:24.199: E/GoogleAuthUtil(17203): Calling this from your main thread can lead to deadlock and/or ANRs 

bất cứ ai có thể cho tôi biết những gì sẽ là cách chính xác để lấy access token Google Plus từ người sử dụng?

+1

Thực hiện theo chủ đề nền Asynctask ví dụ – user1940676

+1

Câu trả lời là có lỗi? Tạo một chủ đề thực hiện xác minh oauth để ứng dụng của bạn không treo trong khi đang đàm phán – Tschallacka

+1

Khi tôi đặt trong Asynctask doInBackground, tôi nhận được thông báo sau - Phương thức getToken (Ngữ cảnh, Chuỗi, Chuỗi) trong loại GoogleAuthUtil không áp dụng được cho các đối số (AsyncTask mới () {}, AsyncTask mới () {}, AsyncTask mới () {}) – Karlis

Trả lời

1

Đây là mã bạn có thể sử dụng. Nếu ai đó có đề xuất tốt hơn thì vui lòng đăng:

 /** 
    * Successfully connected (called by PlusClient) 
    */ 
    @Override 
    public void onConnected(Bundle connectionHint) { 
     /* First do what ever you wanted to do in onConnected() */ 
     .... 
     .... 

     /* Now get the token using and async call*/ 
     GetGooglePlusToken token = new GetGooglePlusToken(this.getActivity(), mPlusClient); 
     token.execute(); 

    } 



class GetGooglePlusToken extends AsyncTask<Void, Void, String> { 
    Context context; 
    private GoogleApiClient mGoogleApiClient; 
    private String TAG = this.getClass().getSimpleName(); 

    public GetGooglePlusToken(Context context, GoogleApiClient mGoogleApiClient) { 
     this.context = context; 
     this.mGoogleApiClient = mGoogleApiClient; 
    } 

    @Override 
    protected String doInBackground(Void... params) { 
     String accessToken1 = null; 
     try { 

      Bundle bundle = new Bundle(); 

      String accountname = Plus.AccountApi.getAccountName(mGoogleApiClient); 
      String scope = "oauth2:" + Scopes.PLUS_LOGIN + " " + "https://www.googleapis.com/auth/userinfo.email" + " https://www.googleapis.com/auth/plus.profile.agerange.read"; 
      accessToken1 = GoogleAuthUtil.getToken(context, 
        accountname, 
        scope); 
      return accessToken1; 

     } catch (IOException transientEx) { 
      // network or server error, the call is expected to succeed if you try again later. 
      // Don't attempt to call again immediately - the request is likely to 
      // fail, you'll hit quotas or back-off. 
      //TODO: HANDLE 
      Log.e(TAG, "transientEx"); 
      transientEx.printStackTrace(); 
      accessToken1 = null; 

     } catch (UserRecoverableAuthException e) { 
      // Recover 
      Log.e(TAG, "UserRecoverableAuthException"); 
      e.printStackTrace(); 
      accessToken1 = null; 

     } catch (GoogleAuthException authEx) { 
      // Failure. The call is not expected to ever succeed so it should not be 
      // retried. 
      Log.e(TAG, "GoogleAuthException"); 
      authEx.printStackTrace(); 
      accessToken1 = null; 
     } catch (Exception e) { 
      Log.e(TAG, "RuntimeException"); 
      e.printStackTrace(); 
      accessToken1 = null; 
      throw new RuntimeException(e); 
     } 
     Log.wtf(TAG, "Code should not go here"); 
     accessToken1 = null; 
     return accessToken1; 
    } 

    @Override 
    protected void onPostExecute(String response) { 
     Log.d(TAG, "Google access token = " + response); 
    } 
} 
2

Bạn cần tìm nạp bằng cách sử dụng tác vụ không đồng bộ.

public void onConnected(Bundle connectionHint) { 
// Reaching onConnected means we consider the user signed in. 
Log.i(TAG, "onConnected"); 

// Update the user interface to reflect that the user is signed in. 
mSignInButton.setEnabled(false); 
mSignOutButton.setEnabled(true); 
mRevokeButton.setEnabled(true); 

// Retrieve some profile information to personalize our app for the user. 
Person currentUser = Plus.PeopleApi.getCurrentPerson(mGoogleApiClient); 


AsyncTask<Void, Void, String > task = new AsyncTask<Void, Void, String>() { 
    @Override 
    protected String doInBackground(Void... params) { 
     String token = null; 
     final String SCOPES = "https://www.googleapis.com/auth/plus.login "; 

     try { 
      token = GoogleAuthUtil.getToken(
        getApplicationContext(), 
        Plus.AccountApi.getAccountName(mGoogleApiClient), 
        "oauth2:" + SCOPES); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (GoogleAuthException e) { 
      e.printStackTrace(); 
     } 


     return token; 

    } 

    @Override 
    protected void onPostExecute(String token) { 
     Log.i(TAG, "Access token retrieved:" + token); 
    } 

}; 
task.execute(); 


System.out.print("email" + email); 
mStatus.setText(String.format(
     getResources().getString(R.string.signed_in_as), 
     currentUser.getDisplayName())); 

Plus.PeopleApi.loadVisible(mGoogleApiClient, null) 
     .setResultCallback(this); 

// Indicate that the sign in process is complete. 
mSignInProgress = STATE_DEFAULT; } 

Mã thông báo truy cập của bạn sẽ được lưu vào biến mã thông báo.

4

Bạn có thể truy cập mã thông báo trong phương thức Kết nối(). thêm mã này vào phạm vi phương thứcConnected().

final String SCOPES = "https://www.googleapis.com/auth/userinfo.profile"; 
     new AsyncTask<Void, Void, Void>() { 
      @Override 
      protected Void doInBackground(Void... params) { 
       String ace = ""; 
       try { 
        ace = GoogleAuthUtil.getToken(getApplicationContext(), 
               Plus.AccountApi.getAccountName(mGoogleApiClient), 
               "oauth2:" + SCOPES); 
       } 
       catch (IOException e) { 
        e.printStackTrace(); 
       } 
       catch (GoogleAuthException e) { 
        e.printStackTrace(); 
       } 
       Log.i("", "mustafa olll " + ace); 
       return null; 
      } 
     }.execute(); 
+0

Hoàn hảo. Đã làm cho tôi – Arshad