2012-04-22 2 views
1

Мне нужно получить токен аутентификации OAuth2, чтобы передать его на сервер, чтобы он мог получать список каналов Google Reader для пользователя. Сервер .NET. У меня нет доступа к нему или к его коду, но, скорее всего, он использует unofficial Reader APIAndroid - не удалось использовать токен доступа OAuth для извлечения каналов Google Reader

Я смог использовать диспетчер Android для получения действительного токена для этой цели с помощью следующего кода (обратите внимание, что authTokenType = «читатель»)

Account account = accounts[0]; 
manager.getAuthToken(account, "reader", null, this, new AccountManagerCallback<Bundle>() { 
    public void run(AccountManagerFuture<Bundle> future) { 
     try { 
      // If the user has authorized your application to use the tasks API 
      // a token is available. 
      String token = future.getResult().getString(AccountManager.KEY_AUTHTOKEN); 
      // Now you can send the token to API... 
      cacheManager.putString(GOOGLE_AUTH, token); 
      GoogleReaderManager.startAddFeedActivity(AddGoogleReaderSourcesActivity.this); 
      finish(); 
     } catch (OperationCanceledException e) { 
      Log.e(TAG, "User cancelled", e); 
      finish(); 
     } catch (Exception e) { 
      Log.e(TAG, "Failed to obtain Google reader API_KEY", e); 
     } 
    } 
}, null); 

код выше работает отлично, когда я посылаю маркер на стороне сервера .Net приложения: приложение может получить список чтения каналов.

Проблема в том, что это работает только для устройств Google внутри. На Nook у меня нет такой удачи, так как нет возможности найти аккаунт Google для менеджера аккаунта. Поэтому я пытаюсь использовать протокол OAuth 2 как

Он отлично работает с получением токена: пользователь одобряет приложение с мобильной страницы, которое возвращает токен кода, который затем переносит мобильное приложение для токена Auth. Однако этот токен не будет работать с процессом сервера. У меня есть ощущение, что, возможно, я использую неправильный объем в этом URL:

https://accounts.google.com/o/oauth2/auth?response_type=code&scope=https://www.google.com/reader/api/0/subscription/list&redirect_uri=http://localhost&approval_prompt=force&state=/ok&client_id= {apps.client.id}

Прицелы, что я стараюсь в различных комбинациях:

  1. https://www.google.com/reader/api
  2. https://www.google.com/reader/api/0
  3. https://www.google.com/reader/api/0/subscription/list
  4. https://www.google.com/reader/api+https://www.google.com/reader/atom

Вот пример JSON, который возвращается из получить маркер POST

{"expires_in":3600, 
    "token_type":"Bearer", 
    "access_token":"ya29.AHES6ZSEvuUb6Bvd2DNoMnnN_UnfxirZmf_RQjn7LptFLfI", 
    "refresh_token":"1\/bUwa5MyOtP6VyWqaIEKgfPh08LNdawJ5Qxz6-qZrHg0"} 

Am I портя область или тип маркера? Не знаете, как изменить тип токена. Любые другие идеи?

P.S. Страница входа в учетную запись Google спрашивает: Manage your data in Google Reader, поэтому я подозреваю, что сфера не соответствует действительности

+0

Область действия должна быть «https://www.google.com/reader/api/», как упомянуто здесь. Устраните посредника: попробуйте напрямую обратиться к API, и когда вы его заработаете, используйте ваш сервер .NET. Аутентификация читателя: http://code.google.com/p/google-reader-api/wiki/Authentication –

+0

Это была первая область, которую я пробовал, увы, не пошел. – Bostone

ответ

0

Я получил ее для работы https://www.google.com/reader/api/0/subscription/list. Так подумал о том, чтобы поделиться с тобой.

У меня есть действительный access_token:

Это то, что я пытался решить ее (частично):

  • Google предоставляет OAuth 2.o Playgound; где они фактически имитируют все аспекты OAuth 2.0, а также окончательный вызов API для извлечения данных. Я нашел это очень полезным, так как он ясно показывает, что отправляется по запросу. Вот URL: https://developers.google.com/oauthplayground/
  • Используя это, я отлажен мой апи вызов ниже, и она работает :)

    public static String getReaderContent(String accessToken){ 
        String url = "https://www.google.com/reader/api/0/subscription/list" ; 
    
        HttpClient client = new HttpClient(); 
    
        GetMethod method = new GetMethod(url); 
        String response=""; 
        method.setRequestHeader("Authorization", "OAuth "+accessToken); 
        try { 
        int statusCode = client.executeMethod(method); 
        String response= method.getResponseBodyAsString(); 
    
        System.out.println("response " + responseStr); 
        } catch (HttpException e) { 
        e.printStackTrace(); 
        } catch (IOException e) { 
        e.printStackTrace(); 
        } 
    return response; 
    } 
    

Так что это работает должным образом в порядке для получения списка подписки; но не смогли заставить его работать для читателя api, о котором вы упоминали в своем вопросе.

Сообщите мне, если вы получили доступ к API-интерфейсу Google Reader.

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

  • Нет связанных вопросов^_^