超出范围时 Google 附近的 iOS 未调用 messageLostHandler

messageLostHandler not called on Google Nearby iOS when out of range

我不太明白 messageLostHandler 是在 subscriptionWithMessageFoundHandler 方法上触发的。

这是我的代码:

func suscribeToNearbyDevices(myUserId: String){

    subscription = messageMgr?.subscription(messageFoundHandler: { (message: GNSMessage?) in
        if let incomingMessage = message, let content = incomingMessage.content {
            if let userIdEncoded = String(data: content, encoding: String.Encoding.utf8) {

                    NotificationCenter.default.post(name: Notification.Name(rawValue: CommunicationVariables.newUserNotificationKey), object: nil,
                                                    userInfo:userIdEncoded)

        }}, messageLostHandler: { (message: GNSMessage?) in
            if let incomingMessage = message, let content = incomingMessage.content {
                if let userIdEncoded = String(data: content, encoding: String.Encoding.utf8) {
                    NotificationCenter.default.post(name: Notification.Name(rawValue: CommunicationVariables.exitUserNotificationKey), object: nil,
                                                    userInfo: [CommunicationVariables.userIdNotificationField:userIdEncoded])
                }
            }
    }, paramsBlock:{(params:GNSSubscriptionParams?) in
        guard let params = params else { return }
        params.strategy = GNSStrategy(paramsBlock: { (params: GNSStrategyParams?) in
            guard let params = params else { return }
            params.allowInBackground = true
        })
    })
}

我有两部iphone,如果我把这两个应用程序放在前台,他们可以看到对方。当我按下 home 时, messageLostHandler 被触发,但如果我走出范围(比如超出范围之外) messageLostHandler 从未被触发。

为什么?是什么原因导致 messageLostHandler 被触发?

谢谢!

我看到您的订阅已配置为在后台运行,但是该出版物是否也配置为在后台运行?如果不是,那么当您按下发布设备上的主页按钮时,应用程序将进入后台,导致发布被禁用,并且订阅者会收到对 messageLostHandler 块的调用。

关于 out-of-range 问题:BLE(低功耗蓝牙)的工作范围非常大(室外可达 100 米,有障碍物时更小)。所以你必须走很远才能让设备完全超出范围。另一种方法是将其中一个设备放置在一个完全封闭的金属盒(法拉第笼)内,该金属盒会阻止所有无线电传输。在 2-3 分钟内,订阅者应该会收到对 messageLostHandler 块的调用。 (顺便说一句,2-3分钟的暂停时间比较长,我们正在讨论是否应该缩短。)

如果您需要更多帮助来弄清楚发生了什么,请告诉我。