简体   繁体   English

Android Google+无法获取授权码

[英]Android Google+ unable to get auth code

I'm trying to get a Google+ auth code based on this article: Server-side access for your app . 我正在尝试根据这篇文章获取Google+身份验证代码: 您的应用的服务器端访问权限 However, whenever I run my app and try to get the code I get the following in LogCat: 但是,每当我运行我的应用程序并尝试获取代码时,我在LogCat中获得以下内容:

07-23 23:42:31.760: E/getAccessToken()(11114): [ERROR] GoogleAuthException: com.google.android.gms.auth.GoogleAuthException: Unknown

I browsed a lot of stuff and from what I can tell I have everything setup correctly in the code below. 我浏览了很多东西,据我所知,我已经在下面的代码中正确设置了所有内容。 Any ideas why it's not getting an auth token? 任何想法为什么它没有获得身份验证令牌?

FYI, I have one project setup in the API console that has both the app and web applications configured for oauth and I'm using the server (not the app) ID for the scopes string. 仅供参考,我在API控制台中有一个项目设置,其中包含为oauth配置的应用程序和Web应用程序,我正在使用作用域字符串的服务器(而不是应用程序)ID。 I've also followed the example(s) from the above link and the app works fine and allows you to sign-in/out, but I just can't get the auth code. 我也跟着上面的链接中的示例,应用程序工作正常,允许您登录/退出,但我无法获得身份验证代码。

private String getAccessToken() {
    String scopesString = Scopes.PLUS_LOGIN + " " + Scopes.PLUS_PROFILE;
    String scope = "oauth2:server:client_id:" + SERVER_CLIENT_ID + ":api_scope:" + scopesString;
    Bundle appActivities = new Bundle();
    appActivities.putString(GoogleAuthUtil.KEY_REQUEST_VISIBLE_ACTIVITIES,
            "http://schemas.google.com/AddActivity");
    String code = null;
    try {
         code = GoogleAuthUtil.getToken(
                    this,                             // Context context
                    mPlusClient.getAccountName(),     // String accountName
                    scopes,                           // String scope
                    appActivities                     // Bundle bundle
                );
    } catch (IOException transientEx) {
      // network or server error, the call is expected to succeed if you try again later.
      // Don't attempt to call again immediately - the request is likely to
      // fail, you'll hit quotas or back-off.
        Log.e("getAccessToken()", "[ERROR] IOException: " + transientEx);
        return null;
    } catch (UserRecoverableAuthException e) {
           // Recover
        Log.e("getAccessToken()", "[ERROR] UserRecoverableAuthException: " + e);
        code = null;
    } catch (GoogleAuthException authEx) {
      // Failure. The call is not expected to ever succeed so it should not be
      // retried.
        Log.e("getAccessToken()", "[ERROR] GoogleAuthException: " + authEx);
      return null;
    } catch (Exception e) {
        Log.e("getAccessToken()", "[ERROR] Exception: " + e);
      throw new RuntimeException(e);
    }
    return code;
}

try this, 尝试这个,

in you onCreate() write, 在你onCreate()写道,

new GetTokenAsync.execute();

and then write AsyncTask to get access token as, 然后编写AsyncTask以获取访问令牌,

public class GetTokenAsync extends AsyncTask<String, String, String>
        {

            @Override
            protected void onPreExecute()
                {

                    super.onPreExecute();
                    plusUtilities.ShowProgressDialog("Getting Token...");

                }

            @Override
            protected String doInBackground(String... params)
                {
                    String scope = "oauth2:" + Scopes.PLUS_LOGIN + " " + Scopes.PLUS_PROFILE;
                    try
                        {
                            // We can retrieve the token to check via
                            // tokeninfo or to pass to a service-side
                            // application.
                            String token = GoogleAuthUtil.getToken(getParent(), mPlusClient.getAccountName(), scope);
                            Log.i("OAUTH Token:", token);
                            Log.i("Scope:", "" + scope);
                            Log.i("GOOGLE_ACCOUNT_TYPE", "" + GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE);

                            Person currentperson = mPlusClient.getCurrentPerson();
                               Log.i("person", currentperson.toString());

                        }
                    catch (UserRecoverableAuthException e)
                        {
                            Log.e("UserRecoverableAuthException", "UserRecoverableAuthException");
                            e.printStackTrace();
                        }
                    catch (IOException e)
                        {
                            Log.e("IOException", "IOException");
                            e.printStackTrace();
                        }
                    catch (GoogleAuthException e)
                        {
                            Log.e("GoogleAuthException", "GoogleAuthException");
                            e.printStackTrace();
                        }
                    catch (Exception e)
                        {
                            Log.e("Exception", "Exception");
                            e.printStackTrace();
                        }
                    return null;
                }

            @Override
            protected void onPostExecute(String result)
                {

                    super.onPostExecute(result);
                    plusUtilities.DissmissProgressDialog();
                }

        }

I don't know if you modified the line to post the question but looking at the code you posted, this line is wrong: 我不知道你是否修改过该行以发布问题,但查看你发布的代码,这一行是错误的:

String scopes = "oauth2:server:client_id:<My server client ID>:scopesString";

It should be: 它应该是:

String scopes = "oauth2:server:client_id:" + SERVER_CLIENT_ID + ":api_scope:" + scopeString;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM