超出范围时 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分钟的暂停时间比较长,我们正在讨论是否应该缩短。)
如果您需要更多帮助来弄清楚发生了什么,请告诉我。
- 段
我不太明白 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分钟的暂停时间比较长,我们正在讨论是否应该缩短。)
如果您需要更多帮助来弄清楚发生了什么,请告诉我。
- 段