1

Я создал свою клиентскую библиотеку из своих конечных точек, а также передал соответствующие учетные данные (идентификатор клиента на 100% правильный) для моего аутентифицированного вызова конечным точкам.не удалось подключиться к моим конечным точкам google с моим объектом-сервисом

Но я все еще получаю эту ошибку, когда я запускаю коды:

com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAuthIOException 
      at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential$RequestHandler.intercept(GoogleAccountCredential.java:286) 
      at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:859) 
      at com.projects.malaysiakini.Home$ContentApi.doInBackground(Home.java:165) 
      at com.projects.malaysiakini.Home$ContentApi.doInBackground(Home.java:141) 
      at android.os.AsyncTask$2.call(AsyncTask.java:288) 
      at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
      at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
      at java.lang.Thread.run(Thread.java:841) 
    Caused by: com.google.android.gms.auth.GoogleAuthException: Unknown 
      at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source) 
      at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source) 
      at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential.getToken(GoogleAccountCredential.java:255) 
      at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential$RequestHandler.intercept(GoogleAccountCredential.java:279) 
            at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:859) 
            at com.projects.malaysiakini.Home$ContentApi.doInBackground(Home.java:165) 
            at com.projects.malaysiakini.Home$ContentApi.doInBackground(Home.java:141) 
            at android.os.AsyncTask$2.call(AsyncTask.java:288) 
            at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
            at java.lang.Thread.run(Thread.java:841) 

Это мой код ниже:

private class ContentApi extends AsyncTask<Void,Void,String>{ 

     @Override 
     protected String doInBackground(Void... params) { 
      String response = null; 


      try { 
       settings = getActivity().getSharedPreferences("MApi", Context.MODE_PRIVATE); 
       credential = GoogleAccountCredential.usingAudience(getActivity(), CLIENT_ID); 
       setSelectedAccountName(settings.getString(PREF_ACCOUNT_NAME, null)); 

       Core.Builder builder = new Core.Builder(AndroidHttp.newCompatibleTransport(), new AndroidJsonFactory(), credential); 
       builder.setApplicationName(getActivity().getPackageName()); 

       service = builder.build(); 



       if (credential.getSelectedAccountName() != null) { 
        // Already signed in, begin app! 

       response = service.info().execute().getLang(); 
       }//end if 
       else { 
        chooseAccount(); 
       } 

       }//end try 
       catch(IOException ex){ 
        Log.d("MkiniCore", ex.getMessage(), ex); 
       }//end catch 



      return response; 
     }//end doInBackground 

     @Override 
     protected void onPostExecute(String s) { 
      textView.setText(s); 
     } 
    } 

Я просто отредактировал код ответы ниже, но я все еще получаю это ошибки

Это код сборщика счета:

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     switch (requestCode) { 
      case REQUEST_ACCOUNT_PICKER: 
       if (data != null && data.getExtras() != null) { 
        String accountName = 
          data.getExtras().getString(
            AccountManager.KEY_ACCOUNT_NAME); 
        if (accountName != null) { 
         setSelectedAccountName(accountName); 
         SharedPreferences.Editor editor = settings.edit(); 
         editor.putString(PREF_ACCOUNT_NAME, accountName); 
         editor.commit(); 
         // User is authorized. 
        } 
       } 
       break; 
     } 
    } 

это метод setSelectedAccountName

private void setSelectedAccountName(String accountName){ 
     SharedPreferences.Editor editor = settings.edit(); 
     editor.putString(PREF_ACCOUNT_NAME, accountName); 
     editor.commit(); 
     credential.setSelectedAccountName(accountName); 
     this.accountName = accountName; 
    }//end setSelectedAccountName 

ответ

3

Вы должны установить имя пакета приложения в построителе перед вызовом .build():

builder.setApplicationName(getActivity().getPackageName()); 

Кроме того, если это аутентифицированный вызов, вы имели для запуска пользователя через сборщик учетных записей, чтобы выбрать учетную запись Google, а также установить его в учетных документах:

Кроме того, это не очевидно из предоставленного кода, что CLIENT_ID для аудитории (охват), поэтому убедитесь, что он находится в формате:

static final String CLIENT_ID = "server:client_id:" + YOUR_WEB_APP_CLIENT_ID; 

Поскольку вы используете генерируемую библиотеку облака конечной точки, вы не имеете для установки корневого URL-адреса или использования необработанного HTTP-запроса/ответа. Созданная конечной точкой библиотека уже выполняет парсинг JSON для подготовки и HTTP-ответа HTTP-ответа. Не видя ваше облако API, я предполагаю, что здесь, что ваш метод облако для «категории» возвращает что смоделированный в Category который имеет поле члена detail, который можно получить с помощью метода получения getDetail():

builder.setApplicationName(getActivity().getPackageName()); 
credential.setSelectedAccountName(accountName); 
service = builder.build(); 
Core.Info.Category endpoint = service.info().category("en"); 
String category = endpoint.execute().getDetail(); 
+0

Я просто сделал это. и он по-прежнему дает мне ту же ошибку – Isaac

+0

ОК, я понял, что есть еще несколько вещей, на которые нужно следить, см. правки, которые я только что сделал для ответа. –

+0

Я скорректировал код, но не получаю еще одну ошибку .. проверьте мой вопрос .. Я отредактировал свои вопросы соответственно – Isaac

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