Удостоверяване на моя Android клиент за свързване към крайна точка

Разработвам приложение за Android за компания за онлайн вестници. Компанията вече разработи и хоства своите API на Google App Engine с поддръжка на OAuth 2.0.
Така че аз трябва да разработя приложение за Android, което комуникира с техния разгърнат API на бекенда с поддръжка на OAuth 2.0 и да извлича отговора на съдържанието от присвоения им Google API Изследовател.

така че според документацията на облачните крайни точки на 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 Developer Console казва

„Uоторизиран достъп“, което означава, че повикването за удостоверяване не работи...

По-долу е моят код за отваряне на 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 с крайните точки на google api   -  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
@Isaac Хубаво! Сега ще имате много по-добър шанс да получите отговор... +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) С тези библиотеки (буркани), включени във вашия проект, всичко, което трябва да направите, е да извикате какъвто и да е метод, от който се нуждаете (както е обяснено тук) и библиотеките ще включват всички необходими заглавки за оторизация и т.н. въз основа на настройките на приложението ви. Не е нужно да се тревожите за нищо друго относно OAuth.

СЪВЕТ: Уверете се, че сте включили всички SHA подписи за отстраняване на грешки на вашия програмист в упълномощаването на конзолата на Google. Ако не го направите, ще можете да се обаждате на крайните точки само от вашето приложение "prodcution".

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