Я пишу приложение для Android (версия ICS). который загружает данные на Google Диск. Приложение использует oauth2 для получения токена доступа.Приложение для Android: получить токен доступа для API Google Диска
Первый шаг: приобрести токен авторизации.
String AUTH_TOKEN_TYPE = "oauth2:https://www.googleapis.com/auth/drive";
// Step 1
accountManager.getAuthToken(
account, // Account retrieved using getAccountsByType("com.google")
AUTH_TOKEN_TYPE, // Auth Token Type
options, // Authenticator-specific options
this, // Your activity
new OnTokenAcquired(), // Callback called when a token is successfully acquired
new Handler(new OnAuthTokenError())); // Callback called if an error occurs
}
private class OnTokenAcquired implements AccountManagerCallback<Bundle> {
@Override
public void run(AccountManagerFuture<Bundle> result) {
// Get the result of the operation from the AccountManagerFuture.
Bundle bundle;
try {
bundle = result.getResult();
authToken = bundle.getString(AccountManager.KEY_AUTHTOKEN);
Log.d(TAG,"authToken:" + authToken);
exchangeToken access = (exchangeToken) new exchangeToken().execute();
} catch (OperationCanceledException e) {
e.printStackTrace();
} catch (AuthenticatorException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Успех. Получается токен авторизации.
Шаг 2: токен авторизации Exchange для токена доступа.
private class exchangeToken extends AsyncTask<String, Void, Void> {
@Override
protected Void doInBackground(String... params) {
HttpTransport transport = new NetHttpTransport();
JsonFactory jsonFactory = new GsonFactory();
String CLIENT_ID = "999999999999.apps.googleusercontent.com";
String CLIENT_SECRET = "axXXXXXXXXXXXXXXX7";
try { // Step 2: Exchange for an access and refresh token
GoogleTokenResponse authResponse = new GoogleAuthorizationCodeTokenRequest(transport, jsonFactory, CLIENT_ID, CLIENT_SECRET, authToken, CALLBACK_URL).execute();
accessToken = authResponse.getAccessToken();
Log.d("Get Access","Token:" + accessToken);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
Ошибка. LogCat показывает следующее: com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request
{
"error":"unauthorized_client"
}
Я был в состоянии получить доступ к «Google Drive «на моем Android-планшете с помощью приложения« Диск ». поэтому мой адрес электронной почты действителен. Может быть, AUTH_TOKEN_TYPE неверен, но SDK Google неясно, каково это должно быть. Что мне не хватает?
Предполагая, что accountmanager.getAuthToken возвращает accessToken, я решил протестировать пакет com.google.api.services.drive.Drive со следующим кодом: – user1417943
@Nivco plz проверить этот квест http://stackoverflow.com/q/18760929/2632749 – NextStep