在没有身份验证的情况下写信给Google表



在我的一个项目中,我需要将数据(iOS和Android)写入Google Sheet文档。我需要将数据写入不属于用户的电子表格,该电子表在我的公司帐户下。

根据文档,对于这种情况,我可以使用 create recertentials> api键来设置无授权密钥。
我担心的是,任何人都可以在应用程序中获取此密钥(使用一些基本的反向工程方法)。我有一个想法是创建一个用仅写凭据,并使用其API-KEY预先构造API请求的用户。但是我敢肯定有一种更好的方法来实现这一目标。

我有什么选择?非常感谢!

您可以使用Google App脚本来挖掘任何甚至匿名的人都可以访问的Web应用程序,然后在您的应用程序中创建一个运行该脚本的异步方法。可以在此处看到这样的WebApp的示例:https://gist.github.com/petyr47/7af08ec2d982399c1b4ace2734597d3b.js然后,您可以添加一种看起来像这样的异步方法:

public class SendRequest extends AsyncTask<String, Void, String> {

        protected void onPreExecute(){}
        protected String doInBackground(String... arg0) {
            try{
                //Enter script URL Here
                URL url = new URL("Your App Script Web App URL");
                JSONObject postDataParams = new JSONObject();
                //Passing scanned code as parameter
               postDataParams.put("sdata",scannedData);

                Log.e("params",postDataParams.toString());
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setReadTimeout(15000 /* milliseconds */);
            conn.setConnectTimeout(15000 /* milliseconds */);
            conn.setRequestMethod("GET");
            conn.setDoInput(true);
            conn.setDoOutput(true);
            OutputStream os = conn.getOutputStream();
            BufferedWriter writer = new BufferedWriter(
                    new OutputStreamWriter(os, "UTF-8"));
            writer.write(getPostDataString(postDataParams));
            writer.flush();
            writer.close();
            os.close();
            int responseCode=conn.getResponseCode();
            if (responseCode == HttpsURLConnection.HTTP_OK) {
                BufferedReader in=new BufferedReader(new InputStreamReader(conn.getInputStream()));
                StringBuffer sb = new StringBuffer("");
                String line="";
                while((line = in.readLine()) != null) {
                    sb.append(line);
                    break;
                }
                in.close();
                return sb.toString();
            }
            else {
                return new String("false : "+responseCode);
            }
        }
        catch(Exception e){
            return new String("Exception: " + e.getMessage());
        }
    }
    @Override
    protected void onPostExecute(String result) {
        Toast.makeText(getApplicationContext(), result,
                Toast.LENGTH_LONG).show();
    }
}
public String getPostDataString(JSONObject params) throws Exception {
    StringBuilder result = new StringBuilder();
    boolean first = true;
    Iterator<String> itr = params.keys();
    while(itr.hasNext()){
        String key= itr.next();
        Object value = params.get(key);
        if (first)
            first = false;
        else
            result.append("&");
        result.append(URLEncoder.encode(key, "UTF-8"));
        result.append("=");
        result.append(URLEncoder.encode(value.toString(), "UTF-8"));
    }
    return result.toString();
}

}

您可以使用:

执行此方法
 new SendRequest().execute();

将方法中的参数替换为您想要发送的内容。希望这有帮助

这是对Android的解决方案,我无能为力,但是您可以应用相同的原则。

相关内容

  • 没有找到相关文章