Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Gmail API:使用令牌检索的身份验证_Android_Google Api_Gmail - Fatal编程技术网

Android Gmail API:使用令牌检索的身份验证

Android Gmail API:使用令牌检索的身份验证,android,google-api,gmail,Android,Google Api,Gmail,关于使用OAuth2.0进行身份验证,我已经阅读了整篇文章。 但我没有找到一个合适的方法在android应用程序上实现这一点。请建议一种获取访问令牌的方法,以便我可以构建Gmail服务对象并访问收件箱或任何其他方法 这是他们在本节中给出的示例: 此库可能会使您更轻松: 此外,您还可以检查源代码以了解实际实现。此库可能会使您更容易: 此外,您还可以检查源代码以了解实际实现。此库可能会使您更容易: 此外,您还可以检查源代码以了解实际实现。此库可能会使您更容易: 此外,您还可以检查源代码的实际

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

这是他们在本节中给出的示例:


此库可能会使您更轻松:


此外,您还可以检查源代码以了解实际实现。

此库可能会使您更容易:


此外,您还可以检查源代码以了解实际实现。

此库可能会使您更容易:


此外,您还可以检查源代码以了解实际实现。

此库可能会使您更容易:


此外,您还可以检查源代码的实际实现。

调用以下方法以获取移动应用中使用的令牌和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();
                }
            }
        });
    }
}
私有类GetToken扩展了异步任务{
语境;
字符串mScope、mEmail、token;
GetToken(上下文、字符串范围、字符串电子邮件){
this.context=上下文;
this.mScope=范围;
this.mEmail=电子邮件;
}
@凌驾
受保护的Void doInBackground(Void…参数){
试一试{
token=GoogleAuthUtil.getToken(上下文、mEmail、mScope);
//使用首选项保存令牌供以后使用,或者在此处使用令牌做任何好事
Log.v(“ranjapp”,“Token是”+Token);
}捕获(UserRecoverableAuthe异常){
手部异常(e);
}捕获(GoogleAuthEx){
手部异常(ex);
}捕获(例外e){
//显示错误对话框
}
返回null;
}
无效句柄异常(最终异常e){
getActivity().runOnUiThread(新的Runnable()){
@凌驾
公开募捐{
if(UserRecoverableAuthException的实例){
Intent Intent=((UserRecoverableAuthException)e).getIntent();
startActivityForResult(意向书,10098);
}else if(例如GooglePlayServicesAvailabilityException的实例){
int statusCode=((谷歌PlayServicesAvailabilityException)e)
.getConnectionStatusCode();
Dialog Dialog=GooglePlayServicesUtil.getErrorDialog(状态码,getActivity(),10099);
dialog.show();
}
}
});
}
}
您必须在google play console中注册您的应用程序才能成功获取令牌。另外,请确保在应用程序中设置了播放服务

要在谷歌云控制台上注册Android应用程序,请执行以下操作:

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

  • 有关更多信息:

    调用以下方法以获取移动应用中使用的令牌和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();
                    }
                }
            });
        }
    }
    
    私有类GetToken扩展了异步任务{
    语境;
    字符串mScope、mEmail、token;
    GetToken(上下文、字符串范围、字符串电子邮件){
    this.context=上下文;
    this.mScope=范围;
    this.mEmail=电子邮件;
    }
    @凌驾
    受保护的Void doInBackground(Void…参数){
    试一试{
    token=GoogleAuthUtil.getToken(上下文、mEmail、mScope);
    //使用首选项保存令牌供以后使用,或者在此处使用令牌做任何好事
    Log.v(“ranjapp”,“Token是”+Token);
    }捕获(UserRecoverableAuthe异常){
    手部异常(e);
    }捕获(GoogleAuthEx){
    手部异常(ex);
    }捕获(例外e){
    //显示错误对话框
    }
    返回null;
    }
    无效句柄异常(最终异常e){
    getActivity().runOnUiThread(新的Runnable()){
    @凌驾
    公开募捐{
    if(UserRecoverableAuthException的实例){
    Intent Intent=((UserRecoverableAuthException)e).getIntent();
    startActivityForResult(意向书,10098);
    }else if(例如GooglePlayServicesAvailabilityException的实例){
    int状态代码=(