Как получить пользовательские события Worklight 6.1 Analytics, работающие на iOS/Android/mobileWeb?

У меня возникают серьезные проблемы с работой пользовательских событий Worklight Analytics (WL v6.1).

Для моего окружения я использую последнюю версию 6.1.0.1 (0718). Мы установили Analytics на экземпляр AWS для разработки, и я указываю на это с помощью worklight.properties. Панель инструментов операционной аналитики доступна и показывает правильные базовые аналитические данные.

У меня проблемы в мобильных сетях (использую это только для разработчиков), iPhone и Android.

mobileWeb: размер очереди аналитики увеличивается навсегда и никогда не вызывает отправку. Я пробежал по коду в firebug, и он, похоже, использует устаревший метод WL.Client.isConnected(), который всегда возвращает false для mobileWeb. Так что я взломал это, чтобы вернуть true, и смог заставить mobileWeb работать должным образом: очередь очищается после 10 сообщений, и результат можно просмотреть в журнале консоли сервера Analytics. Это подтверждает, что сервер аналитики настроен как минимум правильно.

Симулятор iPhone: попытки отправки после того, как 10 сообщений были поставлены в очередь. Однако я получаю 400 от IHS на аналитическом сервере. Я попытался увеличить уровень журнала, но не смог произвести больше ничего:

<wl_server_ip> - - [11/Aug/2014:13:12:42 -0400] "POST /iwap/v1/events/_bulk HTTP/1.1" 400 335

Эмулятор Android: я вижу исключение TeaLeaf, когда вызывается отправка аналитики (после 10 сообщений в очереди):

08-11 13:32:16.970: E/UICAndroid(1748): TL Library Error: url:http://<analytics_ip>:80/iwap/v1/events/_bulk stream errorjava.util.zip.DataFormatException: stream error
08-11 13:32:16.970: E/UICAndroid(1748):     at java.util.zip.Deflater.deflateImpl(Native Method)
08-11 13:32:16.970: E/UICAndroid(1748):     at java.util.zip.Deflater.deflateImpl(Deflater.java:241)
08-11 13:32:16.970: E/UICAndroid(1748):     at java.util.zip.Deflater.deflate(Deflater.java:232)
08-11 13:32:16.970: E/UICAndroid(1748):     at java.util.zip.DeflaterOutputStream.flush(DeflaterOutputStream.java:193)
08-11 13:32:16.970: E/UICAndroid(1748):     at com.tl.uic.util.HTTPUtil.createEntity(HTTPUtil.java:93)
08-11 13:32:16.970: E/UICAndroid(1748):     at com.tl.uic.util.HTTPUtil.sendPost(HTTPUtil.java:181)
08-11 13:32:16.970: E/UICAndroid(1748):     at com.tl.uic.util.HTTPUtil.sendHttpPost(HTTPUtil.java:115)
08-11 13:32:16.970: E/UICAndroid(1748):     at com.tl.uic.util.PostTask.sendMessageFormat(PostTask.java:72)
08-11 13:32:16.970: E/UICAndroid(1748):     at com.tl.uic.util.PostTask.doInBackground(PostTask.java:28)
08-11 13:32:16.970: E/UICAndroid(1748):     at com.tl.uic.util.PostTask.doInBackground(PostTask.java:1)
08-11 13:32:16.970: E/UICAndroid(1748):     at android.os.AsyncTask$2.call(AsyncTask.java:288)
08-11 13:32:16.970: E/UICAndroid(1748):     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
08-11 13:32:16.970: E/UICAndroid(1748):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
08-11 13:32:16.970: E/UICAndroid(1748):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
08-11 13:32:16.970: E/UICAndroid(1748):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
08-11 13:32:16.970: E/UICAndroid(1748):     at java.lang.Thread.run(Thread.java:841)

Вот самый базовый вызов аналитики, по сути, вырезка / вставка из Инфоцентра WL 6.1:

function doBetterAnalyticsWork(i) {
        WL.Analytics.log({hello: 'world ' + i}, 'test-analytics')
        .always(function(wasQueueFlushed, errObj){
            if (wasQueueFlushed) {
                WL.Logger.debug('The queue was flushed');
            } else {
                WL.Logger.debug('The queue was NOT flushed');
            }
            if (typeof errObj === 'object') {
                WL.Logger.error('Error trying to flush the queue', errObj);
            }
        });
        WL.Logger.debug('WL.Analytics.state(): ' + JSON.stringify(WL.Analytics.state()));
    }

Я повторяю это 10 раз в цикле for, чтобы инициировать отправку аналитики. Между прочим, я никогда не получаю сообщение "Очередь была сброшена", но, похоже, по крайней мере предпринимается попытка отправки на iPhone/Android.

Любая помощь приветствуется. Я могу предоставить больше информации по мере необходимости.

2 ответа

Решение

mobileWeb: я буду следить за необходимостью избегать использования WL.Client.isConnected

iOS: джнорти верен; клиент не должен знать URL-адрес сервера аналитики. Если в какой-то момент у вас был адрес в файле TLFConfigurableItems.plist, вы запустили свое приложение, а затем заменили значение в TLFConfigurableItems.plist на @USE_WORKLIGHT_DEFAULT@, старое жестко запрограммированное значение могло сохраниться, и вам следует удалить / переустановить приложение или очистите все данные и попробуйте снова.

Android: та же история, что и в iOS. Если файл TLFConfigurableItems.properties использовался с жестко заданным значением, это значение сохранялось, и вам потребуется удалить / переустановить приложение или удалить все данные и повторить попытку.

Кроме того, какую версию Android вы тестируете? Kitkat изменил поведение DeflaterOutputStream таким образом, что если вы вызываете flush() после finish(), генерируется исключение. Версия библиотеки Tealeaf, которая у вас есть, вероятно, делает именно это, и поэтому вам нужна более новая фиксированная версия библиотеки Tealeaf на Android, чтобы учесть изменение в поведении Android DeflaterOutputStream.

Редактировать:

После второго взгляда я вижу еще одну проблему:

Ошибка библиотеки TL: URL:http://:80/iwap/v1/events/_bulk stream errorjava.util.zip.DataFormatException: ошибка потока

а также

- - [11/Aug/2014:13:12:42 -0400] "POST /iwap/v1/events/_bulk HTTP/1.1" 400 335

Ваши клиенты отправляют данные напрямую в "/iwap/v1/events/_bulk"? Данные клиента никогда не должны идти напрямую на сервер аналитики. Он должен пройти через сервер рабочего освещения, а затем сервер рабочего освещения перенаправит его на сервер аналитики. Вы настроили свой клиентский код, чтобы он указывал на "/iwap/v1/events/_bulk"? Если вы удалите эту конфигурацию, она должна по умолчанию использовать правильное расположение, указывающее на сервер рабочего освещения.

Оригинал:

В Worklight 6.1 Worklight использует Tealeaf под крышками для сбора и отправки аналитических данных. Когда аналитические данные отправляются в Tealeaf в цикле, по какой-то причине они не выполняются. Вместо того чтобы делать вызовы в цикле, попробуйте вручную сделать вызов WL.Analytics.log с помощью кнопки.

Другие вопросы по тегам