我正在尝试将Google Data API用于Android 2.1上已安装的应用程序。如果用户已在设备上配置了帐户,我不希望用户必须输入凭据。因此,我使用帐户类型为“com.google”的AccountManager。
但是去哪里? Google没有关于如何进行Google身份验证(authTokenType等)的示例。有一个项目试图以一般的方式(http://code.google.com/p/google-authenticator-for-android),但没有任何成功。
难道这么难吗?这实际上是为了阻止像谷歌阅读器客户端这样的应用程序,这些应用程序必须要求用户提供他们的Google凭据(希望没有人给他们)。
任何指针/建议都表示赞赏。
答案 0 :(得分:4)
是的,这是可能的。一旦掌握了Google帐户(如您所述),您只需要从AccountManager请求GData服务的身份验证令牌。
如果Android设备已经有一个身份验证令牌(对于您尝试访问的特定GData服务),它将返回给您。如果没有,AccountManager将请求一个并将其返回给您。无论哪种方式,您都不需要担心这一点,因为AccountManager会处理它。
在以下示例中,我使用的是Google Spreadsheets API:
ArrayList<Account> googleAccounts = new ArrayList<Account>();
// Get all accounts
Account[] accounts = accountManager.getAccounts();
for(Account account : accounts) {
// Filter out the Google accounts
if(account.type.compareToIgnoreCase("com.google")) {
googleAccounts.add(account);
}
}
AccountManager accountManager = AccountManager.get(activity);
// Just for the example, I am using the first google account returned.
Account account = googleAccounts.get(0);
// "wise" = Google Spreadheets
AccountManagerFuture<Bundle> amf = accountManager.getAuthToken(account, "wise", null, activity, null, null);
try {
Bundle authTokenBundle = amf.getResult();
String authToken = authTokenBundle.getString(AccountManager.KEY_AUTHTOKEN);
// do something with the token
InputStream response = sgc.getFeedAsStream(feedUrl, authToken, null, "2.1");
}
我希望这会有所帮助。
答案 1 :(得分:1)
请查看google data api中的sample code。身份验证后要做的重要事情是调用GoogleHeaders.setGoogleLogin(String)。
答案 2 :(得分:1)
确保在身份验证后致电GoogleHeaders.setGoogleLogin
。然后,如有必要,您可以查看此sample code以获得进一步的帮助。