Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.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 .GoogleAuthException:执行Google SSO时未知。_Android_Google Oauth_Google Sso - Fatal编程技术网

Android .GoogleAuthException:执行Google SSO时未知。

Android .GoogleAuthException:执行Google SSO时未知。,android,google-oauth,google-sso,Android,Google Oauth,Google 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.er

例外情况:

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
我的注册代码:

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;

    }

我完全不知道这里发生了什么。帮助?

我也有类似的问题。在我的例子中,问题在于google控制台中缺少应用程序名


打开导航到您的项目并选择“同意”屏幕。填写产品名称字段并保存。

与CheatEx类似,我必须从同意屏幕页面选择我的电子邮件地址并保存。

从何时起,GoogleAuthUtil.getToken方法开始为未在设备上注册的电子邮件抛出带有消息BadUsername的GoogleAuthException,与之前的异常IllegalArgumentException不同,该异常包含消息“不存在帐户”“电子邮件地址”,java.lang.String,java.lang.String