繁体   English   中英

谷歌分析测量协议/实时事件未显示

[英]Google Analytics Measurement Protocol / real time events not showing

我正在使用 C 代码记录来自嵌入式应用程序的 HTTP POST 请求,并看到实时事件显示在一个 GA 帐户上,但没有显示在另一个帐户上。

在这两种情况下,事件都会在第二天作为注册消息出现在应用程序概览中,因此发布似乎有效。 然而,我没有看到事件出现在实时部分。

笔记:

    i) 客户端 ID 在两种情况下都是相同的 GUID [cid=35009a79-1a05-49d7-b876-2b884d0f825b]
    ii) 唯一的区别是跟踪代码 [tid=UA-XXXX-YY]
    iii)我知道参数“ev”和“el”不是必需的(插入它们没有区别)
    iv) 插入“an”参数(例如an=MyApp)使事件实时显示; 但是删除 an=MyApp 会使事件不会显示为实时事件(但它确实会在第二天显示为注册事件)


任何想法这里发生了什么?

[顺便说一句(尽管这不会造成任何区别),我已经在开发人员控制台中启用了 GA API,并且在这两种情况下我都使用相同的 DeveloperConsole 生成的客户端 ID。]

编辑:这是 HTTP 帖子的一个代表性片段:-

static BYTE ServerName[] = "www.google-analytics.com";
static WORD ServerPort = 80;
static BYTE GAClientID[] = "35009a79-1a05-49d7-b876-2b884d0f825b";
static BYTE GATrackingCode[] = "UA-XXXXXXX-Y";
static ROM BYTE ContentLength[4];

strcpy(pPayloadBuffer, (ROM BYTE*)"v=1");
strcat(pPayloadBuffer, (ROM BYTE*)"&tid=");
strcat(pPayloadBuffer, (ROM BYTE*)GATrackingCode);
strcat(pPayloadBuffer, (ROM BYTE*)"&cid=");
strcat(pPayloadBuffer, (ROM BYTE*)GAClientID);

strcat(pPayloadBuffer, (ROM BYTE*)"&an=MyApp2&t=pageview&dp=Test");

strcat(pPayloadBuffer, (ROM BYTE*)"&t=event&ev=55&el=label&cd2=");

// get SNTP time and convert to struct tm
dwSNTPseconds = SNTPGetUTCSeconds();
timeNow = gmtime((const time_t*)&dwSNTPseconds);

// inspect values in tm struct
sec = timeNow->tm_sec;
min = timeNow->tm_min;
hour = timeNow->tm_hour;
day = timeNow->tm_mday;
month = timeNow->tm_mon;
year = timeNow->tm_year + 1900;

// years
uitoa(year, sBuffer);
strcat(pPayloadBuffer, sBuffer);

// months
if (month<10) {
    strcat(pPayloadBuffer, "0");
}
uitoa(month, sBuffer);
strcat(pPayloadBuffer, sBuffer);

// days
if (day<10) {
    strcat(pPayloadBuffer, "0");
}
uitoa(day, sBuffer);
strcat(pPayloadBuffer, sBuffer);

// hours
if (hour<10) {
    strcat(pPayloadBuffer, "0");
}
uitoa(hour, sBuffer);
strcat(pPayloadBuffer, sBuffer);

// minutes
if (min<10) {
    strcat(pPayloadBuffer, "0");
}
uitoa(min, sBuffer);
strcat(pPayloadBuffer, sBuffer);

// seconds
if (sec<10) {
    strcat(pPayloadBuffer, "0");
}
uitoa(sec, sBuffer);
strcat(pPayloadBuffer, sBuffer);

// Temperature
strcat(pPayloadBuffer, (ROM BYTE*)"&cm1=");
uitoa(gTemperature, tmpString);
strcat(pPayloadBuffer, tmpString);

lenPayload = strlen(pPayloadBuffer);

// Place the application protocol data into the transmit buffer
TCPPutROMString(MySocket, (ROM BYTE*)"POST /collect HTTP/1.1\r\n");
TCPPutROMString(MySocket, (ROM BYTE*)"Host: ");
TCPPutString(MySocket, ServerName);
TCPPutROMString(MySocket, (ROM BYTE*)"\r\n");
TCPPutROMString(MySocket, (ROM BYTE*)"Content-Type: text/xml; charset=utf-8\r\n");
TCPPutROMString(MySocket, (ROM BYTE*)"Content-Length: ");
uitoa(lenPayload, (BYTE*)ContentLength);
TCPPutString(MySocket, (BYTE*)ContentLength);
TCPPutROMString(MySocket, (ROM BYTE*)"\r\n");
TCPPutROMString(MySocket, (ROM BYTE*)"Accept-Language: en-us \r\n");
TCPPutROMString(MySocket, (ROM BYTE*)"Accept-Encoding: gzip, deflate \r\n");
TCPPutROMString(MySocket, (ROM BYTE*)"Connection: Keep-Alive \r\n\r\n");
TCPPutString(MySocket, pPayloadBuffer);

// end of line
TCPPutROMString(MySocket, (ROM BYTE*)"\r\n");
TCPPutROMString(MySocket, (ROM BYTE*)"\r\n");
// Send the packet
TCPFlush(MySocket);

不是一个完整的答案我只是想帮助调试:

对于应用帐户,它的 &t= screenview不是 &t=pageview

对于应用程序帐户,以下是未记录的必填字段

  • an – 应用程序名称示例:an=My%20Awesom%20APP
  • 援助 - 应用程序 ID 示例:aid=com.daimto.awesom.app
  • av – 应用程序版本示例:av=1.0.0
  • aiid – 应用程序安装程序 ID 示例:aiid=come.daimto.awesom.installer

尝试检查您的 GA 帐户上是否有不同的过滤器,它没有显示出来。我遇到了同样的问题,结果是 IP 过滤器。

我有同样的问题:从服务器记录的事件存在于常规分析中,但不是实时的。 并使用命中构建器发送相同的有效负载。

比较hit builder和我的后端发送的headers,发现需要添加user-agent header来获取实时视图中显示的事件: "user-agent": "Mozilla/5.0 (My App Server) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM