测试已测试 | ✗ |
Lang语言 | Obj-CObjective C |
许可证 | 自定义 |
发布上次发布 | 2018年8月 |
由 Google 维护。
依赖关系 | |
GoogleInterchangeUtilities | ~> 1.2 |
GoogleNetworkingUtilities | ~> 1.2 |
GoogleSymbolUtilities | ~> 1.1 |
GoogleUtilitiesLegacy | ~> 1.3 |
允许您的用户以对话般顺畅的方式发现附近设备并分享消息。这使您可以实现丰富的交互,例如协作编辑、建立群组、投票或广播资源。
Nearby Messages API 可用于 Android 和 iOS,可提供无缝的跨平台体验。
请参阅Nearby开发者网站上的完整文档。
此代码创建了一个消息管理器对象,该对象允许您发布和订阅。消息交换是非认证的,因此您需要为 iOS 提供公钥 API。您可以使用项目的开发者控制台创建一个新的。
#import <GNSMessages.h>
GNSMessageManager *messageManager =
[[GNSMessageManager alloc] initWithAPIKey:kMyAPIKey];
此代码片段展示了如何发布包含名称的消息。只要发布对象存在,发布就是活跃的。要停止发布,请释放发布对象。
id<GNSPublication> publication =
[messageManager publicationWithMessage:[GNSMessage messageWithContent:[name dataUsingEncoding:NSUTF8StringEncoding]]];
此代码片段展示了如何订阅之前发布代码片段中共享的所有名称。只要订阅对象存在,订阅就是活跃的。要停止订阅,请释放订阅对象。
当发现发布消息的附近设备时,将调用消息查找处理程序。当不再观察消息时(设备已超出范围或不再发布消息),将调用消息失去处理程序。
id<GNSSubscription> subscription =
[messageManager subscriptionWithMessageFoundHandler:^(GNSMessage *message) {
// Add the name to a list for display
}
messageLostHandler:^(GNSMessage *message) {
// Remove the name from the list
}];
默认情况下,将使用两种介质(音频和蓝牙)来查找附近的设备,并且两种介质都将广播和扫描。在某些情况下,您需要在应用的 Info.plist
中添加以下条目
如果您的应用程序使用音频扫描,请添加 NSMicrophoneUsageDescription
,这是一个描述您将使用麦克风的字符串。例如,“麦克风监听来自附近设备的匿名令牌。”
如果您的应用程序使用BLE进行广播,请添加NSBluetoothPeripheralUsageDescription
,这是一段字符串,描述了您将在BLE上进行广告的原因。例如,“通过蓝牙广播匿名令牌以发现附近的设备。”
在某些情况下,您的应用程序可能只需要使用一种介质,并且它可能不需要在该介质上同时进行广播和扫描。
例如,一个旨在连接只通过音频进行广播的机顶盒的应用程序只需要在音频上扫描即可发现它。以下示例代码片段展示了如何仅使用音频扫描来发现该机顶盒并发布消息
id<GNSPublication> publication = [messageManager publicationWithMessage:message
paramsBlock:^(GNSPublicationParams *params) {
params.strategy = [GNSStrategy strategyWithParamsBlock:^(GNSStrategyParams *params) {
params.discoveryMediums = kGNSDiscoveryMediumsAudio;
params.discoveryMode = kGNSDiscoveryModeScan;
}];
}];
需要用户同意才能启用设备发现。这表示为附近权限状态。在第一次调用创建发布或订阅时,会向用户展示一个同意对话框。如果用户不同意,设备发现将无法工作。在这种情况下,您的应用程序应显示一条消息提醒用户设备发现已被禁用。权限状态存储在NSUserDefaults
中。
以下示例代码展示了如何订阅权限状态。当状态更改时,权限状态更改处理程序会被调用,而在用户首次授予或拒绝权限之前,它不会被调用。释放权限对象以停止订阅。
GNSPermission *nearbyPermission = [[GNSPermission alloc] initWithChangedHandler:^(BOOL granted) {
// Update the UI here
}];
您的应用程序可以为用户提供一个更改权限状态的方式;例如,在设置页面上使用切换开关。
以下是如何获取和设置权限状态的示例。
BOOL permissionState = [GNSPermission isGranted];
[GNSPermission setGranted:!permissionState]; // toggle the state
注意:应用程序应在用户输入后设置权限状态。切勿未经用户同意更改权限状态。
如果用户拒绝了麦克风权限、拒绝了蓝牙权限或者关闭了蓝牙,附近功能可能无法正常工作,甚至可能完全无法工作。在这种情况下,您的应用程序应显示一条消息,提醒用户附近操作受到阻碍。以下示例代码展示了如何在创建消息管理器时传递处理程序来跟踪这些用户设置的状态
GNSMessageManager *messageManager = [[GNSMessageManager alloc]
initWithAPIKey:kMyAPIKey
paramsBlock:^(GNSMessageManagerParams *params) {
params.microphonePermissionErrorHandler = ^(BOOL hasError) {
// Update the UI for microphone permission
};
params.bluetoothPowerErrorHandler = ^(BOOL hasError) {
// Update the UI for Bluetooth power
};
params.bluetoothPermissionErrorHandler = ^(BOOL hasError) {
// Update the UI for Bluetooth permission
};
}];
您的应用程序可以使用与订阅其他附近设备发布的消息相同的机制订阅低功耗蓝牙(BLE)信标消息。要订阅信标,请在订阅参数中将deviceTypesToDiscover
参数设置为kGNSDeviceBLEBeacon
。以下示例代码演示了如何执行此操作
id<GNSSubscription> beaconSubscription = [messageManager
subscriptionWithMessageFoundHandler:myMessageFoundHandler
messageLostHandler:myMessageLostHandler
paramsBlock:^(GNSSubscriptionParams *params) {
params.deviceTypesToDiscover = kGNSDeviceBLEBeacon;
}];
有关信标扫描的完整文档,请参阅附近开发者网站。
调试日志记录将重要的内部事件打印到控制台,这对于追踪您在将 Nearby Messages 集成到应用程序中时可能遇到的问题非常有用。如果您联系我们寻求帮助,我们将请求这些日志。
在创建消息管理器之前应该启用它。以下示例代码展示了如何启用调试日志记录
[GNSMessageManager setDebugLoggingEnabled:YES];
推荐使用CocoaPods进行安装。将以下行添加到您的项目Podfile中
pod 'NearbyMessages'
请查看Nearby开发者网站获取许可协议详情。