2012-07-07 45 views
0

嗯,我需要授權谷歌日曆的一個用戶訪問一個空,首款谷歌標識當我使用的Android getAuthToken返回令牌

blockingGetAuthToken 

,並獲得一個令牌正常工作,我通常登錄此令牌。 因此,當我試圖使用其他帳戶時,我得到了一個空令牌。 我搜索了很多,結果發現,使用getAuthToken是首選,因爲它使用從活動上下文調用它..然後我轉換的全過程,用它

private static final String AUTH_TOKEN_TYPE = "oauth2:https://www.googleapis.com/auth/calendar"; 

public static String authorize(AndroidtestActivity parent, Account account) { 
    AccountManager accountManager = AccountManager.get(parent); 
    Bundle options= new Bundle(); 

    Log.d("MyAPP", "Get Authorization"); 
    try { 
     AccountManagerFuture<Bundle> acc=accountManager.getAuthToken (account, AUTH_TOKEN_TYPE, options, true, null, null); 
     Bundle authTokenBundle = acc.getResult(); 
     String authToken = authTokenBundle.get(AccountManager.KEY_AUTHTOKEN).toString(); 

     Log.d("MyAPP","Token= "+authToken); 
     return authToken; 


    } catch (Exception ex) { 
     Logger.getLogger(GoogleAuthorize.class.getName()).log(Level.SEVERE, 
       null, ex); 
    } 
    return null; 
} 

}

,但仍沒有賬戶能得到有效的標記,他們都得到一個空一個

然後我看到這個答案https://stackoverflow.com/a/2021337/1280902,隨後用invalidateAuthToken

private static final String AUTH_TOKEN_TYPE = "oauth2:https://www.googleapis.com/auth/calendar"; 

public static String authorize(AndroidtestActivity parent, Account account) { 
    AccountManager accountManager = AccountManager.get(parent); 
    Bundle options= new Bundle(); 

    Log.d("MyAPP", "Get Authorization"); 
    try { 
     AccountManagerFuture<Bundle> acc=accountManager.getAuthToken (account, AUTH_TOKEN_TYPE, options, true, null, null); 
     Bundle authTokenBundle = acc.getResult(); 
     String authToken = authTokenBundle.get(AccountManager.KEY_AUTHTOKEN).toString(); 
     accountManager.invalidateAuthToken("com.google",authToken); 
     acc=accountManager.getAuthToken (account, AUTH_TOKEN_TYPE, options, true, null, null); 
     authTokenBundle = acc.getResult(); 
     authToken = authTokenBundle.get(AccountManager.KEY_AUTHTOKEN).toString(); 

     Log.d("MyAPP","Token= "+authToken); 
     return authToken; 


    } catch (Exception ex) { 
     Logger.getLogger(GoogleAuthorize.class.getName()).log(Level.SEVERE, 
       null, ex); 
    } 
    return null; 
} 

}

,但我對我使用每個帳戶同樣的問題,即使是使用在年初blockingGetAuthToken

所以我失去的東西的工作嗎?

+1

只是一個小提示它工作正常:您可以使用字符串「管理您的日曆」爲AUTH_TOKEN_TYPE。這將出現在授予訪問權限的用戶確認屏幕上,而不是該隱蔽的URL。我花了一段時間才弄明白這一點。文檔真的很少。 – tiguchi 2012-07-07 16:44:49

+0

哦謝謝..我不得不搜索那些字符串而不是URL,但谷歌沒有更新他們的文檔(像往常一樣) 謝謝@NobuGames,感謝你的幫助 – Tar3k 2012-07-07 16:46:26

回答

2

好了當我使用

getAuthToken (Account account, String authTokenType, Bundle options, Activity activity, AccountManagerCallback<Bundle> callback, Handler handler) 

活動參數解決了這個問題..

+0

同樣的問題解決了添加活動 – venergiac 2013-10-25 10:13:11