1

ワークライトにジオフェンスを実装していますが、ジオトリガーを動的に作成したいと考えています。この投稿を見て彼女のコードを試しましたが、うまくいきません。偽の位置情報を使用してジオフェンスに入りましたが、コールバック関数がトリガーされませんでした。これが私のコードです。branch_data_gは、経度と緯度を含む json 文字列です。

function getFirstPositionAndTrack() {
    WL.Logger.info("getfirstpositionandtrack function");
    // use GPS to get the user's location
    var geoPolicy = WL.Device.Geo.Profiles.LiveTracking();
    geoPolicy.timeout = 60000; // set timeout to 1 minute
    geoPolicy.maximumAge = 10000; // allow to use a position that is 10 seconds old

    // note: to see at high-accuracy, change RoughTracking above to LiveTracking

    // get the user's current position
    WL.Device.Geo.acquirePosition(
            function(pos) {
                WL.Logger.debug("acquired position");   
                WL.Logger.debug("Longitude: " + pos.coords.longitude);
                WL.Logger.debug("Latitude: " + pos.coords.latitude);

                var triggers = new Object();
                triggers.Geo = {};

                var trigger_events = generateTrigger();

                triggers.Geo = trigger_events;              

                WL.Device.startAcquisition({ Geo: geoPolicy }, triggers, { Geo: alertOnGeoAcquisitionErr } );
            },
            function(geoErr) {
                alertOnGeoAcquisitionErr(geoErr);
                // try again:
                getFirstPositionAndTrack();
            },
            geoPolicy.Geo
        ); 
}

function generateTrigger() {
    var parsed_data = JSON.parse(branch_data_g);
    WL.Logger.info("generatetrigger function: " + parsed_data.branches.length);
    var trigger_events = new Object();
    WL.Logger.info("sample: " + parsed_data.branches[0].latitude);
    for(var i = 0; i < parsed_data.branches.length; i++) {
        var trigger = {
                type: "Enter",
                circle: {
                    longitude: parsed_data.branches[i].longitude,
                    latitude: parsed_data.branches[i].latitude,
                    radius: 100
                },
                callback: function() {
                    WL.Logger.info("Enter branch");
                    WL.Client.transmitEvent({ branch: "enter branch"}, true);
                }
        };
        trigger_events["branch"+i] = trigger;
    }

    return trigger_events;
}

私のアダプターのコードは次のとおりです。

function eventHandler() {
    //nothing to do here..
}

WL.Server.setEventHandlers([
    WL.Server.createEventHandler({branch: 'enter branch'}, eventHandler)
]);

何か不足していますか?前もって感謝します!

4

1 に答える 1

0

最初に WL.Client.connect を呼び出しましたか? WL.Client.transmitEvent は、接続が少なくとも 1 回確立されるまでイベントを送信しないことに注意してください。

WL.Logger.info メッセージを探してコールバックをチェックしていると思います。それ以外の場合は、サーバー側で何もしていないことがわかります (ただし、イベント処理は未加工のレポート データベースに記録される可能性があります)。

同様に、Enter ではなく DwellInside トリガー (dwellingTime を 0 に設定) を試すこともできます。入るには、エリアの外から始めて、その中に入る必要があります。

于 2014-09-09T12:40:24.973 に答える