iOS 后台扫描上的 Google Nearby API
Posted
技术标签:
【中文标题】iOS 后台扫描上的 Google Nearby API【英文标题】:Google Nearby API on iOS background scanning 【发布时间】:2016-07-23 19:01:27 【问题描述】:我在我的 Swift 应用程序中设置了 Nearby API,当应用程序处于前台时我可以接收消息。在instructions in the docs
之后,我尝试将params.allowInBackground = true
包含在适当的位置,但出现错误:
Value of type 'GNSBeaconStrategyParams' has no member 'allowInBackground'
所以,我不能这样做,我的 GNSSubscription 对象如下所示:
subscription = messageManager.subscriptionWithMessageFoundHandler(
messageFoundHandler, messageLostHandler: messageLostHandler,
paramsBlock: (params: GNSSubscriptionParams!) in
params.deviceTypesToDiscover = .BLEBeacon
params.permissionRequestHandler = (permissionHandler: GNSPermissionHandler!) in
// TODO: Show custom dialog here, and call permissionHandler after it is dismissed
// show the dialogue
params.beaconStrategy = GNSBeaconStrategy(paramsBlock: (params: GNSBeaconStrategyParams!) in
params.includeIBeacons = true
//params.allowInBackground = true //*** THIS DOESN'T WORK ***
)
)
我的 messageHandler 如下所示:
messageFoundHandler = [unowned self](message: GNSMessage!) -> Void in
print("Found handler:", message.type, "->", String(data: message.content!, encoding:NSUTF8StringEncoding)!)
if UIApplication.sharedApplication().applicationState != .Active
let localNotification = UILocalNotification()
localNotification.alertBody = "Message received" + String(data: message.content!, encoding:NSUTF8StringEncoding)!
UIApplication.sharedApplication().presentLocalNotificationNow(localNotification)
messageLostHandler = (message: GNSMessage!) -> Void in
print("Lost Handler:", message.type, "->", String(data: message.content, encoding:NSUTF8StringEncoding)!)
有了这个设置和范围内的 Eddystone 信标,我现在可以在后台收到通知!既然这是我想要的,我应该很高兴。但是,如果我让设备连接到 xcode 并在后台使用应用程序,我开始看到这样的消息流(似乎大约每 5 秒一次):
2016-07-23 19:35:08.243 Hoc[1269:622746] Can't endBackgroundTask: no background task exists with identifier 2f3, or it may have already been ended. Break in UIApplicationEndBackgroundTaskError() to debug.
我使用的是 NearbyMessages 的 v0.10.0。如果有人能指出我正确的方向,让后台扫描在 ios 上可靠地工作,那就太好了。
【问题讨论】:
【参考方案1】:这是由 Cocoapods 的问题引起的。尽管我使用$ pod update
和类似方法从我的项目中删除/重新添加了 NearbyMessages cocoaPod,但由于某种原因,我无法安装 Nearby SDK 的最新版本(1.0.1)。解决方案是手动从Github 下载规范并覆盖~/.cocoapods/repos/master
中的文件。
然后,为了确保我安装了最新版本,我更改了我的 podfile 以包含 pod 'NearbyMessages', '~> 1.0.1'
,它可以正常工作。
现在我可以在 GNSBeaconStrategy 对象上设置适当的参数,并且 Eddystone 信标的后台扫描在 iOS 的后台工作。 :-)
我希望这会有所帮助。
【讨论】:
James,你最初的 Podfile 中有什么?如果您有pod 'NearbyMessages', '~> 0.10.0'
,您将无法获得具有后台支持的最新 CocoaPod。请注意,通过使用pod 'NearbyMessages', '~> 1.0.1'
,您将获得 1.0 版本的错误修复更新,但当它发布时您不会获得 1.1 版本。
感谢@DanWebb 我最初只有pod 'NearbyMessages'
,没有版本号。我将对其进行更改以获取更新,但是我的 cocoapod/git 设置发生了一些奇怪的事情,因此我可能无论如何都无法获得它们。谢谢以上是关于iOS 后台扫描上的 Google Nearby API的主要内容,如果未能解决你的问题,请参考以下文章
适用于 Android 的 Google Nearby Publish 在后台
是否可以在 Android 的后台使用 Google Nearby Messages 发布消息?
如何使用适用于 iOS 的 Google Nearby Messages API 确定设备之间的距离
Google Nearby 中的传入文件有效负载感知和 onPayloadTransferUpdate 频率
Gradle 无法解析 androidx.appcompat:appcompat:1.1.0-alpha01 和 com.google.android.gms:play-services-nearby