Я пытаюсь отправить событие в Google Analytics, используя протокол измерения из своего приложения Google App Engine (Java).Не удается отправить события в Google Analytics из Google App Engine
Я протестировал URL-адрес, отправив URL-адрес напрямую, и он сразу отображается (в реальном времени) в Google Analytics. Но когда я пытаюсь опубликовать его в приложении, ничего не появляется.
Итак, я предположил, что для начала мой код Java был ошибочным (возможно, был), поэтому я заменил свой код примером кода Google для интеграции с Google App Engine на Google Analytics here. Я изменил его немного, но вот ключевые биты ...
private static final URL GA_URL_ENDPOINT = getGoogleAnalyticsEndpoint();
private static URL getGoogleAnalyticsEndpoint() {
try {
return new URL("http", "www.google-analytics.com", "/collect");
} catch (MalformedURLException e) {
throw new RuntimeException(e);
}
}
public boolean trackEvent(
String category, String action, String label, String value) {
try {
Map<String, String> map = new LinkedHashMap<>();
map.put("v", "1"); // Version.
map.put("tid", gaTrackingId);
map.put("cid", "555");
map.put("t", "event"); // Event hit type.
map.put("ec", encode(category, true));
map.put("ea", encode(action, true));
map.put("el", encode(label, false));
map.put("ev", encode(value, false));
HTTPRequest request = new HTTPRequest(GA_URL_ENDPOINT, HTTPMethod.POST);
request.addHeader(CONTENT_TYPE_HEADER);
request.setPayload(getPostData(map));
HTTPResponse httpResponse = urlFetchService.fetch(request);
// Return True if the call was successful.
log.info("Response code for GA event is: " + httpResponse.getResponseCode());
return httpResponse.getResponseCode() >= 200;
} catch (Exception e) {
//HANDLE EXCEPTION
return false;
}
}
private static byte[] getPostData(Map<String, String> map) {
StringBuilder sb = new StringBuilder();
for (Map.Entry<String, String> entry : map.entrySet()) {
sb.append(entry.getKey());
sb.append('=');
sb.append(entry.getValue());
sb.append('&');
}
if (sb.length() > 0) {
sb.setLength(sb.length() - 1); // Remove the trailing &.
}
log.info("GA event string is: " + sb.toString());
return sb.toString().getBytes(StandardCharsets.UTF_8);
}
private static String encode(String value, boolean required)
throws UnsupportedEncodingException {
if (value == null) {
if (required) {
throw new IllegalArgumentException("Required parameter not set.");
}
return "";
}
return URLEncoder.encode(value, StandardCharsets.UTF_8.name());
}
Когда этот бит кода называется, я получаю строку параметров из моего файла журнала:
v=1&tid=UA-XXXXXXXX-1&cid=555&t=event&ec=settings&ea=autopost-on&el=rkAutoPost&ev=5
Я также см., что я получаю код ответа 2xx от звонка в google. Но ничего не появляется в интерфейсе GA (в реальном времени или иначе).
Итак, я стараюсь просто делать Достаньте из внутри моего браузера ...
http://www.google-analytics.com/collect?v=1&tid=UA-XXXXXXXX-1&cid=555&t=event&ec=settings&ea=autopost-on&el=rkAutoPost&ev=5
... и сразу же попадает GA в реальном времени. Таким образом, это говорит мне, что это не проблема с содержанием сообщения.
Примечание. Я также создал совершенно новый чистый вид, чтобы убедиться, что ничего не отфильтровано ... не помогло.
Любые идеи, пожалуйста? Спасибо!
Он действительно включил бит «собрать», не так ли? –
Да. Я добавил немного кода наверху, чтобы показать, что GA_URL_ENDPOINT – nickpharris