【问题标题】:Run a Google Apps Script from Android App?从 Android 应用程序运行 Google Apps 脚本?
【发布时间】:2014-02-10 11:52:25
【问题描述】:
我需要在我创建的 Google Apps Script Web App 上运行 GET 调用。我想在我的 Android 应用 (IntentService) 中按下按钮后执行此 GET 调用。
但是,我不确定如何执行授权流程,因为 Google Apps 脚本旨在在用户自己的 Gmail 帐户上运行(它以“用户访问网络应用程序”的身份执行清理脚本)。
有没有办法让我进行身份验证,以便我可以从我的 Android 应用程序触发依赖于用户的 Google Apps 脚本?
【问题讨论】:
标签:
android
authentication
google-apps-script
oauth-2.0
【解决方案1】:
好的。以下代码适用于我。
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
// The Google Script URL
String googleAppsScriptURL = "https://script.google.com/macros/s/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-o/dev";
HttpURLConnection connection = null;
try {
URL url = new URL(googleAppsScriptURL + "?param1=foo¶m2=bar");
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Authorization", "Bearer " + sessionManager.getCredentials().getToken());
if(connection.getResponseCode() == 200) {
// DO STUFF
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (GoogleAuthException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if(connection != null) {
connection.disconnect();
}
}
return null;
}
}.execute();
调用 connection.getResponseCode() 对于执行实际请求很重要。
sessionManager.getCreadentials() 是我的一个单例应用程序类,它返回 GoogleAccountCredential 对象,这是 oAuth2 身份验证过程所必需的。
最后这段代码将进入 Google Scripts 中的 doPost 函数:
function doPost(e) {
if(typeof e !== 'undefined') {
Logger.log(e.parameters.param1); // foo
Logger.log( e.parameters.param2); // bar
callYourFunction(e.parameter.param1, e.parameter.param2);
}
}