【问题标题】:How to make a flag counter with react-native-beacons-manager如何使用 react-native-beacons-manager 制作标志计数器
【发布时间】:2018-04-25 19:24:11
【问题描述】:

场景

  • 我们的应用程序旨在检测放置在我们应用程序餐厅内的信标 使用 react-native-beacons-manager
  • 当我们的应用检测到信标时,我开发了一个云功能,它接受信标的主键并使用它从我的数据库中查询该餐厅的数据
  • 云功能随后会向用户发送有关餐厅详细信息的推送通知。

问题

我检测信标的方式并不稳定。这是我的流程。我创建了一个位于

的函数
this.beaconsDidRangeEvent = Beacons.BeaconsEventEmitter.addListener(
   //function-here 
); 

我可以接收信标信息,例如 uuid、主要和次要键以及邻近度(立即、近、远、未知)。现在在该函数中,我使用主键来确定每个信标的个性。现在,我做了一个这样的条件:

 let beaconArr = data.beacons;
        console.log(beaconArr);
        console.log(count);
        if (beaconArr.length > 0) {
          console.log("beacons detected!");
          let major = data.beacons[0].major;
          let prox = data.beacons[0].proximity;

          if ((prox === "near" || prox === "far") && beaconFlag === false && count === 0) {
            console.log("beacon Action");
            this.props.beaconAction(major);
            this.props.createCheckInHistory(user.uid);
            beaconFlag = true;
            count++;
          } else {
            console.log("counter turned to 1!");
            console.log(data);
            beaconFlag = true;
          }
        } else {
          console.log("no beacons detected!");
          count = 0;
          beaconFlag = false;
        }

预期结果

我希望条件为 true 的函数只会触发一次。

实际结果 有时,它可以,有时它不是。即使我还在信标的范围内,突然信标的数组变成了0。然后突然我会一次又一次地收到推送通知。

componentDidMount() 代码

componentDidMount() {
    this.props.selectedIcon('map');

    firebase
      .messaging()
      .getInitialNotification()
      .then(notification => {
        console.log("Notification which opened the app: ", notification);
      });

    const user = firebase.auth().currentUser;
    let count = 0;
    let beaconFlag = false;
    //  will be set as a reference to "regionDidEnter" event:
    this.beaconsDidRangeEvent = Beacons.BeaconsEventEmitter.addListener(
      "beaconsDidRange",
      _.throttle(data => {
        let beaconArr = data.beacons;
        console.log(beaconArr);
        console.log(count);
        if (beaconArr.length > 0) {
          console.log("beacons detected!");
          let major = data.beacons[0].major;
          let prox = data.beacons[0].proximity;

          if ((prox === "near" || prox === "far") && beaconFlag === false && count === 0) {
            console.log("beacon Action");
            this.props.beaconAction(major);
            this.props.createCheckInHistory(user.uid);
            beaconFlag = true;
            count++;
          } else {
            console.log("counter turned to 1!");
            console.log(data);
            beaconFlag = true;
          }
        } else {
          console.log("no beacons detected!");
          count = 0;
          beaconFlag = false;
        }
      }, 3000)
    );

    // monitoring events
    this.regionDidEnterEvent = Beacons.BeaconsEventEmitter.addListener(
      "regionDidEnter",
      data => {
        console.log("monitoring - regionDidEnter data: ", data);
      }
    );

    // Monitoring: Listen for device leaving the defined region
    this.regionDidExitEvent = Beacons.BeaconsEventEmitter.addListener(
      "regionDidExit",
      data => {
        console.log("monitoring - regionDidExit data: ", data);
      }
    );
  }

【问题讨论】:

    标签: react-native ibeacon


    【解决方案1】:

    这是在信标应用中测距时的常见问题。有时检测到的信标会短暂退出,然后又回来。这可以通过软件过滤器来解决,您可以在其中跟踪您最近看到的所有信标,并且只执行最近没有发生的操作。在您的情况下,您可以使用专业作为过滤器对象索引的键。

     // scope this globally 
     var minimumRetriggerMillis = 3600 * 1000; // 1hr
     var recentTriggers = {};
    
     // Before executing your trigger action:
    
     var now = new Date().getTime();
     if (recentTriggers[minor] == null || now-recentTriggers[minor] > minimumRetriggerMillis) {
       recentTriggers[minor] = now;
       // TODO: execute trigger logic here
    
     }
    

    【讨论】:

    • 你能进一步解释一下 minimumRetriggerMillis = 3600 * 1000
    • 这将忽略一个小时内发生的重复触发器。
    • 它说 newDate 没有定义。如果我用 Moment 替换它可以吗?
    • 代码 sn-p 只是缺少一个空格。它应该是new Date()。我会编辑。
    猜你喜欢
    • 2018-05-01
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    • 2022-08-07
    相关资源
    最近更新 更多