从Android应用运行Google Apps脚本?

时间:2014-01-21 03:47:30

标签: android authentication google-apps-script oauth-2.0

我需要在我创建的Google Apps脚本网络应用上运行GET调用。我想在Android App(IntentService)中按下按钮后进行GET调用。

但是,我不确定如何执行授权流程,因为Google Apps脚本应在用户自己的Gmail帐户上运行(它以“访问网络应用程序的用户”执行清理脚本)。

我是否有办法进行身份验证,以便从Android应用中触发与用户相关的Google Apps脚本?

1 个答案:

答案 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&param2=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()是我的Singleton Application类,它返回 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);
   }
}