我在让Worklight Analytics自定义事件工作(WLv6.1)时遇到了很大的问题。
对于我的环境,我使用的是最新的6.1.0.1 (0718)。我们已经在一个AWS实例上安装了Analytics以进行开发,我将通过worklight.properties来指向它。操作分析仪表板可访问并显示正确的基本分析数据。
我在mobileWeb (仅用于开发人员)、iPhone和安卓环境中遇到了问题。
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 335Android仿真器:当调用分析发送时(在排队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)下面是非常基本的分析调用,本质上是来自WL6.1 InfoCenter的剪切/粘贴:
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上发送。
任何帮助都将不胜感激。我可以根据需要提供更多的信息。
发布于 2014-08-18 12:57:05
mobileWeb:我将跟进避免使用WL.Client.isConnected的必要性
iOS:jnortey是正确的;客户机不应该知道分析服务器的URL。如果在某个时候,您在TLFConfigurableItems.plist文件中有了地址,运行了您的应用程序,然后用@USE_WORKLIGHT_DEFAULT@替换了TLFConfigurableItems.plist中的值,那么旧的硬编码值可能一直存在,您应该卸载/重新安装应用程序,或者清除所有数据,然后再试一次。
Android:和iOS一样的故事。如果TLFConfigurableItems.properties文件是与硬编码值一起使用的,则该值一直存在,您需要卸载/重新安装应用程序,或者清除所有数据,然后再试一次。
另外,你在测试什么版本的安卓系统?Kitkat更改了DeflaterOutputStream行为,如果在finish()之后调用(),就会引发异常。Tealeaf库的版本可能正是这样做的,因此您需要在Android上更新Tealeaf库,以适应Android的DeflaterOutputStream行为的变化。
发布于 2014-08-12 15:22:30
编辑:
在我第二次看完之后,我看到了另一个问题:
TL库错误: url:散装流errorjava.util.zip.DataFormatException:流错误
和
您的客户端是否直接将数据发送到"/iwap/v1/events/_bulk"?客户端数据不应直接进入分析服务器。它必须通过worklight服务器,然后worklight服务器将其转发到分析服务器。您是否将客户端代码配置为指向"/iwap/v1/events/_bulk"?如果删除此配置,则应默认为指向worklight服务器的正确位置。
原件:
在Worklight 6.1中,Worklight使用掩护下的Tealeaf来收集和发送分析数据。当分析数据在循环中发送到Tealeaf时,由于某种原因而失败。不要在循环中调用,而是使用按钮手动调用WL.Analytics.log。
https://stackoverflow.com/questions/25249286
复制相似问题