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

时间:2015-04-14 18:51:25

标签: android google-api gmail

我已经阅读了整篇文章,了解使用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();

2 个答案:

答案 0 :(得分: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 Play控制台中注册您的应用才能成功获取令牌。还要确保您在应用中设置了播放服务。

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

  1. 访问Google Cloud Console。
  2. 如果您有要添加Android应用的现有项目,请选择该项目。否则,单击顶部的“创建项目”,输入项目名称和ID,然后单击“创建”。 注意:您为项目提供的名称是在“已连接”应用列表中的“Google设置”应用中向用户显示的名称。
  3. 在左侧导航栏中,选择API&amp; AUTH。
  4. 通过将状态设置为开启来启用您要​​使用的API。
  5. 在左侧导航栏中,选择凭据。
  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 然后密钥库密码是&#34; android&#34;。
  8. 点击“创建”。
  9. 有关详细信息:https://developer.android.com/google/auth/http-auth.html

答案 1 :(得分:1)

这个库可能会让您更轻松: https://github.com/Hafiz-Waleed-Hussain/EasySocial

此外,您可以检查实际实施的来源。