You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Google Sheets作为Android应用数据库,配置AppScript谷歌账号权限

关于Google Apps Script部署权限与Android应用适配的问题解答

一、「任何人」权限的风险

  • 完全公开访问:只要获取到部署URL的用户,无论是否拥有谷歌账号,都能直接请求并获取你的Sheet数据,存在极高的数据泄露风险,恶意用户可批量爬取或滥用数据。
  • 扩展风险:若后续脚本新增写入/修改数据的逻辑,公开权限会导致数据被恶意篡改的风险。

二、能否切换为「任何拥有谷歌账号的用户」权限?

完全可以。该权限既能将访问范围限制在持有谷歌账号的用户群体内,大幅降低公开泄露风险,又能满足多用户跨设备访问数据的需求,是更安全的替代方案。

三、切换权限后的部署与应用端适配步骤

1. 重新部署Apps Script

  • 打开你的Apps Script项目,点击右上角「部署」→「新建部署」。
  • 部署类型选择「Web应用」。
  • 执行权限选择「我自己」(确保脚本以你的身份访问Sheet,避免普通用户因权限不足无法读取数据)。
  • 谁可以访问选择「任何拥有Google账号的用户」。
  • 点击「部署」,复制新生成的部署URL,替换应用中原有的旧URL。

2. Android应用端代码调整

切换权限后,直接用原请求方式会返回401未授权错误,需要添加谷歌账号身份验证:

  • 先在Android应用中集成Google Sign-In:在Google Cloud Console启用Google Sign-In服务,配置应用的SHA-1指纹与OAuth客户端ID,完成基础集成。
  • 获取用户登录后的ID Token,在Volley请求中添加授权请求头:
    String getMember_url = 新部署URL + "action=getMember";
    StringRequest stringRequest = new StringRequest(Request.Method.GET, getMember_url,
        new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                findMemberandShow(response);
            }
        },
        new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                // 处理授权失败或请求错误
            }
        }
    );
    
    // 添加授权请求头
    stringRequest.setHeaders(new HashMap<String, String>() {{
        put("Authorization", "Bearer " + 用户的ID Token);
    }});
    
    // 原有超时与请求队列逻辑保留
    int socketTimeOut = 50000;
    RetryPolicy policy = new DefaultRetryPolicy(socketTimeOut, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
    stringRequest.setRetryPolicy(policy);
    RequestQueue queue = Volley.newRequestQueue(this);
    queue.add(stringRequest);
    

四、Apps Script端代码优化

你的现有脚本存在一处冗余:member_sheet.activate;缺少括号,且activate()方法并非必要操作,直接操作数据范围即可,建议删除该行,优化后代码:

function doGet(e) {
  var action = e.parameter.action;
  if (action == 'getMember') {
      return getUsers(member_sheet);
  }
}

function getUsers(member_sheet) {
  var jo = {};
  var dataArray = [];
  var rows = member_sheet.getRange(2, 1, member_sheet.getLastRow()-1, member_sheet.getLastColumn()).getValues();
  for (var i=0, l=rows.length; i<l; i++) {
    var dataRow = rows[i];
    var record = {};
    record['id'] = dataRow[0];
    record['date'] = Utilities.formatDate(dataRow[1],"IST","dd/MMM/YYYY");
    record['name'] = dataRow[2];
    record['age'] = dataRow[3];
    record['gender'] = dataRow[4];
    record['mobile'] = dataRow[5];
    record['life'] = dataRow[6];
    record['status'] = dataRow[7];
    dataArray.push(record);
  }
  jo.user = dataArray;
  var result = JSON.stringify(jo);
  return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.JSON);
}

内容的提问来源于stack exchange,提问作者Beginner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 08:57:10