Javascript 动态创建地理触发器worklight
我正在worklight中实现geofence,但我希望动态创建geo触发器。我看到了这一点,并尝试了她的代码,但它不适合我。我使用了假位置并输入了地理围栏,但没有触发回调函数。这是我的密码。branch_data_g是一个包含经度和纬度的json字符串Javascript 动态创建地理触发器worklight,javascript,ibm-mobilefirst,worklight-geolocation,Javascript,Ibm Mobilefirst,Worklight Geolocation,我正在worklight中实现geofence,但我希望动态创建geo触发器。我看到了这一点,并尝试了她的代码,但它不适合我。我使用了假位置并输入了地理围栏,但没有触发回调函数。这是我的密码。branch_data_g是一个包含经度和纬度的json字符串 function getFirstPositionAndTrack() { WL.Logger.info("getfirstpositionandtrack function"); // use GPS to get the u
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;
}
我错过什么了吗?提前谢谢 您是否先打电话给WL.Client.connect?请注意,WL.Client.transmitEvent在至少建立一次连接之前不会发送事件 我认为您正在通过查找WL.Logger.info消息来检查回调。否则,我看不到您在服务器端做任何事情(尽管事件处理仍然可以记录在原始报告数据库中)
此外,您可能希望尝试使用与Enter相反的READLEINTINDER触发器(将READLEINTIME设置为0);Enter要求从区域外部开始,然后在区域内部输入 1)您的Worklight版本+版本是什么?2) 您是如何设置权限的?我的worklight是6.2版。这是权限。我的代码在触发器是静态的情况下工作。但是,现在我尝试动态创建它们,它们不再工作了。对于遇到此问题的未来用户,您能否指出上面的哪些建议解决了您的问题?谢谢
function eventHandler() {
//nothing to do here..
}
WL.Server.setEventHandlers([
WL.Server.createEventHandler({branch: 'enter branch'}, eventHandler)
]);