消息NeedPermission获得令牌code时 [英] message NeedPermission when get token code

查看:116
本文介绍了消息NeedPermission获得令牌code时的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我用下面的代码片段获得令牌:

I use the following snippet to get token:

private class task extends AsyncTask<Void, Void, String> {

    @Override
    protected String doInBackground(Void... params) {
        Bundle appActivities = new Bundle();
        appActivities.putString(
                GoogleAuthUtil.KEY_REQUEST_VISIBLE_ACTIVITIES,
                Constants.ADD_ACTIVITY_SCHEME + " "
                        + Constants.BUY_ACTIVITY_SCHEME);

        String serverClientID = "My_Client_Id";
        String scopes = "oauth2:server:client_id:" + serverClientID
                + ":api_scope:" + Scopes.PLUS_LOGIN + " "
                + Scopes.PLUS_PROFILE;
        String code = null;
        try {

            code = GoogleAuthUtil.getToken(MainActivity.this, // Context
                                                                // context
                    mPlusClient.getAccountName(), // String accountName
                    scopes, // String scope
                    appActivities // Bundle bundle
                    );

        } catch (IOException transientEx) {
            code = "Loi 1";
        } catch (UserRecoverableAuthException e) {
            code = "Loi 2: "+e.getMessage();
        } catch (GoogleAuthException authEx) {
            code = "Loi 3";
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return code;
    }

    @Override
    protected void onPostExecute(String token) {
        showToast(token);
    }
}

我onConnected方法执行此行code的:

I execute this line of code in onConnected method:

new task.execute();

UserRecoverableAuthException发生,我敬酒演出信息:NeedPermission

UserRecoverableAuthException occur and my toast show message: "NeedPermission".

我该如何解决呢?

推荐答案

让您添加以下权限在你的清单?

Have your added the following permission in your manifest?

<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />

这里是工作code我!

here is the working code for me!

    @Override
public void onConnected(Bundle arg0) {
    mSignInClicked = false;
    Toast.makeText(this, "User is connected!", Toast.LENGTH_LONG).show();
    String accountName = mPlusClient.getAccountName();
    // Get user's information

    task = new AsyncTask<Void, Void, String>() {
        @Override
        protected String doInBackground(Void... params) {
            String token = null;

            try {
                token = GoogleAuthUtil.getToken(MyNetwork.this,
                        mPlusClient.getAccountName(), "oauth2:"
                                + Scopes.PROFILE);
                Log.i("TAG", "token" + token);
            } catch (IOException transientEx) {
                // Network or server error, try later
                Log.e(TAG, transientEx.toString());
            } catch (UserRecoverableAuthException e) {
                // Recover (with e.getIntent())
                Log.e(TAG, e.toString());
                Intent recover = e.getIntent();
                startActivityForResult(recover, REQUEST_CODE_TOKEN_AUTH);
            } catch (GoogleAuthException authEx) {

                Log.e(TAG, authEx.toString());
            }
            return token;
        }

        @Override
        protected void onPostExecute(String token) {
            Log.i(TAG, "Access token retrieved:" + token);
            mHandler.sendEmptyMessage(STOP_PROGRESS);
            getProfileInformation(token);
        }

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();
            mHandler.sendEmptyMessage(SHOW_PROGRESS);
        }

    };
    task.execute();
    Toast.makeText(this, accountName + " is connected.", Toast.LENGTH_LONG)
            .show();

}

和我收到类似下面的用户信息。

and i am getting user information like the following.

/**
 * Fetching user's information name, email, profile pic
 * */
private void getProfileInformation(String mToken) {

    String mAccessToken = mToken == null ? "" : mToken;
    String mProfileId = "";
    String mProfileName = "";
    String mImageUrl = "";
    String mSecretKey = "";

    try {
        if (Plus.PeopleApi.getCurrentPerson(mGoogleApiClient) != null) {

            Person currentPerson = Plus.PeopleApi
                    .getCurrentPerson(mGoogleApiClient);

            txtGooglePlus.setText(currentPerson.getDisplayName());
            mProfileName = currentPerson.getDisplayName();
            mImageUrl = currentPerson.getImage().getUrl();
            String personGooglePlusProfile = currentPerson.getUrl();
            String email = Plus.AccountApi.getAccountName(mGoogleApiClient);
            Log.e(TAG, "Name: " + mProfileName + ", plusProfile: "
                    + personGooglePlusProfile + ", email: " + email
                    + ", Image: " + mImageUrl);
            mProfileId = currentPerson.getId();


        } else {
            Toast.makeText(getApplicationContext(),
                    "Person information is null", Toast.LENGTH_LONG).show();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

据工作对我罚款。测试。检查并随时询问是否有任何问题。

It is working fine for me. Tested. Check and feel free to ask if there is any issue.

这篇关于消息NeedPermission获得令牌code时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆