Аутентификация моего клиента Android для подключения к конечной точке

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

поэтому, согласно документации по конечным точкам облака Google для клиентов Android (например, моего приложения), пытающихся выполнить аутентифицированные вызовы на конечные точки с поддержкой 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 говорит

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

Ниже приведен мой код для открытия соединения 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


comment
моя проблема в том, что ... я не понимаю документацию Google, на которую я поделился ссылкой ... и мне нужна помощь в подключении моего приложения для Android к конечным точкам API Google   -  person Isaac    schedule 23.03.2015
comment
Похоже, вы хотите взять свой существующий проект App Engine и превратить его в облачную конечную точку, к которой подключается приложение Android, верно?   -  person 1.618    schedule 23.03.2015
comment
Я не понимаю документацию Google, на которую я поделился ссылкой. Мы не можем объяснить, как все работает на сайте вопросов и ответов. Вам нужно продолжать читать, пока вы не поймете это, спросите на форуме (где обсуждения более приветствуются) или задайте здесь более четкий вопрос о конкретной части кода, с которой вы боретесь.   -  person James    schedule 23.03.2015
comment
Я полностью переформулировал свои вопросы, надеясь на лучшее понимание и ответ... спасибо... @rene   -  person Isaac    schedule 24.03.2015
comment
@LynnCrumbling я уже заново структурировал свой вопрос... пожалуйста, проверьте еще раз.. спасибо   -  person Isaac    schedule 24.03.2015
comment
@Исаак Найс! Теперь у вас будет гораздо больше шансов получить ответ... +1   -  person Lynn Crumbling    schedule 24.03.2015
comment
@ 1.618 проект движка приложения уже является облачной конечной точкой ... так что да, я хочу, чтобы мое приложение для Android подключалось к нему ...   -  person Isaac    schedule 26.03.2015


Ответы (1)


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

В идеале вам нужно сделать следующее:

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

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

СОВЕТ. Убедитесь, что все отладочные подписи SHA вашего разработчика включены в авторизацию в консоли Google. Если вы этого не сделаете, вы сможете вызывать конечные точки только из своего «производственного» приложения.

person jirungaray    schedule 24.03.2015
comment
Итак, клиентская библиотека создана. Но, согласно этой ссылке, мне все равно нужно добавить шаблон модуль конечной точки в мой проект или как мне добавить эти клиентские библиотеки в мой проект.. потому что мои клиентские библиотеки имеют формат .zip (Backend API был разработан с использованием Python) - person Isaac; 27.03.2015
comment
Я всегда использовал Java для серверной части (и сразу же получал файл jar), но быстрое исследование показывает, что вы должны разархивировать этот файл и импортировать содержащуюся в нем библиотеку в Android Studio. - person jirungaray; 27.03.2015
comment
в разархивированной папке нет библиотеки... обратитесь к этому ссылка для подробного вопроса о моей проблеме.. - person Isaac; 27.03.2015