Google Analytics测量协议/未显示的实时事件

时间:2014-12-05 16:59:40

标签: google-analytics measurement-protocol

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

在这两种情况下,事件都会在第二天的应用程序概述中显示为已注册消息,因此发布似乎正在发挥作用。然而,我并未在实时部分看到事件发生。

注意:

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

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

[顺便说一句(虽然这不会造成任何影响),我在开发者控制台中启用了GA API,并且我在两种情况下都使用相同的DeveloperConsole生成的客户端ID。]

EDITED: 以下是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);

3 个答案:

答案 0 :(得分:1)

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

对于应用帐户,其&amp; t = screenview not&amp; 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

答案 1 :(得分:0)

尝试检查您是否在未显示的GA帐户中使用不同的过滤器。我遇到了同样的问题,结果是由于IP过滤器。

答案 2 :(得分:0)

我遇到了同样的问题:从服务器记录的事件在常规分析中存在,但不是实时存在。 并且使用hit builder发送相同的有效载荷即可。

通过比较点击生成器和我的后端发送的标题,我发现需要添加user-agent标题才能在实时视图中显示事件:"user-agent": "Mozilla/5.0 (My App Server) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"