gpt4 book ai didi

ios - 通过 OS X 的 Apple 通知中心服务

转载 作者:可可西里 更新时间:2023-11-01 04:23:40 25 4
gpt4 key购买 nike

我知道您可以使用此服务让智能 watch 等设备拦截来自 iOS 设备的通知。但是您可以通过 OS X 在 Mac 上接收这些 iOS 通知吗?

我想让我的 OS X 程序检测到 iOS 中收到的特定通知类型。我尝试在我的 Mac 上浏览 ANCS 设备,但它没有出现。我知道你不能在 iOS 设备之间这样做,所以我想知道 iOS 和 OS X 之间是否也是如此?谢谢!

最佳答案

这绝对有可能!

这是你需要的:

  1. iOS 设备上的一个应用程序,它导入 CoreBluetooth 并使用 CBPeripheralManager 来宣传带有一些自定义 UUID 的虚拟服务(不是 ANCS UUID,它不会工作) .您的 Mac 需要此虚拟服务才能“查看”ANCS 服务。*
  2. Mac 上的一个应用程序,它导入 IOBluetooth,启动一个 CBCentralManager 对象,并开始扫描。您可以这样做:

    [self.centralManager scanForPeripheralsWithServices:@[[CBUUID UUIDWithString:YOUR_CUSTOM_SERVICE_UUID]] options:@{CBCentralManagerScanOptionSolicitedServiceUUIDsKey:@[[CBUUID UUIDWithString:ANCS_SERVICE_UUID]]];

    确保将自己设置为 CBCentralManager 的委托(delegate)以接收委托(delegate)回调。

  3. 当您的 Mac 在 didDiscoverPeripheral 中发现您的设备时,连接到它:[self.centralManager connectPeripheral:外设选项:nil];

    这里要注意的一件非常重要的事情是,如果你想连接到它,你需要保留你的外围设备到一个属性,否则它将被释放。参见 this answer进行更详细的讨论。

  4. didConnectPeripheral 中,您需要将自己设置为您所连接的 CBPeripheral 的委托(delegate),然后开始发现服务:

    [外设discoverServices:nil];

    (从这一点开始的所有回调都是针对CBPeripheral)

  5. didDiscoverServices 中,您应该获得可用服务的列表。如此循环遍历它们并发现每个服务的特征:

    for (CBService *service in peripheral.services) {
    if ([service.UUID isEqual:[CBUUID UUIDWithString:YOUR_CUSTOM_SERVICE_UUID]]) {
    NSLog(@"Found your Custom Service");
    }
    if ([service.UUID isEqual:[CBUUID UUIDWithString:ANCS_UUID]]) {
    NSLog(@"Found ANCS Service");
    }

    [peripheral discoverCharacteristics:nil forService:service];
    }
  6. didDiscoverCharacteristicsForService 中,您想要查找 3 个特征:

    • ANCS 通知源:UUID 9FBF120D-6301-42D9-8C58-25E699A21DBD(可通知)
    • ANCS 控制点:UUID 69D1D8F3-45E1-49A8-9821-9BBFDAAD9D9(可写响应)
    • ANCS 数据源:UUID 22EAC6E9-24D6-4BB5-BE44-B36ACE7C7BFB(可通知)

    对于那些需要通知的特征,请订阅它们以获取更新:

     if ([characteristic.UUID isEqual:[CBUUID UUIDWithString:ANCS_CHARACTERISTIC_UUID]]) {
    [peripheral setNotifyValue:YES forCharacteristic:characteristic];
    }
  7. 如果您想检查这些特征是否已开始通知,请在 didUpdateNotificationStateForCharacteristic 中执行 if(characteristic.isNotifying)

    <
  8. 您将在 didUpdateValueForCharacteristic 中使用 characteristic.value 获得实际的 NSData 更新。此处需要注意的重要一点是,您将通过通知源特性获得通知事件的通知,但这些不会包含那么多信息。如果您希望您的 Mac 为每个 iOS 通知播放声音或闪烁一些 Hue 灯或类似的东西,这就足够了。但是,对于实际的通知详细信息,它需要来自数据源特性,但您需要通过对控制点特性进行非常具体的调用来请求它们。这是真正复杂的地方,您将能够在官方ANCS Specification document中获得更多信息。 .

  9. 如果您想要快捷方式或了解其他人是如何做到的,请查看这些 Github 存储库:

    请小心,因为您可能会在其中一些实现中发现错误,主要是在处理 ANCS 数据源发送的数据时(我必须通过自己的错误处理来发挥创意)。

*** 有些人可能会争辩说您可以使用 "Service Solicitation"在没有在 iOS 设备上运行的应用程序和/或没有广告虚拟服务的情况下公开 ANCS(请参阅步骤 2 中的 options 参数),但我没有取得那么大的成功所以也许有我缺少的东西。

关于ios - 通过 OS X 的 Apple 通知中心服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20650366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com