0

Я разрабатываю приложение для Android для интернет-газеты. Компания уже разработала и разместила свои API-интерфейсы в Google App Engine с поддержкой OAuth 2.0.
Итак, я должен разработать приложение для Android, которое связывается с их развернутым API-интерфейсом с поддержкой OAuth 2.0 и извлекает содержимое ответа от своего назначенного API-интерфейса Google API.Аутентификация моего клиента android для подключения к конечной точке

так по облако конечных точек документации Google для андроид клиентов (например, мое приложение) пытается сделать проверку подлинности вызовов на конечные точки с поддержкой OAuth 2.0, я был направлен на:

  1. Настройка моего Android клиента (мой приложение для Android), чтобы предоставить учетные данные объекту службы
  2. выборщика учетных записей для поддержки выбора пользователем учетных записей.

Я следовал инструкциям на Google Cloud Endpoint сайте, но я не понимаю коды образцов, которые были использованы для объяснения, так что я попытался придумать с этим:

class EndpointsAsyncTask extends AsyncTask<Void, Void, Void>{ 

     @Override 
     protected Void doInBackground(Void... params) { 

      HttpTransport httpTransport = new NetHttpTransport(); 
      JsonFactory jsonFactory = new AndroidJsonFactory(); 


      try { 
       GoogleCredential credential = new GoogleCredential.Builder() 
         .setTransport(httpTransport) 
         .setJsonFactory(jsonFactory) 
         .setServiceAccountId(CLIENT_EMAIL) 
         .setServiceAccountScopes(Collections.singleton("https://www.googleapis.com/auth/userinfo.email")) 
         .setServiceAccountPrivateKeyFromP12File(new File("file.p12")) 
         .build(); 

      /*so now what do I do with the credential object 
      and how do I set the root URL (https://project-id-endpoints.appspot.com/_ah/api) 
      that the android client(this android app) 
     will connect to in the backend API call 
     */ 

      } 
      catch(GeneralSecurityException gse){ 
       gse.printStackTrace(); 
      } 
      catch(IOException ioe){ 

      } 


      return null; 
     } 

     @Override 
     protected void onPostExecute(Void aVoid) { 
      super.onPostExecute(aVoid); 

     } 
    } 

всякий раз, когда я запускаю коды, отчет журнала на разработчика Google Консоль говорит

«Uauthorised доступ» означает вызов аутентификации не работает ...

Ниже мой код для открытия соединения GET URL одному из содержания службы API:

public String open() throws IOException{ 

     InputStream inputStream = null; 
     int len = 500; 

     try { 
      URL url = new URL("https://project-name-api-endpoints.appspot.com/_ah/api/core/v5.1.1/info/category/en"); 

      URLConnection urlConnection = url.openConnection(); 

      inputStream = urlConnection.getInputStream(); 

      String content = readIt(inputStream, len); 

      return content; 
     }//end try 

     finally { 
      if(inputStream != null) 
      { 
       inputStream.close(); 
      } 
     } 

    } 

У меня есть вопрос будет:

Что делать с учетными данными объекта и как я установите URL-адрес корня (https://project-id-endpoints.appspot.com/_ah/api), к которому подключается клиент android-приложения (это приложение для Android) в интерфейсе API-интерфейса

+0

моя проблема в том, что .. Я не понимаю документацию Google, по которой я поделился ссылкой ...и мне нужна помощь в подключении моего приложения для Android к конечным точкам google api – Isaac

+0

Похоже, вы хотите взять свой существующий проект App Engine и превратить его в конечную точку Cloud, к которой подключается приложение для Android, верно? –

+0

"* Я не понимаю документацию Google, в которой я поделился ссылкой *. Мы не можем объяснить, как работает материал на сайте Q & A. Вы должны продолжать читать, пока не поймете это, спросите на форуме (где обсуждения более приветствуются) или поставите здесь более четкий вопрос о конкретной части кода, с которым вы боретесь. – James

ответ

1

Проблема заключается в том, что вы не используете эти учетные данные, которые вы настраиваете при вызове конечной точки. Это соединение, которое вы делаете, полностью не знает обо всех настройках OAuth и замечательных вещах, которые вы получаете от конечных точек + Android.

В идеале, что вам нужно сделать, это:

1) Создание библиотеки клиента для Android от конечных точек (как объяснено here). Не делайте «ручные» (через URLConenction) вызовы на конечные точки, хотя технически это возможно, это абсолютно не рекомендуется.

2) С этими библиотеками (банками), включенными в ваш проект, все, что вам нужно сделать, это вызов любого метода, который вам нужен (как объяснено here), а библиотеки будут включать все необходимые заголовки полномочий и т. Д. На основе настроек вашего приложения. Вам не нужно беспокоиться ни о чем другом, касающемся OAuth.

TIP: Обязательно включите все отладочные подписи своего разработчика в авторизацию на консоли Google. Если вы этого не сделаете, вы сможете только вызывать конечные точки из своего приложения «prodcution».

+0

хорошо, поэтому клиентская библиотека была сгенерирована. Но согласно этой [link] (https://cloud.google.com/appengine/docs/java/endpoints/consume_android), мне все еще нужно добавить модуль конечной точки шаблона в мой проект или как добавить эти клиентские библиотеки к моему проекту .. потому что мои клиентские библиотеки находятся в формате .zip (API-интерфейс Backend был разработан с использованием Python). – Isaac

+0

Я всегда использовал Java для бэкэнд (и получаю файл с баночками прямо вверх), но быстрое исследование показывает, что вы должны разархивируйте этот файл и импортируйте содержимое lib в Android Studio. – jirungaray

+0

в папке без распаковки нет lib ... обратитесь к этому [link] (http://stackoverflow.com/questions/29307553/how-to-build-api-client-library-using-gradle-for- my-android-app) для подробного вопроса о моей проблеме. – Isaac

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