2013-05-30 5 views
0

Я работаю над приложением, которое должно выходить и захватывать данные аналитики из учетной записи пользователя YouTube. Я могу получить код авторизации от Google, используя приведенный ниже URL-адрес в веб-просмотре в своем приложении.Использование OAuth2 для доступа к YouTube api в Android

https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/yt-analytics.readonly&approval_prompt=force&redirect_uri=urn:ietf:wg:oauth:2.0:oob&response_type=code&client_id=762546229188.apps.googleusercontent.com&access_type=offline 

Я извлекаю код из заголовка страницы, а затем прерву успех, используя метод подстроки Java. Однако, когда я иду, чтобы получить маркер доступа будет возвращать только "error" : "invalid_grant"

 HttpClient client = new DefaultHttpClient(); //new HTTP client 
     HttpPost post = new HttpPost("https://accounts.google.com/o/oauth2/token"); //where to post to 
     List<NameValuePair> pairs = new ArrayList<NameValuePair>(); //construct the values to hand to Google 
     Log.v("KUZMA", arg0[0]); //personal logcat message 
     pairs.add(new BasicNameValuePair("code", arg0[0])); //in arg0[0] lives the auth code 
     pairs.add(new BasicNameValuePair("client_id", CLIENT_ID)); //I store the Client_id as a static variable at the beginning of my class 
     //Log.v("Kuzma", CLIENT_ID); 
     //pairs.add(new BasicNameValuePair("client_secret", "*******")); 
     pairs.add(new BasicNameValuePair("redirect_uri", "http://localhost")); 
     pairs.add(new BasicNameValuePair("grant_type", "authorization_code")); //Leave this line how it is 
     String responseBody = null; 
     try { 
      post.setEntity(new UrlEncodedFormEntity(pairs)); 
      org.apache.http.HttpResponse response = client.execute(post); 
      responseBody = EntityUtils.toString(response.getEntity()); 
     } catch (UnsupportedEncodingException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     Log.v("KUZMA", responseBody); // That just logs it into logCat 
     //output.setText("something happened?"); 
     return null; 

Так что я думаю, что моя самая большая проблема в том, что я не секрет клиента, но он не предоставил мне Google для установленное приложение. Есть ли способ обойти это? Я также играл в Google Play Services и не могу получить эту работу, но если вы знаете, как это работает, это тоже здорово!

ответ

0

Хотя вы этого не говорите, это похоже на приложение для Android. Поэтому вам нужно использовать GoogleAuthUtil, чтобы дать вам токен для области; начинайте здесь: http://developer.android.com/google/play-services/auth.html

+0

Да, я должен был вернуться и сказал, что понял, но 5 часов свернулось, и я закончил :) Я использую GoogleAuthUtil вместе с AccountPicker для создания и использования токенов. Благодарю. Кроме того, я упоминал Android в названии и в тегах. Я думал, что это ясно, но еще раз спасибо. – jskuzma

Смежные вопросы