Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从Android访问内置谷歌应用程序脚本的“Web应用程序”?_Java_Android_Google Apps Script_Oauth 2.0_Google Oauth - Fatal编程技术网

Java 如何从Android访问内置谷歌应用程序脚本的“Web应用程序”?

Java 如何从Android访问内置谷歌应用程序脚本的“Web应用程序”?,java,android,google-apps-script,oauth-2.0,google-oauth,Java,Android,Google Apps Script,Oauth 2.0,Google Oauth,我可以从应用程序中成功访问Google Drive和电子表格功能 因此,我有一个com.google.api.client.auth.oauth2.Credential的授权实例 现在,我希望执行一个作为“Web应用”部署的Google应用程序脚本。这也需要身份验证才能运行。如果我点击端点并通过身份验证,该脚本将在浏览器中运行 以下是一些psuedo代码: String url = "https://script.google.com/a/macros/mycompany.com/s/xxxx/

我可以从应用程序中成功访问Google Drive和电子表格功能

因此,我有一个com.google.api.client.auth.oauth2.Credential的授权实例

现在,我希望执行一个作为“Web应用”部署的Google应用程序脚本。这也需要身份验证才能运行。如果我点击端点并通过身份验证,该脚本将在浏览器中运行

以下是一些psuedo代码:

String url = "https://script.google.com/a/macros/mycompany.com/s/xxxx/dev";
GenericUrl webAppEndPoint = new GenericUrl(url);
final HttpTransport httpTransport = AndroidHttp.newCompatibleTransport();
HttpRequestFactory requestFactory = httpTransport.createRequestFactory(currentCredential);

// Do POST for service

String requestBody = URLEncoder.encode("{\"name\":\"John Smith\",\"company\":\"Virginia Company\",\"pdf\":\""+getPdfBase64()+"\"}", "UTF-8");
HttpRequest postRequest =requestFactory.buildPostRequest(new GenericUrl(url), ByteArrayContent.fromString(null, requestBody));
postRequest.getHeaders().setAccept("application/json");
postRequest.setFollowRedirects(true);
postRequest.setLoggingEnabled(true);
HttpResponse postResponse = postRequest.execute();
如果我运行代码,我会得到以下错误:com.google.api.client.http.HttpResponseException:HttpResponseException 405 Method Not Allowed

更新:所以-最初我发布到错误的URL,我从浏览器复制了重定向的URL,而不是脚本URL

POST现在使用上面的代码成功地进行了身份验证,但它仍然不能处理提交后的GET重定向。我现在可以处理这个问题,但是如果能够从服务器得到响应就好了


我认为com.google.api.client.http.HttpRequest不能正确处理经过身份验证的POST重定向;要真正了解发生了什么,您需要显示实际的HTTP流量。我应该说,302重定向到指定的redict_uri是OAuth 2身份验证流的正常部分

1您不能通过身份验证调用应用程序脚本。您需要将其作为匿名访问发布为contentService。
2您也调用了错误的url。调用服务url,而不是您在浏览器中获得的重定向url。

Zig,关于服务url,您是对的!更新-但身份验证有效,它似乎无法处理提交后的重定向。您的url仍然错误,您使用的是调试url而不是真实的url。另外,看看发布为匿名访问是否修复了任何问题。Zig,在我开发脚本时使用它——似乎对结果没有任何影响——它总是希望在提交后重定向。POST现在全部提交正常,但HttpRequest未正确处理重定向。TBH-现在我可以解决这个问题了。蒂姆,这个例子现在肯定可以用了,但是重定向仍然没有处理。作为GET,重定向工作正常,脚本可以返回一个结果。因此,这似乎有助于解决这个问题——POST重定向并成为GET