.GoogleAuthException:未知的,而这样做谷歌SSO。 [英] .GoogleAuthException: Unknown while doing Google SSO.

查看:175
本文介绍了.GoogleAuthException:未知的,而这样做谷歌SSO。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

例外:

07-28 14:36:13.140: W/System.err(11382): com.google.android.gms.auth.GoogleAuthException: Unknown
07-28 14:36:13.140: W/System.err(11382):    at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source)
07-28 14:36:13.140: W/System.err(11382):    at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source)
07-28 14:36:13.148: E/AndroidRuntime(11382): FATAL EXCEPTION: main

我的新会员注册code:

My Sign Up code:

public class Signup extends Activity {

      final private String CLIENT_ID = <android-client-id>;
      final private List<String> SCOPES = Arrays.asList(new String[]{
          "https://www.googleapis.com/auth/plus.login"
      });
      private String webId = <web-client-id>;


      private GoogleAccountCredential mCredential;

      private EditText mExchangeCodeEditText;
      private EditText mIdTokenEditText;

      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_google);
        //mExchangeCodeEditText = (EditText) findViewById(R.id.editTextExchangeCode);
       // mIdTokenEditText = (EditText) findViewById(R.id.editTextIdToken);

        // initiate a credential object with drive and plus.login scopes
        // cross identity is only available for tokens retrieved with plus.login
        mCredential = GoogleAccountCredential.usingOAuth2(this, Arrays.asList(SCOPES.get(0)));

        // user needs to select an account, start account picker
        startActivityForResult(
            mCredential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER);
      }

      /**
       * Handles the callbacks from result returning
       * account picker and permission requester activities.
       */
      @Override
      protected void onActivityResult(
          final int requestCode, final int resultCode, final Intent data) {
        switch (requestCode) {
        // user has  returned back from the account picker,
        // initiate the rest of the flow with the account he/she has chosen.
        case REQUEST_ACCOUNT_PICKER:
          String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
          if (accountName != null) {
            mCredential.setSelectedAccountName(accountName);  
            new RetrieveExchangeCodeAsyncTask().execute();
            new RetrieveJwtAsyncTask().execute();
          }
          break;
        // user has returned back from the permissions screen,
        // if he/she has given enough permissions, retry the the request.
        case REQUEST_AUTHORIZATION:
          if (resultCode == Activity.RESULT_OK) {
            // replay the same operations
            new RetrieveExchangeCodeAsyncTask().execute();
            new RetrieveJwtAsyncTask().execute();
          }
          break;
        }
      }

      /**
       * Retrieves the exchange code to be sent to the
       * server-side component of the app.
       */
      public class RetrieveExchangeCodeAsyncTask
          extends AsyncTask<Void, Boolean, String> {

        @Override
        protected String doInBackground(Void... params) {

          String scope = String.format("oauth2:server:client_id:%s:api_scope:%s",
              CLIENT_ID, TextUtils.join(" ", SCOPES));
          try {

              GoogleAccountCredential.usingAudience(Signup.this,   "server:client_id:" + webId);
            return GoogleAuthUtil.getToken(

                Signup.this, mCredential.getSelectedAccountName(), scope);
          } catch (UserRecoverableAuthException e) {
            startActivityForResult(e.getIntent(), REQUEST_AUTHORIZATION);
          } catch (Exception e) {
            e.printStackTrace(); // TODO: handle the exception
          }
          return null;
        }

        @Override
        protected void onPostExecute(String code) {
          // exchange code with server-side to retrieve an additional 
          // access token on the server-side.
         // mExchangeCodeEditText.setText(code);
            Log.d("code",code);
        }
      }

      /**
       * Retrieves a JWT to identify the user without the
       * regular client-side authorization flow. The jwt payload needs to be
       * sent to the server-side component.
       */
      public class RetrieveJwtAsyncTask
          extends AsyncTask<Void, Boolean, String> {

        @Override
        protected String doInBackground(Void... params) {
          String scope = "audience:server:client_id:" + CLIENT_ID;
          try {
            return GoogleAuthUtil.getToken(
                    Signup.this, mCredential.getSelectedAccountName(), scope);
          } catch(UserRecoverableAuthIOException e) {
            startActivityForResult(e.getIntent(), REQUEST_AUTHORIZATION);
          } catch (Exception e) {
            e.printStackTrace(); // TODO: handle the exception
          }
          return null;
        }

        @Override
        protected void onPostExecute(String idToken) {
          // exchange encrypted idToken with server-side to identify the user
         // mIdTokenEditText.setText(idToken);
            Log.d("idtoken",idToken);
        }
      }

      private static final int REQUEST_ACCOUNT_PICKER = 100;
      private static final int REQUEST_AUTHORIZATION = 200;

    }

我完全无言以对这里发生了什么。帮助?

I'm completely clueless what's happening here. Help?

推荐答案

我有类似的问题。在我的情况,问题是在谷歌控制台错过了应用程序的名称。

I had similar problem. In my case the problem was in missed application name in google console.

打开控制台浏览到您的项目,并选择同意屏。在产品名称字段中填写并保存。

Open console navigate to your project and choose "Consent screen". Fill in the "PRODUCT NAME" field and save.

这篇关于.GoogleAuthException:未知的,而这样做谷歌SSO。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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