2015-04-14 3 views
0

Я прочитал всю эту статью для аутентификации с использованием OAuth2.0. Но я не нашел подходящего метода для этого в приложении для Android. Пожалуйста, предложите метод получения маркера доступа, чтобы я мог создать объект службы Gmail и получить доступ к почтовому ящику или любому другому методу.API Gmail: аутентификация с использованием получения токена

Это пример, приведенный им в этом link:

GoogleCredential credential = new GoogleCredential().setAccessToken(accessToken); 
Plus plus = new Plus.builder(new NetHttpTransport(), JacksonFactory.getDefaultInstance(), credential) 
    .setApplicationName("Google-PlusSample/1.0") 
    .build(); 

ответ

2

Вызвать метод ниже, чтобы получить токен и учетную запись google, используемую на мобильных устройствах. Этот метод сначала извлекает настройку учетной записи google на вашем мобильном устройстве, а затем извлекает токен. Вы можете сохранить токены и имя учетной записи, используя настройки для последующего использования, чтобы вам не приходилось каждый раз извлекать токен.

private void chooseAccount() { 
     Intent intent = AccountPicker.newChooseAccountIntent(null, null, 
       new String[]{"com.google"}, false, null, null, null, null); 
     startActivityForResult(intent, 9009); 
    } 

После того, как счет извлекается ниже метод вызывается,

public static final String MAIL_GOOGLE_COM = "https://mail.google.com"; 
public static final String GMAIL_COMPOSE = "https://www.googleapis.com/auth/gmail.compose"; 
public static final String GMAIL_MODIFY = "https://www.googleapis.com/auth/gmail.modify"; 
private static final String SCOPE = "oauth2:" + GMAIL_COMPOSE + " " + GMAIL_MODIFY + " " + MAIL_GOOGLE_COM; 

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (resultCode == Activity.RESULT_OK) { 
      String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME); 
      //accountname - google account in your mobile is retrieved 
      //now use the google account to retrieve the token 
      new GetToken(getActivity().getApplicationContext(), SCOPE, accountName).execute(); 
      showErrorDialog(exception); 
      } 
     } else if (requestCode == Activity.RESULT_CANCELED) { 
      Toast.makeText(getActivity(), "Cancelled!!!", Toast.LENGTH_SHORT).show(); 
     } 
    } 

Ниже класса используется, чтобы получить маркер.

private class GetToken extends AsyncTask<Void, Void, Void> { 
    Context context; 
    String mScope, mEmail, token; 

    GetToken(Context context, String scope, String email) { 
     this.context = context; 
     this.mScope = scope; 
     this.mEmail = email; 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     try { 
      token = GoogleAuthUtil.getToken(context, mEmail, mScope); 
      //save the token using preference for later use or do any good stuff using token here 
      Log.v("ranjapp", "Token is " + token); 
     } catch (UserRecoverableAuthException e) { 
      handleException(e); 
     } catch (GoogleAuthException ex) { 
      handleException(ex); 
     } catch (Exception e) { 
      //display a error dialog 
     } 
     return null; 
    } 

    void handleException(final Exception e) { 
     getActivity().runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       if (e instanceof UserRecoverableAuthException) { 
        Intent intent = ((UserRecoverableAuthException) e).getIntent(); 
        startActivityForResult(intent, 10098); 
       } else if (e instanceof GooglePlayServicesAvailabilityException) { 
        int statusCode = ((GooglePlayServicesAvailabilityException) e) 
          .getConnectionStatusCode(); 
        Dialog dialog = GooglePlayServicesUtil.getErrorDialog(statusCode, getActivity(), 10099); 
        dialog.show(); 
       } 
      } 
     }); 
    } 
} 

Чтобы получить токен, вам необходимо зарегистрировать свое приложение в игровой консоли Google. Также убедитесь, что у вас есть настройка игровых сервисов в вашем приложении.

Чтобы зарегистрировать свой Android приложение с помощью Google Cloud Console:

  1. Посетите Google Cloud Console.
  2. Если у вас есть существующий проект, к которому вы добавляете приложение для Android, выберите проект. В противном случае нажмите «Создать проект» вверху, введите имя и идентификатор проекта, затем нажмите «Создать». Примечание. Имя, которое вы указываете для проекта, - это имя, которое отображается пользователям в приложении «Настройки Google» в списке подключенных приложений.
  3. В левой части экрана выберите APIs & auth.
  4. Включите API, который вы хотите использовать, установив статус в положение ON.
  5. В левой части навигации выберите Учетные данные.
  6. Нажмите Создать новый идентификатор клиента или Создать новый ключ, подходящий для вашего приложения.
  7. Заполните форму, которая появляется, заполнив детали вашего Android-приложения. Чтобы получить SHA1 отпечатки пальцев для вашего приложения, выполните следующую команду в терминале: keytool -exportcert -alias <keystore_alias> -keystore <keystore_path> -list -v Например, вы используете отладочный ключ с Eclipse, то команда выглядит следующим образом: keytool -exportcert -alias androiddebugkey-keystore ~/.android/debug.keystore -list -v Тогда пароль хранилища ключей «андроид».
  8. Нажмите «Создать».

Для получения дополнительной информации: https://developer.android.com/google/auth/http-auth.html

+0

Это, похоже, установил ее. Но теперь я получаю еще одну ошибку. Несанкционированный 401.Я внедрил логин Google+ в действие, которое вызывается до того, на котором мне нужны письма. Что я сделал, чтобы получить разрешение? – ayushgp

+0

Вы получаете токен? – Psypher

+0

Нет. Я не получаю токен. Я использую знак google + и создаю ApiClient с помощью этого кода: 'Scope gmailreadonly = new Scope (« oauth2: googleapis.com/auth/gmail.readonly »); mGoogleApiClient = новый GoogleApiClient.Builder (это) .addConnectionCallbacks (это) .addOnConnectionFailedListener (это) .addApi (Plus.API) .addScope (Plus.SCOPE_PLUS_LOGIN) .addScope (gmailreadonly) .build(); 'Но это не работает. удалить аккаунт Google+ и реализовать этот метод? – ayushgp

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