带有Google API密钥的GoogleAccountCredential

问题描述

我使用的是Google Sheets API,我正在使用Google Sheets API创建新的Google Sheets,但这是使用启用了Sheets API的帐户,如果我将应用程序提供给其他用户,他将无法创建新工作表使用他的Gmail。我有API密钥,是否可以在不选择Gmail帐户的情况下创建表格

GoogleAccountCredential mCredential;
private static final String BUTTON_TEXT = "Call Google Sheets API";
private static final String PREF_ACCOUNT_NAME = "accountName";
private static final String[] SCOPES = {SheetsScopes.SPREADSHEETS};

mCredential = GoogleAccountCredential.usingOAuth2(
                  getApplicationContext(),Arrays.asList(SCOPES))
                  .setBackOff(new ExponentialBackOff());

private void getResultsFromApi() {
      Log.d(TAG,"getResultsFromApi: ");
      if (!isGooglePlayServicesAvailable()) {
          Log.d(TAG,"getResultsFromApi: 1");
          acquireGooglePlayServices();
      } else if (mCredential.getSelectedAccountName() == null) {
          Log.d(TAG,"getResultsFromApi: 2");
          chooseAccount();
      } else if (!isDeviceOnline()) {
          Log.d(TAG,"getResultsFromApi: No network connection available.");
      } else {
          // x();
          try {
              new MakeRequestTask(mCredential).execute();
          } catch (IOException e) {
              e.printStackTrace();
          }
      }
  }

  private boolean isDeviceOnline() {
      ConnectivityManager connMgr =
              (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
      NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
      return (networkInfo != null && networkInfo.isConnected());
  }

@AfterPermissionGranted(REQUEST_PERMISSION_GET_ACCOUNTS)
  private void chooseAccount() {
      if (EasyPermissions.hasPermissions(
              this,Manifest.permission.GET_ACCOUNTS)) {
          String accountName = getPreferences(Context.MODE_PRIVATE)
                  .getString(PREF_ACCOUNT_NAME,null);
          if (accountName != null) {
              Log.d(TAG,"chooseAccount: 1");
              mCredential.setSelectedAccountName(accountName);
              getResultsFromApi();
          } else {
              Log.d(TAG,"chooseAccount: 2");
              // Start a dialog from which the user can choose an account
              startActivityForResult(
                      mCredential.newChooseAccountIntent(),REQUEST_ACCOUNT_PICKER);
          }
      } else {
          // Request the GET_ACCOUNTS permission via a user dialog
          EasyPermissions.requestPermissions(
                  this,"This app needs to access your Google account (via Contacts).",REQUEST_PERMISSION_GET_ACCOUNTS,Manifest.permission.GET_ACCOUNTS);
      }
  }

private class MakeRequestTask extends AsyncTask<Void,Void,List<String>> {
      private com.google.api.services.sheets.v4.Sheets mService = null;
      private Exception mLastError = null;

      public MakeRequestTask(GoogleAccountCredential credential) throws IOException {
          HttpTransport transport = AndroidHttp.newCompatibleTransport();
          JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
          mService = new com.google.api.services.sheets.v4.Sheets.Builder(
                  transport,jsonFactory,credential)
                  .setApplicationName("Google Sheets API Android Quickstart")
                  .build();

          new Thread() {
              @Override
              public void run() {
                  try {

                      if (consurEtSurname.getText().toString().isEmpty()) {
                          consurEtSurname.setError("Please provide survey name!");
                          consurEtSurname.requestFocus();
                      } else {

                          Spreadsheet spreadsheet = new Spreadsheet()
                                  .setProperties(new SpreadsheetProperties()
                                          .setTitle(consurEtSurname.getText().toString()));


                          spreadsheet = mService.spreadsheets().create(spreadsheet)
                                  .setFields("spreadsheetId")
                                  .execute();

                          Makecolums(mService,spreadsheet.getSpreadsheetId());
                          upload(spreadsheet.getSpreadsheetId());
                          Log.d(TAG,"onCreate: " + spreadsheet.getSpreadsheetId());
                          Log.d(TAG,"run: " + spreadsheet.getSpreadsheetUrl());
                      }

                 //     writeToSheetUsingApi(mService,spreadsheet.getSpreadsheetId());

                  } catch (IOException e) {
                      e.printStackTrace();
                  } catch (GeneralSecurityException e) {
                      e.printStackTrace();
                  }
//                    catch (GeneralSecurityException e) {
//                        e.printStackTrace();
//                    }


              }
          }.start();


      }

//
//        @Override
//        protected List<String> doInBackground(Void... params) {
//            try {
//                return getDataFromApi();
//            } catch (Exception e) {
//                mLastError = e;
//                cancel(true);
//                return null;
//            }
//        }
//
//
//        private List<String> getDataFromApi() throws IOException {
//            String spreadsheetId = "196tcE1k5RuqTdGSBDpTFAI5h3m_dwXR875Q3csmi4ko";
//            String range = "A1:X1";
//
//            List<String> results = new ArrayList<String>();
//            ValueRange response = this.mService.spreadsheets().values()
//                    .get(spreadsheetId,range)
//                    .execute();
//
//            List<List<Object>> values = response.getValues();
//            if (values != null) {
//                for (int i = 0; i < values.size(); i++) {
//                    results.add(values.get(i).get(0) + "," + values.get(i).get(1));
//                }
//            }
//            return results;
//        }


      @Override
      protected List<String> doInBackground(Void... voids) {
          return null;
      }

      @Override
      protected void onPreExecute() {
          //mOutputText.setText("");
          mProgress.show();
      }

      @Override
      protected void onPostExecute(List<String> output) {
          mProgress.hide();
          if (output == null || output.size() == 0) {
              Log.d(TAG,"\"No results returned.\": ");
          } else {
              output.add(0,"Data retrieved using the Google Sheets API:");
              Log.d(TAG,TextUtils.join("\n",output));
              Log.d("TagOutputPost",output));
          }
      }

      @Override
      protected void onCancelled() {
          mProgress.hide();
          if (mLastError != null) {
              if (mLastError instanceof GooglePlayServicesAvailabilityIOException) {
                  showGooglePlayServicesAvailabilityErrorDialog(
                          ((GooglePlayServicesAvailabilityIOException) mLastError)
                                  .getConnectionStatusCode());
              } else if (mLastError instanceof UserRecoverableAuthIOException) {
                  startActivityForResult(
                          ((UserRecoverableAuthIOException) mLastError).getIntent(),REQUEST_AUTHORIZATION);
              } else {
                  Log.d(TAG,"The following error occurred:\n"
                          + mLastError.getMessage());

              }
          } else {
              Log.d(TAG,"Request onCancelled: ");
          }
      }
  }


  @Override
  protected void onActivityResult(
          int requestCode,int resultCode,Intent data) {
      super.onActivityResult(requestCode,resultCode,data);
      switch (requestCode) {
          case REQUEST_GOOGLE_PLAY_SERVICES:
              if (resultCode != RESULT_OK) {
                  Log.d(TAG,"This app requires Google Play Services. Please install " +
                          "Google Play Services on your device and relaunch this app.");

              } else {
                  getResultsFromApi();
              }
              break;
          case REQUEST_ACCOUNT_PICKER:
              if (resultCode == RESULT_OK && data != null &&
                      data.getExtras() != null) {
                  String accountName =
                          data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
                  if (accountName != null) {
                      SharedPreferences settings =
                              getPreferences(Context.MODE_PRIVATE);
                      SharedPreferences.Editor editor = settings.edit();
                      editor.putString(PREF_ACCOUNT_NAME,accountName);
                      editor.apply();
                      mCredential.setSelectedAccountName(accountName);
                      getResultsFromApi();
                  }
              }
              break;
          case REQUEST_AUTHORIZATION:
              if (resultCode == RESULT_OK) {
                  getResultsFromApi();
              }
              break;
      }
  }

  private boolean isGooglePlayServicesAvailable() {
      GoogleApiAvailability apiAvailability =
              GoogleApiAvailability.getInstance();
      final int connectionStatusCode =
              apiAvailability.isGooglePlayServicesAvailable(this);
      return connectionStatusCode == ConnectionResult.SUCCESS;
  }

  private void acquireGooglePlayServices() {
      GoogleApiAvailability apiAvailability =
              GoogleApiAvailability.getInstance();
      final int connectionStatusCode =
              apiAvailability.isGooglePlayServicesAvailable(this);
      if (apiAvailability.isUserResolvableError(connectionStatusCode)) {
          showGooglePlayServicesAvailabilityErrorDialog(connectionStatusCode);
      }
  }

  void showGooglePlayServicesAvailabilityErrorDialog(
          final int connectionStatusCode) {
      GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance();
      Dialog dialog = apiAvailability.getErrorDialog(
              ConfirmSurvey.this,connectionStatusCode,REQUEST_GOOGLE_PLAY_SERVICES);
      dialog.show();
  }

  @Override
  public void onPermissionsGranted(int requestCode,List<String> perms) {

  }

  @Override
  public void onPermissionsDenied(int requestCode,List<String> perms) {

  }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...