微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – 在UserRecoverableAuthUIException之前的GMail API授予权限

我按照Google的快速入门示例设置了GMail API: https://developers.google.com/gmail/api/quickstart/android

我的应用成功请求GET_ACCOUNTS权限,并允许用户选择他/她的Gmail帐户.所选帐户将保存在SharedPreferences中以供以后访问.

通过IntentService,我的应用程序发送电子邮件.我按照此处的说明操作:https://developers.google.com/gmail/api/guides/sending并根据需要包含activation.jar,additional.jar和mail.jar库.当我使用以下代码发送电子邮件时,我收到UserRecoverableAuthUIException:

message = service.users().messages().send(userId,message).execute();

当我捕获异常时,获取存储异常的意图,并将意图作为新活动启动,我会看到一个对话框,让我有机会允许我的应用程序使用我的GMail帐户发送电子邮件

在此对话框上按“允许”后,我的应用程序会发送电子邮件而不会出现任何其他问题.我的应用也会在我的Google帐户的在线权限页面显示,它有权发送电子邮件.

当我第一次获取用户的帐户名而不是等待发生异常时,有没有办法手动触发此对话框?

UPDATE

我已经能够提取存储在intent中的动作和数据,如果这有助于任何:

>动作:com.google.android.gms.ui.UNPACKING_REDIRECT
> data:intent://com.google.android.gms.auth.uiflows.common/KEY

其中KEY是一系列字符,可能链接到我的帐户或是一个令牌.

编辑:

以下是创建Credentials对象并启动我正在使用的帐户选择器活动的代码

private GoogleAccountCredential mCredential;
private static final String[] ScopES = { GmailScopes.GMAIL_COMPOSE };

内部构造函数

mCredential = GoogleAccountCredential.usingOAuth2(
                getApplicationContext(),Arrays.asList(ScopES))
                .setBackOff(new ExponentialBackOff());

我在哪里获得帐户:

private void chooseGMailAccount() {
        String accountName = this.getSharedPreferences(getString(R.string.shared_pref_main),Context.MODE_PRIVATE)
                .getString(getString(R.string.srd_pref_gmail_account),null);
        if (accountName != null) {
            mCredential.setSelectedAccountName(accountName);
            configureGMailAPI();
        } else {
            startActivityForResult(
                    mCredential.newChooseAccountIntent(),REQUEST_ACCOUNT_PICKER);
        }
    }

解决方法

尝试在注册发送邮件,即在用户选择帐户后.此时它将捕获异常,一旦你得到这个异常显示这个弹出.这个用户好后去.我想没有直接触发弹出窗口的方法.根据 developers.google.com/drive/android/auth.授权发生在响应发送请求时收到错误.您的应用必须准备好捕获UserRecoverableAuthIOException.这意味着用户需要授权该应用.在您的应用获得用户授权之前,您的应用无法执行任何操作.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐