Gmail Add-on Error: SubmitFormResponseMarkup has disallowed value:card_navigations
Gmail Add-on Error: SubmitFormResponseMarkup has disallowed value:card_navigations
我有功能 logoutAction(e)
,当使用 setOnClickAction()
并在 Card
中的 TextButton
上设置此功能时 - 它工作正常。
但是当我使用 universalActions
中的相同函数时 - 我收到此错误:
SubmitFormResponseMarkup has disallowed value:card_navigations
function logoutAction(e) {
revokeToken();
var service = getOAuthService();
service.reset();
userProperties.setProperty('loggedIn', 'false');
// Create a Navigation object to push the card onto the stack.
// Return a built ActionResponse that uses the navigation object.
var nav = CardService.newNavigation().pushCard(loginFormBuild(e));
return CardService.newActionResponseBuilder().setNavigation(nav).build();
}
这里工作正常:
var logoutButton = CardService.newTextButton()
.setText("Logout")
.setOnClickAction(CardService.newAction().setFunctionName("logoutAction"));
content.addWidget(logoutButton);
但是清单中的 universalActions
- 它不起作用:
"universalActions": [{
"text": "Logout",
"runFunction": "logoutAction"
}]
有什么想法吗?
我们不能对简单动作和通用动作使用相同的函数。因为简单动作必须returnActionResponse
,而通用动作必须returnUniversalActionResponse
。
所以我们需要使用 CardService.newUniversalActionResponseBuilder()
而不是 CardService.newActionResponseBuilder()
正如@Roman 所建议的,在执行通用操作的导航操作时,您应该使用 UniversalActionResponseBuilder()。您的代码应更改为
function logoutAction(e) {
revokeToken();
var service = getOAuthService();
service.reset();
userProperties.setProperty('loggedIn', 'false');
return CardService.newUniversalActionResponseBuilder().displayAddOnCards([loginFormBuild(e).build()]).build();
}
根据您的函数 loginFormBuild(e) returns,您可能需要也可能不需要它的相关 build() 函数。
我有功能 logoutAction(e)
,当使用 setOnClickAction()
并在 Card
中的 TextButton
上设置此功能时 - 它工作正常。
但是当我使用 universalActions
中的相同函数时 - 我收到此错误:
SubmitFormResponseMarkup has disallowed value:card_navigations
function logoutAction(e) {
revokeToken();
var service = getOAuthService();
service.reset();
userProperties.setProperty('loggedIn', 'false');
// Create a Navigation object to push the card onto the stack.
// Return a built ActionResponse that uses the navigation object.
var nav = CardService.newNavigation().pushCard(loginFormBuild(e));
return CardService.newActionResponseBuilder().setNavigation(nav).build();
}
这里工作正常:
var logoutButton = CardService.newTextButton()
.setText("Logout")
.setOnClickAction(CardService.newAction().setFunctionName("logoutAction"));
content.addWidget(logoutButton);
但是清单中的 universalActions
- 它不起作用:
"universalActions": [{
"text": "Logout",
"runFunction": "logoutAction"
}]
有什么想法吗?
我们不能对简单动作和通用动作使用相同的函数。因为简单动作必须returnActionResponse
,而通用动作必须returnUniversalActionResponse
。
所以我们需要使用 CardService.newUniversalActionResponseBuilder()
CardService.newActionResponseBuilder()
正如@Roman 所建议的,在执行通用操作的导航操作时,您应该使用 UniversalActionResponseBuilder()。您的代码应更改为
function logoutAction(e) {
revokeToken();
var service = getOAuthService();
service.reset();
userProperties.setProperty('loggedIn', 'false');
return CardService.newUniversalActionResponseBuilder().displayAddOnCards([loginFormBuild(e).build()]).build();
}
根据您的函数 loginFormBuild(e) returns,您可能需要也可能不需要它的相关 build() 函数。