我在使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上发送。
非常感谢任何帮助。我可以根据需要提供更多信息。
答案 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行为的变化。