iOS 7 ANCS:发现主要 ANCS 服务 UUID

2023-11-24

在 iOS7 下,主要的 ANCS 服务是否需要不断进行广告宣传,或者是否需要在模糊设置中启用/使用自定义 CBPeripheralManager(使用 Apple 指定的服务和特征 UUID)实现,以便潜在的通知消费者成功发现它并订阅?

Apple 文档(两个CoreBluetooth 编程指南,以及ANCS规格)令人惊讶的是没有任何相关信息。他们似乎暗示需要自定义实现,但这只是我们的猜测。

给定主要 ANCS 服务 UUID:7905F431-B5CE-4E99-A40F-4B1E122D00D0,执行扫描不会产生任何命中。正如预期的那样,扫描整个 BLE 频谱会命中其他 BLE 设备,但不会命中单个 ANCS 设备。

EDIT 1:

定义自定义 CBPeripheralManager 并手动添加 Apple 指定的 ANCS 服务及其关联特征失败,并出现 NSError:Error Domain=CBErrorDomain Code=8 "The specified UUID is not allowed for this operation."

因此,服务 UUID 似乎是由 Apple 保留的(理应如此),我们无法以这种方式启用它。

任何见解都将不胜感激;我们已就此事与 Apple 联系,并将在收到他们的回复后进行更新。

下面的代码重现了上面提到的 NSError:

// define the ANCS Characteristics
CBUUID *notificationSourceUUID = [CBUUID UUIDWithString:@"9FBF120D-6301-42D9-8C58-25E699A21DBD"];
CBMutableCharacteristic *notificationSource = [[CBMutableCharacteristic alloc] initWithType:notificationSourceUUID properties:CBCharacteristicPropertyNotifyEncryptionRequired value:nil permissions:CBAttributePermissionsReadEncryptionRequired];
CBUUID *controlPointUUID = [CBUUID UUIDWithString:@"69D1D8F3-45E1-49A8-9821-9BBDFDAAD9D9"];
CBMutableCharacteristic *controlPoint = [[CBMutableCharacteristic alloc] initWithType:controlPointUUID properties:CBCharacteristicPropertyWrite value:nil permissions:CBAttributePermissionsWriteEncryptionRequired];
CBUUID *dataSourceUUID = [CBUUID UUIDWithString:@"22EAC6E9-24D6-4BB5-BE44-B36ACE7C7BFB"];
CBMutableCharacteristic *dataSource = [[CBMutableCharacteristic alloc] initWithType:dataSourceUUID properties:CBCharacteristicPropertyNotifyEncryptionRequired value:nil permissions:CBAttributePermissionsReadEncryptionRequired];

// define the ANCS Service
CBUUID *ANCSUUID = [CBUUID UUIDWithString:@"7905F431-B5CE-4E99-A40F-4B1E122D00D0"];
CBMutableService *ANCS = [[CBMutableService alloc] initWithType:ANCSUUID primary:YES];
ANCS.characteristics = @[notificationSource, controlPoint, dataSource];

// define the Advertisement data
NSMutableDictionary *advertisementData = [NSMutableDictionary dictionary];
[advertisementData setValue:@"CUSTOM_ANCS" forKey:CBAdvertisementDataLocalNameKey];
[advertisementData setValue:@"7905F431-B5CE-4E99-A40F-4B1E122D00D0" forKey:CBAdvertisementDataServiceUUIDsKey];

// publish the ANCS service
[self.peripheralManager addService:ANCS];

作为这个问题迟来的答案,现在小牛队已经出局了,这就是我们的想法。

我们最初在两台 iOS 设备(一台作为外围设备,一台作为中央设备)之间实施 ANCS 规范的努力并未成功。一段时间后,苹果公司回复了我们(向他们的传播者致敬)并告诉我们这是不可能的。

通过将 CBPeripheralManager 类和 CBPeripheralManagerDelegate 协议添加到 OSX Mavericks 上嵌入 IOBluetooth.framework 中的 CoreBluetooth.framework(深呼吸),我们现在可以在 OSX 设备上使用 BLE 无线电来实现和通告 ANCS。

因此,此代码片段属于 OSX 上的 CBPeripheralManager:

- (void) advertiseANCS
{
    NSLog(@"%s", __FUNCTION__);

    // define the ANCS Characteristics
    CBUUID *notificationSourceUUID = [CBUUID UUIDWithString:@"9FBF120D-6301-42D9-8C58-25E699A21DBD"];
    CBMutableCharacteristic *notificationSource = [[CBMutableCharacteristic alloc] initWithType:notificationSourceUUID properties:CBCharacteristicPropertyNotifyEncryptionRequired value:nil permissions:CBAttributePermissionsReadEncryptionRequired];
    CBUUID *controlPointUUID = [CBUUID UUIDWithString:@"69D1D8F3-45E1-49A8-9821-9BBDFDAAD9D9"];
    CBMutableCharacteristic *controlPoint = [[CBMutableCharacteristic alloc] initWithType:controlPointUUID properties:CBCharacteristicPropertyWrite value:nil permissions:CBAttributePermissionsWriteEncryptionRequired];
    CBUUID *dataSourceUUID = [CBUUID UUIDWithString:@"22EAC6E9-24D6-4BB5-BE44-B36ACE7C7BFB"];
    CBMutableCharacteristic *dataSource = [[CBMutableCharacteristic alloc] initWithType:dataSourceUUID properties:CBCharacteristicPropertyNotifyEncryptionRequired value:nil permissions:CBAttributePermissionsReadEncryptionRequired];

    // define the ANCS Service
    CBUUID *ANCSUUID = [CBUUID UUIDWithString:@"7905F431-B5CE-4E99-A40F-4B1E122D00D0"];
    CBMutableService *ANCS = [[CBMutableService alloc] initWithType:ANCSUUID primary:YES];
    ANCS.characteristics = @[notificationSource, controlPoint, dataSource];

    // define the Advertisement data
    NSMutableDictionary *advertisementData = [NSMutableDictionary dictionary];
    [advertisementData setValue:@"ANCS" forKey:CBAdvertisementDataLocalNameKey];
    [advertisementData setValue:@[ANCSUUID] forKey:CBAdvertisementDataServiceUUIDsKey];

    // publish the ANCS service
    [self.peripheralManager addService:ANCS];
    [self.peripheralManager startAdvertising:advertisementData];
}

而此代码段属于 iOS 设备上的 CBCentralManager:

- (void) discoverANCS
{
    NSLog(@"%s", __FUNCTION__);

    NSMutableArray *services = [NSMutableArray array];
    [services addObject:@"7905F431-B5CE-4E99-A40F-4B1E122D00D0"];

    NSMutableDictionary *options = [NSMutableDictionary dictionary];
    [options setValue:[NSNumber numberWithBool:NO] forKey:CBCentralManagerScanOptionAllowDuplicatesKey];

    [self.centralManager scanForPeripheralsWithServices:services options:options];
}

iOS 设备现在可以查看并连接到 OSX 无线电,该无线电实现了 Apple 文档中详细介绍的 ANCS 规范。

<CBCentralManager: 0x14e23280> <CBPeripheral: 0x14d27b40 identifier = 7231B80F-874E-DB5F-2AF9-7F376911E2B7, Name = "ANCS", state = disconnected> {
    kCBAdvDataChannel = 39;
    kCBAdvDataIsConnectable = 1;
    kCBAdvDataLocalName = ANCS;
} -60

快乐狩猎

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS 7 ANCS:发现主要 ANCS 服务 UUID 的相关文章

  • iOS7 XIB 问题。顶部和底部的空白

    我有一个正在设置 ImageView 的视图 自动布局已选中 预览中看起来不错 但当应用程序实际在模拟器上运行时 仅在 iPhone 视网膜 4 英寸模拟器中 顶部和底部显示空白 3 5寸的看起来还不错 使用 iOS7 和 XCODE 5
  • 使用 iOS 7 检索设备 WiFi MAC 地址

    我们的应用程序使用设备 WiFi MAC 地址来唯一标识设备 根据苹果文档 https developer apple com news id 8222013a我们将开始使用 UIDevice 的identifierForVendor 属性
  • 错误域=NSURLErrorDomain代码=-1017“该操作无法

    我刚刚开始 ios 开发 我正在尝试与我的 api 交换数据 当我执行 POST 请求时 一切正常 但当我尝试执行 GET 请求时 出现以下错误 错误域 NSURLErrorDomain代码 1017 该操作无法 完全的 NSURLErro
  • 如何将 UIPopoverPresentationController 的高度设置为与 UITableView 相同

    我在我的应用程序上使用 UIPopoverPresentationController 在我的 iPhone 上显示弹出窗口 使用 UIModalPresentationNone 我希望尺寸随着 UITableView 的高度而动态变化 但
  • 如何通过填充 NSDictionary 以 JSON 格式发送 UIImage

    我正在尝试使用 JSON 将数据发送到服务器 我可以使用我的对象和关键参数创建 NSDictionary 但我想发送我的图片 图片是UIImage NSDictionary mainJSON NSDictionary dictionaryW
  • 方向改变时重新定位控件

    我知道自动布局可用于在方向改变时使尺寸和位置保持一致 当方向改变时 是否可以完全改变布局 例如 请查看下面的纵向模式下简单登录屏幕的线框 现在 如果我旋转设备 我想完全重新定位控件 这种事情可以用自动布局来完成吗 如果没有 我该怎么办 谢谢
  • 如何在我的应用程序中添加应用内购买

    我想在我的应用程序中使用应用程序购买应用程序 但我不知道如何执行此操作 任何人都可以帮助我如何做以及源代码在哪里 给我链接或代码 这里有一堆链接 应用内购买编程指南 http developer apple com iphone libra
  • 在完成块中保留循环

    在我的课堂上 我创建了这个方法 void refreshDatasourceWithSuccess CreateDataSourceSuccessBlock successBlock failure CreateDataSourceFail
  • 如何以编程方式设置设备(UI)方向?

    希望屏幕 UI 上的所有内容都能够从横向左向右旋转 反之亦然 我该怎么做呢 这是私人的吗 我知道 BOOL shouldAutorotateToInterfaceOrientation UIInterfaceOrientation inte
  • 如果您使用 CocoaPods,您的 .gitignore 中会包含什么内容?

    我从事 iOS 开发已经几个月了 刚刚了解到有前途的可可豆荚 http cocoapods org 用于依赖管理的库 我在个人项目上尝试过 添加了依赖项Kiwi https github com allending Kiwi到我的 Podf
  • NSCFData isRessized 崩溃?

    我目前在控制台中收到此崩溃日志 2011 08 23 19 18 40 064 App 1697 707 NSCFData isResizable unrecognized selector sent to instance 0x11f1c
  • 使用 NSString 进行 UTF8 解码

    我是 Objective C 新手 尝试使用以下示例将格式错误的 UTF8 编码 NSString 转换为格式良好的字符串苹果文档 http developer apple com library mac documentation Coc
  • 从一个模态视图无缝翻转到另一个模态视图,而不显示纯色背景

    我的 iPad 应用程序的 UI 如下 当我点击Settings按钮 我希望对话框水平翻转以显示设置对话框 我这个工作正常 但是 当对话翻转时会显示背景颜色 如你看到的 有什么办法可以让对话框翻转时不显示该颜色块吗 我希望它看起来更加无缝
  • (Kiss)XML xpath 和默认命名空间

    我正在开发一个 iPhone 项目 需要解析一些 xml xml 可能包含也可能不包含默认名称空间 我需要知道如何解析 xml 以防它使用默认命名空间 由于我需要读取和写入 xml 因此我倾向于使用 KissXML 但我愿意接受建议 这是我
  • 如何在没有 SDK 的情况下在 Objective C 中为 S3 创建预签名 URL?

    我正在构建一个 mac 应用程序not使用 AWS iOS 开发工具包 我尝试构建的 GET 请求应遵循以下通用格式 Authorization AWS AWSAccessKeyId base64 hmac sha1 VERB n CONT
  • 访问目标 c 中的类方法。使用 self 还是类名?

    我正在学习 iOS 编程 并且对以下有关关键字 self 的使用的代码感到困惑 据我了解 self就像Java的this 它指的是当前实例 当我想调用类方法时 通常的方式应该是这样 PlayingCard validSuits 但是侵入实例
  • Objective-C 中发送给对象的消息可以被监听或者打印出来吗? [复制]

    这个问题在这里已经有答案了 可能的重复 Objective C 中拦截方法调用 https stackoverflow com questions 1618474 intercept method call in objective c 如
  • 如何在 UICollectionView 中将行居中?

    我有一个UICollectionView与随机细胞 有什么方法可以让我将行居中吗 默认情况下它是这样的 x x x x x x x x x x x x x x 这是所需的布局 x x x x x x x x x x x x 我必须做这样的事
  • 像 TraceGL 一样分析 Objective C 中的代码路径?

    TraceGL 是一个非常简洁的项目 它允许 JS 程序员跟踪 Javascript 中的代码路径 它看起来像这样 我想为 Objective C 构建类似的东西 我知道运行时使跟踪方法调用变得相当容易 但是我如何跟踪控制流 例如 在上面的
  • 更改 iOS7 中 UIAlertView 的字体大小

    我想更改alertView中消息文本和标题文本的字体大小 苹果网站上没有任何文档谈到这一点 但苹果在其子类注释中表示 UIAlertView 类旨在按原样使用 请参考以下链接 https developer apple com librar

随机推荐

  • 获取 Qt Widget 的变量名称(用于样式表)?

    在我的应用程序中 用户单击程序的任何小部件 当时处于休眠状态 并为其选择颜色 然后 该颜色将被添加到该特定小部件的样式表中 但是 当程序结束并再次启动时 我希望该特定小部件保留其样式表 我不想在每个小部件的样式表中进行硬编码 事实上 我什至
  • 带有 Tesseract 的空字符串

    我正在尝试从一个大文件中读取不同的裁剪图像 并且我设法读取了其中的大部分图像 但是当我尝试使用超正方体读取它们时 其中一些图像会返回空字符串 代码就是这一行 pytesseract image to string cv2 imread im
  • 如何查看从给定文件开始的完整节点“require()”树?

    我需要查看某种依赖关系树 显示各种require 从特定文件开始 例如 如果我有一个server js像这样的文件 server js var myThing require myThing and a myThing js像这样的文件 m
  • 如何在 JavaScript 中从二进制数据创建 File 对象

    我可能在这里遗漏了一些简单的东西 但是如果给定从 AJAX 请求接收到的二进制数据 我如何在 JavaScript 中创建一个 File 对象呢 ajax url http example com image jpg success fun
  • 如何为图像创建三角形容器(x-浏览器)

    我将如何创建一个包含 IMG 的 DIV 其中 DIV 将图像切割成三角形 从而通过三角形仅显示图像的一部分 so div img src some image div 其中图像是正方形 但包含图像的 DIV 是三角形 http www s
  • 使用 Array.forEach 迭代 getElementsByClassName 的结果

    我想迭代一些 DOM 元素 我这样做 document getElementsByClassName myclass forEach function element index array do stuff 但我收到错误 document
  • 在 Safari 中禁用同源策略

    出于开发目的 我需要在我的计算机上的 Safari Windows 上 中禁用同源策略 在 Chrome 中 这可以通过使用标志启动来完成 disable web security Safari 中是否有等效的标志或隐藏设置 如果你想在Sa
  • 当我的 NodeJS 应用程序在我的计算机上运行时,本地网络上的其他人如何访问它?

    我有一个非常简单的问题 我用NodeJS做了一个网页游戏 我可以在并排打开多个浏览器窗口的情况下自己成功玩它 但是 我想知道其他本地计算机是否也可以访问并与我一起玩游戏 我天真地尝试使用这个网址 my ip address 8000这是行不
  • 在 Ruby 1.8 中将字符串简单转换为 UTF-8

    我知道在 Ruby 1 9 中你可以轻松地重新编码这样的字符串 s s encode UTF 8 Ruby 1 8 中的等效项是什么 它需要什么线路 我见过的所有教程都不必要地复杂 我不明白发生了什么 詹姆斯 爱德华 格雷二世有一个详细帖子
  • CRC16 ISO 13239 实施

    我正在尝试在 C 中实现 Crc16 我已经尝试了许多不同的实现 但大多数都给了我不同的值 这是我已经使用过的一些代码 private static int POLYNOMIAL 0x8408 private static int PRES
  • 无法选择 MKViewAnnotation 两次?

    我在地图上放置了图钉 当我点击它们时 我会调用didSelect 该函数仅在第一次点击该引脚时被调用 之后不会再次在同一引脚上调用该函数 除非我选择另一个引脚然后返回并点击它 对我来说 这听起来像是正在选择引脚 并且didSelect只能在
  • 我应该在哪里放置 Junit @Category 的接口类?

    我想定义项目范围的接口 用于 Category注释 并配置 Maven 在构建整个项目时排除其注释测试 In the 应用项目中有一个测试我想分类 Category Integration class Test public void te
  • Django 无法切换语言环境

    我有文件 locale es LC MESSAGES django mo 和 po 运行 makemessages 和compilemessages 绝对所有消息都已翻译 在settings py中有 USE I18N True LANGU
  • Laravel 中的位置标头

    我正在为我的大学的身份验证系统 Ucam Webauth 使用图书馆 这意味着我必须使用其中一种方法重定向到身份验证服务器 不幸的是 我无法退货Redirect to 因为这个图书馆的架构 图书馆本身使用header Location 但这
  • “kafka.zookeeper.ZooKeeperClientTimeoutException:等待连接超时”仅在列出主题期间

    我发现了一些主题相似但上下文不同的问题 我可以连接以创建主题 但无法列出主题 因为我收到了下面提到的错误 据我所知 人们在我时面临基本连接问题 我只是为了列出主题列表 如果重要的话 这是我的docker compose yml versio
  • IntelliJ switch 语句使用字符串错误:use -source 7

    我正在尝试使用 IntelliJ 在 Mac OS X 上 编译我使用 Eclipse 编写的一些代码 我尝试运行以下代码 switch category case below 20 below20 break case 20 to 29
  • Linux 中的 ps 实用程序(procps),如何检查使用哪个 CPU

    这是关于procps包 实用程序ps对于Linux 它可以打印每个进程 线程 最后使用的CPU数量吗 更新 不是 CPU 时间 10 秒 而是 CPU 编号 CPU0 CPU5 CPU123 ps 1 手册页说您可以使用psr field
  • 使用 awk 从不同文件中减去列

    我有两个文件夹 A1 和 A2 这两个文件夹中的文件名称和文件数量相同 每个文件有 15 列 文件夹 A1 中每个文件的第 6 列需要从文件夹 A2 中每个文件的第 6 列作为基底 我想将每个文件的第 2 列和第 6 列 相减后 打印到具有
  • 获取哈希符号后的请求部分

    我的网站有 AJAX 支持的搜索 它使用深度链接 当用户点击链接时 http example com articles tags Mac 20OS review 标签 Mac OS 和 评论 应该已经在搜索表单中选择 并且与 Mac OS
  • iOS 7 ANCS:发现主要 ANCS 服务 UUID

    在 iOS7 下 主要的 ANCS 服务是否需要不断进行广告宣传 或者是否需要在模糊设置中启用 使用自定义 CBPeripheralManager 使用 Apple 指定的服务和特征 UUID 实现 以便潜在的通知消费者成功发现它并订阅 A