带有Google API密钥的GoogleAccountCredential

如何解决带有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.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-