Gmail API:使用令牌检索进行身份验证

Gmail API: Authentication using token retrieval

关于使用OAuth2.0 进行身份验证,我已经阅读了整篇文章。 但是我没有找到合适的方法在 android 应用程序上执行此操作。请建议一种获取访问令牌的方法,以便我可以构建 Gmail 服务对象并访问收件箱或任何其他方法。

这是他们给出的例子 link:

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

这个库可能会让你更容易: https://github.com/Hafiz-Waleed-Hussain/EasySocial

此外,您还可以查看实际实现的来源。

调用以下方法获取令牌和移动设备中使用的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();
        }
    }

下面class是用来获取token的

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 游戏控制台中注册您的应用才能成功获取令牌。还要确保您在应用中设置了播放服务。

要使用 Google Cloud Console 注册您的 Android 应用程序:

  1. 访问 Google 云端控制台。
  2. 如果您有要向其添加 Android 应用程序的现有项目,则 select 该项目。否则,单击顶部的创建项目,输入您的项目名称和 ID,然后单击创建。 注意:您为项目提供的名称是在已连接应用列表的 Google 设置应用中向用户显示的名称。
  3. 在左侧导航中,select APIs & auth.
  4. 通过将“状态”设置为“开启”来启用您想要使用的API。
  5. 在左侧导航中,select 凭据。
  6. 根据您的应用点击创建新客户端 ID 或创建新密钥。
  7. 通过填写您的 Android 应用详细信息来完成显示的表格。 要为您的应用程序获取 SHA1 指纹,运行 在终端中执行以下命令: keytool -exportcert -alias <keystore_alias> -keystore <keystore_path> -list -v 例如,您在 Eclipse 中使用调试密钥,则命令如下所示: keytool -exportcert -alias androiddebugkey-keystore ~/.android/debug.keystore -list -v 那么keystore密码就是"android".
  8. 单击创建。

更多信息:https://developer.android.com/google/auth/http-auth.html