问题
I've got working code that uses the gdata to retrieve feeds from my user's Google Finance portfolios, but I had to use setUserCredentials(username,password). What I'd like to do is avoid asking the user for their username/password since the Android device already has access to their Google account.
I believe I should be able to do this with setUserToken(String), but I can't figure out how to get the appropriate token from Android. I've tried AccountManager.get(context).blockingGetAuthToken() but that's either not the correct call or I'm passing it the wrong arguments.
Has anyone gotten gdata working with the user's existing Google credentials on the phone?
Thanks in advance, Lenny
回答1:
AccountManager.blockingGetAuthToken()
is the correct call. Pass it an Account
, and an String authTokenType
-- In your case, "android"
or "finance"
, your pick (the values of the strings it's looking for are not clearly documented).
The easy way to obtain an account is to do all your client comms as part of the onPerformSync()
call on a class that implmenents a Sync Adapter. You can find a number of tutorials on getting a SyncAdapter set up. As part of getting your SyncAdapter going, you'll end up with a mess of permissions, probably like the following or so:
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
<uses-permission android:name="android.permission.READ_SYNC_STATS" />
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
<uses-permission android:name="com.google.android.googleapps.permission.GOOGLE_AUTH" />
<uses-permission android:name="com.google.android.googleapps.permission.GOOGLE_AUTH.finance" />
Those last two, again, sort of tricksy, dug them out of who knows where.
来源:https://stackoverflow.com/questions/2025985/com-google-gdata-client-googleservice-setusertokenandroid-accounts-accountmanag