如何在iOS / Android / mobileWeb上运行Worklight 6.1 Analytics自定义事件?

时间:2014-08-11 17:43:19

标签: ibm-mobilefirst worklight-analytics

我在使Worklight Analytics自定义事件有效时遇到了重大问题(WL v6.1)。

对于我的环境,我正在使用最新的6.1.0.1(0718)。我们已在AWS实例上安装了用于开发的Analytics,我通过worklight.properties指向它。可以访问运营分析仪表板,并显示正确的基本分析数据。

我在mobileWeb(仅限dev),iPhone和Android环境中遇到问题。

mobileWeb:分析队列大小永远增加,永远不会触发发送。我在firebug中运行了代码,似乎使用了弃用的WL.Client.isConnected()方法,该方法总是为mobileWeb返回false。因此,我将其破解为返回true并且能够使mobileWeb正常工作:在10条消息之后刷新队列,并且可以在Analytics控制台服务器日志中查看结果。这确认了分析服务器至少配置正确。

iPhone模拟器:尝试在10条消息排队后发送。但是我在分析服务器上从IHS获得400。我尝试过提高日志级别,但无法生成更多内容:

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

Android模拟器:在调用分析发送时(排队10条消息后),我看到了TeaLeaf异常:

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()));
    }

我在for循环中迭代10次以触发分析发送。顺便说一句,我从来没有得到“队列被刷新”的消息,但它似乎至少尝试在iPhone / Android上发送。

非常感谢任何帮助。我可以根据需要提供更多信息。

2 个答案:

答案 0 :(得分:0)

编辑:

在我第二次看后,我看到另一个问题:

  

TL Library Error:url:http://:80 / iwap / v1 / events / _bulk   stream errorjava.util.zip.DataFormatException:stream error

  

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

您的客户是否直接将数据发送到&#34; / iwap / v1 / events / _bulk&#34;?客户端数据永远不应直接转到分析服务器。它必须通过worklight服务器,然后工作灯服务器会将其转发到分析服务器。您是否已将客户端代码配置为指向&#34; / iwap / v1 / events / _bulk&#34;?如果删除此配置,则应默认为指向worklight服务器的正确位置。

原件:

在Worklight 6.1中,Worklight使用Tealeaf来收集和发送分析数据。当分析数据以循环方式发送到Tealeaf时,由于某种原因它会失败。不要在循环中进行调用,而是尝试使用按钮手动调用WL.Analytics.log。

答案 1 :(得分:0)

mobileWeb :我会跟进避免使用WL.Client.isConnected的必要性

iOS :jnortey是正确的;客户端不应该知道分析服务器的URL。如果在某些时候,您在TLFConfigurableItems.plist文件中有地址,运行您的应用程序,然后使用@ USE_WORKLIGHT_DEFAULT @替换TLFConfigurableItems.plist中的值,旧的硬编码值可能已保留,您应该卸载/重新安装应用程序或清除所有数据,然后重试。

Android :与iOS相同的故事。如果TLFConfigurableItems.properties文件与硬编码值一起使用,则该值已保留,您需要卸载/重新安装该应用程序,或清除所有数据并重试。

此外,您正在测试哪个版本的Android? Kitkat changed the DeflaterOutputStream behavior such that if you call flush() after finish() an exception is thrown。你可能已经完成了Tealeaf库的版本,因此你需要Android上更新的Tealeaf库固定版本来适应Android的DeflaterOutputStream行为的变化。