在Android上运行应用程序脚本?
我目前正在开发一款Android应用程序,它要求用户登录谷歌,然后通过运行应用程序脚本来验证用户是否属于谷歌集团(除了使用应用程序脚本,我还不知道如何做到这一点)。我可以使用Firebase身份验证让用户登录,但无论我尝试什么,我都无法运行应用程序脚本(脚本本身工作,因为它可以从浏览器运行),因为我似乎无法获得正确的授权(我收到401和403错误) 以下是我尝试过的一些事情:在Android上运行应用程序脚本?,android,google-apps-script,oauth-2.0,firebase-authentication,google-apps-script-api,Android,Google Apps Script,Oauth 2.0,Firebase Authentication,Google Apps Script Api,我目前正在开发一款Android应用程序,它要求用户登录谷歌,然后通过运行应用程序脚本来验证用户是否属于谷歌集团(除了使用应用程序脚本,我还不知道如何做到这一点)。我可以使用Firebase身份验证让用户登录,但无论我尝试什么,我都无法运行应用程序脚本(脚本本身工作,因为它可以从浏览器运行),因为我似乎无法获得正确的授权(我收到401和403错误) 以下是我尝试过的一些事情: 使用谷歌应用程序脚本API Script service = new Script.Builder(new NetHtt
Script service = new Script.Builder(new NetHttpTransport(),
JacksonFactory.getDefaultInstance(), credentials).setApplicationName(APPLICATION_NAME)
.build();
ExecutionRequest request = new ExecutionRequest()
.setFunction("functionName");
Operation op = service.scripts().run(MY_SCRIPT_ID, request).execute();
if (op.getResponse() != null && op.getResponse().get("result") != null) {
return op.getResponse().get("result");
}
URL url = new URL("MY_SCRIPT_URL" + "?access_token=" + ACCESS_TOKEN);
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
HttpURLConnection urlConn = (HttpURLConnection) conn;
urlConn.setRequestProperty("Authorization", "Bearer " + ACCESS_TOKEN);
OutputStreamWriter wr = new OutputStreamWriter(urlConn.getOutputStream());
wr.write("");
wr.flush();
wr.close();
if(urlConn.getResponseCode() == 200){
BufferedReader reader = new BufferedReader(urlConn.getOutputStream());
//....AND HERE I READ FROM THE OUTPUT STREAM
}
凭证
:
GoogleCredential credentials = new GoogleCredential()
.createScoped(Arrays.asList(ScriptScopes.GROUPS))
.setAccessToken(FIREBASE_ACCESS_TOKEN);
InputStream in = activity.getAssets().open("SERVICE_INFO_FILE");
GoogleCredential credentials = GoogleCredential.fromStream(new FileInputStream(in))
.createScoped(Arrays.asList(ScriptScopes.GROUPS));
credentials.refreshToken();
GoogleCredential credentials = new GoogleCredential.Builder()
.setClientSecrets("CLIENT_ID", "CLIENT_SECRET").build()
.createScoped(Arrays.asList(ScriptScopes.GROUPS));
- 应用程序脚本链接到与服务帐户和Firebase项目相同的Google云项目
- 已为应用程序脚本API生成客户端机密
GoogleAccountCredential credentials = GoogleAccountCredential.usingOAuth2(activity, Arrays.asList(ScriptScopes.GROUPS));
credentials.getSelectedAccountName(FirebaseAuth.getInstance().getCurrentUser().getEmail());
Script service = new Script.Builder(new NetHttpTransport(),
JacksonFactory.getDefaultInstance(), credentials).setApplicationName(APPLICATION_NAME)
.build();
ExecutionRequest request = new ExecutionRequest()
.setFunction("testGroup");
Operation op = service.scripts().run(MY_SCRIPT_ID, request).execute();
但当它到达最后一行时,整个应用程序冻结,最终停止工作。我想这是因为应用程序正在等待应用程序脚本返回某些内容?有没有办法解决这个问题
以下是应用程序脚本代码,顺便说一句:
function testGroup() {
//return 0;
var groups = GroupsApp.getGroups();
for(var i = 0; i < groups.length; i++){
//Logger.log(groups[i].getEmail());
if(groups[i].getEmail().equals('group1')){
return 0;
}else if(groups[i].getEmail().equals('group2')){
return 1;
}
}
return -1;
}
函数测试组(){
//返回0;
var groups=GroupsApp.getGroups();
对于(变量i=0;i
(即使我刚刚返回0,它仍然不起作用)。将与以下内容一起使用:
你没有。。。在哪里?我试过的第一件事。但我现在要尝试使用GoogleAccountCredential而不是GoogleCredential!您可能还没有部署脚本。。。这是通过API运行它的先决条件。1.引用每个实例的错误2.发布应用程序脚本代码?第一个方法(
1
):1.确切的错误是什么?2.您是否已将脚本部署为API可执行文件?第一个方法出现401错误,是的,我已将其部署为API可执行文件。我假设这是因为应用程序正在等待应用程序脚本返回某些内容?
如果您的代码成功启动了应用程序脚本代码,则会记录在脚本编辑器>视图>执行中(包括它是一个api调用)-如果它在那里失败,那里将有错误日志。
implementation "com.google.apis:google-api-services-script:v1-rev271-1.25.0"