Worklight Analytics のカスタム イベントを機能させるには大きな問題があります (WL v6.1)。
私の環境では、最新の 6.1.0.1 (0718) を使用しています。開発用の AWS インスタンスに Analytics をインストールしました。これを worklight.properties 経由で指定しています。運用分析ダッシュボードにアクセスでき、正しい基本分析データが表示されます。
mobileWeb (開発のみに使用)、iPhone、および Android 環境で問題が発生しています。
mobileWeb: 分析キューのサイズが永久に増加し、送信がトリガーされません。firebug でコードを実行したところ、mobileWeb に対して常に false を返す非推奨の WL.Client.isConnected() メソッドを使用しているようです。したがって、これをハッキングして 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 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で送信を試みているようです。
どんな助けでも大歓迎です。必要に応じてより多くの情報を提供できます。