【发布时间】:2017-06-29 06:33:15
【问题描述】:
使用“试试看!” GTM API 文档中的功能: https://developers.google.com/tag-manager/api/v1/reference/accounts/containers/variables/list?authuser=2 我可以从 GTM 获取包含我的变量的列表
但是,当我尝试更新变量 (https://developers.google.com/tag-manager/api/v1/reference/accounts/containers/variables/update?authuser=2) 时,再次使用“试试看!”,我得到:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "invalidArgument",
"message": "Bad Request"
}
],
"code": 400,
"message": "Bad Request"
}
}
我很确定我正确插入了所有参数,经过一天的尝试后,我认为 GTM 的更新变量 API 有问题。
有人可以确认更新 GTM 变量对他们有用吗?
我也尝试从后端执行此操作并弹出相同的响应。
这是我的代码:
public void Authenticate()
{
string serviceAccountEmail = "xxxxxxxxxxxx@local-proj.iam.gserviceaccount.com";
string folder = System.Web.HttpContext.Current.Server.MapPath("/App_Data/MyGoogleStorage/key.p12");
var certificate = new X509Certificate2(folder, "notasecret", X509KeyStorageFlags.Exportable);
ServiceAccountCredential credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(serviceAccountEmail)
{
Scopes = new[] { TagManagerService.Scope.TagmanagerEditContainers}
}.FromCertificate(certificate));
// Create the service.
var service = new TagManagerService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "My Local Proj"
});
此时服务已通过身份验证,所以我可以简单地做:
var myGTMVars = service.Accounts.Containers.Variables.List("AccountID", "ContainerID").Execute();
从后端的 GTM 获取我的所有变量。一切正常。
但是当我尝试更新一个时:
Variable gTMVar = new Variable();
gTMVar.Name = "IsAfterSignUpSuccess";
gTMVar.Type = "c";
var param = new Parameter()
{
Type = "template",
Value = "true"
};
gTMVar.Parameter = new List<Parameter>();
gTMVar.Parameter.Add(param);
try
{
var newVar = service.Accounts.Containers.Variables.Update(body: gTMVar, accountId: "xxx", containerId: "xxx", variableId: "x").Execute();
}
catch (Exception ex)
{
}
每次给我 BadRequest 都会失败。我尝试了不同的参数,变量的不同类型,但没有任何帮助。还尝试了不同的范围来启动服务 - 没有任何帮助。
关于这个主题的信息很差,尤其是对于 c#。
我在这里发布了我的代码 - 希望可以节省一些人的时间,因为在没有用户交互的情况下从后端验证服务并不是直接的。 (最终结果很容易)
【问题讨论】:
-
你解决了吗?我在 awct 标签上遇到了类似的问题,虽然每个设置和参数都完全正确,但它仍然返回 400 Bad Request,在自定义 html 中效果很好,我已经完全复制了字典中推荐的设置,但似乎没有任何效果.
-
我最终放弃了这种集成,因为我知道它主要用于管理容器本身,而不是从后端打磨事件或其他东西。
标签: c# .net google-api oauth-2.0 google-tag-manager