Я обнаружил, что могу аутентифицироваться через OAuth 2.0, когда мой URI перенаправления имеет вид «urn: ietf: wg: oauth: 2.0: oob», НО пользователь вынужден скопировать код, затем вернуться к одному действию и вставить это в поле. Я хочу, чтобы опыт был более элегантным. Когда URI перенаправления имеет вид "http://localhost", (даже если возвращен код доступа), я не могу обменять его на токен доступа к API. Вот мой код обмена:
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(
0);
nameValuePairs.add(new BasicNameValuePair("client_id",
OAuth2ClientCredentialsMark1.CLIENT_ID));
nameValuePairs.add(new BasicNameValuePair("client_secret",
OAuth2ClientCredentialsMark1.CLIENT_SECRET));
nameValuePairs.add(new BasicNameValuePair("code", accessCode));
nameValuePairs.add(new BasicNameValuePair("grant_type",
"authorization_code"));
nameValuePairs.add(new BasicNameValuePair("redirect_uri",
OAuth2ClientCredentialsMark1.REDIRECT_URI));
//"http://localhost"
String url = "https://accounts.google.com/o/oauth2/token";
//url += URLEncodedUtils.format(nameValuePairs, "utf-8");
Log.d("print", url);
HttpPost hPost = new HttpPost(
url);
hPost.setHeader("content-type", "application/x-www-form-urlencoded");
hPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
Этот код всегда возвращает {"error": "invalid_grant"} Что дает?
Мое приложение основано на образце @ https://github.com/ddewaele/LatitudeOAuth2Sample, и я следую учебному пособию @ http://code.google.com/apis/accounts/docs/OAuth2InstalledApp.html