附近的快速api没有找到信标

时间:2016-01-31 19:47:17

标签: ios swift beacon google-nearby

我想使用我的swift ios应用程序使用谷歌附近的api扫描信标(不是iBeacon api)

我看到了Google开发人员doc,我从同一个网站上获取了git示例。

这是我的code

我第一次在真正的ios设备上安装了该应用程序

但永远不会调用foundlost处理程序。

我加倍检查了捆绑ID,公共ios API密钥(信标附件的相同google控制台项目)

但它仍然无法在工作和注册的灯塔附近工作。

我还有一个成功扫描同一个信标的Android应用程序。

我还能检查什么?

我在快速代码中缺少"Strategy"段代码。

我该如何添加?为什么在github示例中缺少这个?

GNSStrategy *beaconStrategy = [GNSStrategy
    strategyWithParamsBlock:^(GNSStrategyParams *params) {
      params.includeBLEBeacons = YES;
    }];
    GNSSubscriptionParams *beaconParams = [GNSSubscriptionParams
        paramsWithMessageNamespace:@"com.mycompany.mybeaconservice"
                              type:@"mybeacontype"
                          strategy:beaconStrategy];
    _beaconSubscription = [_messageManager subscriptionWithParams:beaconParams
                                              messageFoundHandler:myMessageFoundHandler
                                               messageLostHandler:myMessageLostHandler];

在我的代码中:

func startScanning() {
    if let messageMgr = self.messageMgr {

        // Subscribe to messages from nearby devices and display them in the message view.
        subscription = messageMgr.subscriptionWithMessageFoundHandler({[unowned self] (message: GNSMessage!) -> Void in

            self.mainViewController.location_text.text = (String(data: message.content, encoding:NSUTF8StringEncoding))
            self.mainViewController.startRefreshTimer()
            },

            messageLostHandler: {[unowned self](message: GNSMessage!) -> Void in

                if (self.mainViewController.userState.enrollState == EnrollState.confirmPosition)
                {
                    self.mainViewController.stopRefreshTimer()
                    self.mainViewController.enrollButtonManager.setSearchingForBeaconsBtn()
                }
            })
    }
}

1 个答案:

答案 0 :(得分:1)

您需要将GNSStrategy添加到订阅中,以便启用信标扫描。试试这个:

let params: GNSSubscriptionParams = GNSSubscriptionParams.init(strategy:
    GNSStrategy.init(paramsBlock: { (params: GNSStrategyParams!) -> Void in
      params.includeBLEBeacons = true;
    }))
subscription = messageMgr.subscriptionWithParams(params,
    messageFoundHandler:{[unowned self] (message: GNSMessage!) -> Void in
      self.mainViewController.location_text.text = (String(data: message.content, encoding:NSUTF8StringEncoding))
      self.mainViewController.startRefreshTimer()
    },
    messageLostHandler: {[unowned self](message: GNSMessage!) -> Void in
      if (self.mainViewController.userState.enrollState == EnrollState.confirmPosition) {
        self.mainViewController.stopRefreshTimer()
        self.mainViewController.enrollButtonManager.setSearchingForBeaconsBtn()
      }
    })

默认情况下,信标扫描处于关闭状态,因为iOS首次打开信标扫描时会向用户显示位置权限对话框,这对于使用“附近”库但不扫描信标的应用程序来说是不可接受的。

感谢有关github示例的反馈,但未显示如何扫描信标。我会看到添加它。