我正在尝试使用Google的附近消息API,该API似乎易于使用,但是由于某些原因,它无法按预期运行。我怀疑这个问题是微不足道的,但我无法解决。
我反复检查的API密钥是正确的,我还添加权限NSMicrophoneUsageDescription
,并NSBluetoothPeripheralUsageDescription
在Info.plist中。
在Google开发人员控制台中启用了“附近消息” API,并且API密钥已设置为仅限于应用程序的捆绑包标识符。如果取消了此限制,它也不起作用。
class ViewController: UIViewController {
private var messageManager: GNSMessageManager?
override func viewDidLoad() {
super.viewDidLoad()
GNSMessageManager.setDebugLoggingEnabled(true)
messageManager = GNSMessageManager(apiKey: "<my-api-key>", paramsBlock: { (params: GNSMessageManagerParams?) -> Void in
guard let params = params else { return }
params.microphonePermissionErrorHandler = { hasError in
if hasError {
print("Nearby works better if microphone use is allowed")
}
}
params.bluetoothPermissionErrorHandler = { hasError in
if hasError {
print("Nearby works better if Bluetooth use is allowed")
}
}
params.bluetoothPowerErrorHandler = { hasError in
if hasError {
print("Nearby works better if Bluetooth is turned on")
}
}
})
// publish
messageManager?.publication(with: GNSMessage(content: "Hello".data(using: .utf8)))
// subscribe
messageManager?.subscription(messageFoundHandler: { message in
print("message received: \(String(describing: message))")
}, messageLostHandler: { message in
print("message lost: \(String(describing: message))")
})
}
}
还有其他人在设置此设置时遇到问题吗?
好的,对于任何有相同问题的人,解决方案都非常简单,几乎令人尴尬。必须将发布和订阅结果保存在类变量中:
private var publication: GNSPublication?
private var subscription: GNSSubscription?
override func viewDidLoad() {
super.viewDidLoad()
messageManager = GNSMessageManager(apiKey: "<my-api-key>")
// publish
publication = messageManager?.publication(with: GNSMessage(content: "Hello".data(using: .utf8)))
// subscribe
subscription = messageManager?.subscription(messageFoundHandler: { message in
print("message received: \(String(describing: message))")
}, messageLostHandler: { message in
print("message lost: \(String(describing: message))")
})
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句