2012-03-20 3 views
3

Google 계정 OAuth 2 토큰에 문제가 있습니다. AccountManager에서 요청 getAuthToken (account, SCOPE, options, mContext, getAuthTokenCallback, null)을 요청한 후 계정 정보에 액세스 할 수없는 토큰을 액세스 계정 정보 (숫자 ID, 전자 메일, 사용자 이름)에 대한 토큰이 필요합니다. HTTP 요청 https://www.googleapis.com/plus/v1/people/me의 응답 (헤더 "인증 : OAuth를 ya29.AHES6ZSuMvL3FoxqXfevYevWyEmTPOE1HXW7_Tj6l3UAN-2J7kTs0-I")유효한 Google 계정 Android의 OAuth 2 토큰

{ 
    "error": { 
    "errors": [ 
     { 
     "domain": "usageLimits", 
     "reason": "dailyLimitExceededUnreg", 
     "message": "Daily Limit Exceeded. Please sign up", 
     "extendedHelp": "https://code.google.com/apis/console" 
     } 
    ], 
    "code": 403, 
    "message": "Daily Limit Exceeded. Please sign up" 
    } 
} 

왜이 오류가 hapens? 이전에 두 가지 유형 AuthSub를 공백으로 구분 된 토큰과 함께 작동합니다. (SCOPE_OLD_PERMITIONS) 는 이제

가 어떻게 유효한 토큰을 얻을 수 있습니다 때 java.io.IOException에게 일이 발생하지 &? 토큰을 얻을 수 있습니다

TCGoogleAccountsManager mng = new TCGoogleAccountsManager(this); 
mng.requestAccountOAuthToken(this, acc); 

сlass :

public class TCGoogleAccountsManager { 
private static final String CLIENT_SECRET = ...; 
private static final String CLIENT_ID = ...; 
private static final String SCOPE_CONTACTS_API = "cp"; 
private static final String SCOPE_ANDROID_API = "android"; 
private static final String SCOPE_GOOGPE_PLUS = "oauth2:https://www.googleapis.com/auth/plus.me"; 
private static final String SCOPE_MY_INFO = "oauth2:https://www.googleapis.com/auth/userinfo.email"; 
private static final String SCOPE_OLD_PERMITIONS = "oauth2:https://www-opensocial.googleusercontent.com/api/people/ oauth2:https://www.googleapis.com/auth/userinfo#email"; 
private static final String SCOPE = SCOPE_GOOGPE_PLUS; 
private static final String COM_GOOGLE = "com.google"; 

private AccountManager mManager; 
private OnGetOAuthTokenRequestCompletedListener mTokenRequestListener; 

public TCGoogleAccountsManager(Context ctx) { 
    mManager = AccountManager.get(ctx.getApplicationContext()); 
    mTokenRequestListener = new GoogleTokenListener(
      ctx.getApplicationContext()); 
} 

public int getAccountsNumber() { 
    return mManager.getAccountsByType(COM_GOOGLE).length; 
} 

public Account[] getGoogleAccounts() { 
    return mManager.getAccountsByType(COM_GOOGLE); 
} 


public Account getGoogleAccountByName(String name) { 
    Account foundAcc = null; 
    if (name != null && !name.equals("")) { 
     Account[] googleAccounts = mManager.getAccountsByType(COM_GOOGLE); 
     for (int i = 0; i < googleAccounts.length; i++) { 
      if (name.equals(googleAccounts[i].name)) { 
       foundAcc = googleAccounts[i]; 
       break; 
      } 
     } 
    } 
    return foundAcc; 
} 


public Account getGoogleAccount(int index) { 
    return getGoogleAccounts()[index]; 
} 

public void requestAccountOAuthToken(Activity mContext, Account account) { 
    try { 
     final Bundle options = new Bundle(); 
     options.putString("client_id", CLIENT_ID); 
     options.putString("client_secret", CLIENT_SECRET); 
     mManager.getAuthToken(account, SCOPE, options, mContext, 
       getAuthTokenCallback, null); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 


private AccountManagerCallback<Bundle> getAuthTokenCallback = new AccountManagerCallback<Bundle>() { 
    public void run(AccountManagerFuture<Bundle> future) { 
     try { 
      final Bundle result = future.getResult(); 
      final String accountName = result 
        .getString(AccountManager.KEY_ACCOUNT_NAME); 
      final String authToken = result 
        .getString(AccountManager.KEY_AUTHTOKEN); 
      boolean success = (accountName != null && authToken != null); 
      if (!success) { 
       if (mTokenRequestListener != null) { 
        mTokenRequestListener.onRequestCompleted(false, 
          accountName, authToken); 
       } 
      } else { 
       // refresh token. We need fresh token. 
       mManager.invalidateAuthToken(COM_GOOGLE, authToken); 
       mManager.getAuthToken(getGoogleAccountByName(accountName), 
         SCOPE, false, getAuthTokenCallbackInvalidated, null); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
}; 


private AccountManagerCallback<Bundle> getAuthTokenCallbackInvalidated = new AccountManagerCallback<Bundle>() { 
    public void run(AccountManagerFuture<Bundle> future) { 
     try { 
      final Bundle result = future.getResult(); 
      final String accountName = result 
        .getString(AccountManager.KEY_ACCOUNT_NAME); 
      final String authToken = result 
        .getString(AccountManager.KEY_AUTHTOKEN); 
      boolean success = (accountName != null && authToken != null); 
      if (mTokenRequestListener != null) 
       mTokenRequestListener.onRequestCompleted(success, 
         accountName, authToken); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
}; 
} 

감사합니다 감사합니다

이 GET 토큰에 대한 요청입니다.

답변