1

我在我的應用程序中使用Google Play服務,但最近我發現了一些奇怪的東西,我不知道如何處理它。Google Play服務 - 強制顯示許可窗口(授權訪問)

如果您使用的是Google Play服務,則您知道在第一時間生成令牌之前,您需要爲您的應用授予權限(授予訪問權限)以使用選定的API。

Google is asking for permission and showing this window (sorry for non-english screenshot)

之後,你的應用程序將在這裏看到:https://accounts.google.com/IssuedAuthSubTokens

Your app should be now on the list

而且我的應用程序是存在的。一切正常。我想從頭開始測試它,我撤消了對我的應用程序的訪問,並且...它停止工作。我無法強制Google Play服務在撤銷對我的應用的訪問權後顯示此窗口。我沒有Google API權限,但Google應該向我顯示權限窗口以重新添加它。

有沒有辦法再次顯示這個窗口?

我正在使用GoogleAccountCredential.usingOAuth2函數獲取用戶標記和數據(所有異常都像UserRecoverableAuthIOException,startActivityForResult(e.getIntent(),REQUEST_AUTHORIZATION)...)。

據我所知,GoogleAccountCredential使用Google Play服務來管理OAuth2流程,您需要提供的只是用戶名。撤銷訪問後,它不起作用。

回答

3

使用谷歌播放服務:

http://developer.android.com/reference/com/google/android/gms/auth/GoogleAuthUtil.html

添加https://www.googleapis.com/auth/userinfo.profile到你的範圍。

例子:

String scope="oauth2:https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile" 

final String token = GoogleAuthUtil.getToken(context, "[email protected]", scope); 

或「強力」

Intent res = new Intent(); 
res.addCategory("account:[email protected]"); 
res.addCategory("scope:oauth2:https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile"); 
res.putExtra("service", "oauth2:https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile"); 
Bundle extra= new Bundle(); 
extra.putString("androidPackageName","com.your.package"); 
res.putExtra("callerExtras",extra); 
res.putExtra("androidPackageName","com.your.package"); 
res.putExtra("authAccount","[email protected]"); 

String mPackage = "com.google.android.gms"; 
String mClass = "com.google.android.gms.auth.TokenActivity"; 
res.setComponent(new ComponentName(mPackage,mClass)); 
startActivityForResult(res,100); 

現在,當你撤銷訪問這裏https://accounts.google.com/IssuedAuthSubTokens應用程序再次顯示了在設備的許可窗口。

+0

我使用GoogleAccountCredential.usingOAuth2(...)獲取令牌。這是您應該如何使用Google Play服務(推薦)來完成的。但是線索是。它正在工作,但有時你需要等很長時間才能看到這個對話框。在此期間,您收到令牌錯誤。 – adek