美文网首页蓝牙学习
iOS蓝牙 + Protobuf 相关开发经验总结

iOS蓝牙 + Protobuf 相关开发经验总结

作者: SKCongroo | 来源:发表于2020-09-02 19:10 被阅读0次

    随便写一些开发中遇到的问题和解决方法。

    蓝牙相关

    扫描相关

    • 苹果是支持重复扫描同一个蓝牙设备的,但是默认会给你去重,所以你在蓝牙的代理中获取到的都是去重以后的。
      如果你想要重复扫描一个蓝牙设备(比如频繁获取他的RSSI强度信号)你可以在扫描开始时加入如下的 opetions。坏处就是如果你周围有海量的蓝牙设备,会比较混乱。
    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], CBCentralManagerScanOptionAllowDuplicatesKey, nil];
    [_centerManager scanForPeripheralsWithServices:nil options:options];
    
    • 苹果的蓝牙扫描不会给开发者提供蓝牙的mac信息,被包装成了一个经过苹果加密后的UUID,所以如果需要使用到mac的话,需要通过其他手段获取蓝牙设备的mac,比如让硬件工程师配合。

    • 苹果的蓝牙相对于大部分安卓手机来说,连接质量都稳定得多(毕竟手机也贵)。

    • 苹果不会和蓝牙设备协商数据包大小(MTU),或者有一个很高的上限,所以基本靠开发者控制(此条存疑,我尝试过一包200个字节传输,都没有问题,给人的感觉是支持的上限很高,但我没有探索过这个上限的极限在哪,也可能上限在硬件设备那边。我们是低功耗蓝牙)。

    • 两个页面单独创建的 CBCentralManager 对象不可以共用一个蓝牙对象,比如在上个页面通过一个 CBCentralManager 对象扫描到的蓝牙设备,到下一个 Controller 再新建一个CBCentralManager,并把上个页面的蓝牙对象传输过来,新的CBCentralManager不可以连接这个蓝牙对象。所以要 CBCentralManager 和蓝牙对象一起传输。

    回调

    • 苹果提供的蓝牙相关的代理方法基本都要用到,不要偷懒,开发的时候最好全都处理掉。

    Protobuf

    • Protobuf 的一般还需要一个解析模块,建议单独处理,做好和蓝牙模块的拆分。
    • Protobuf 使用有点麻烦,需要在 Build Phases 中给编译好的 “.pbobjc” 文件添加 “-fno-objc-arc”标识,使用ARC的方式处理(只针对 Objective-C,Swift 还没试过。Swift是真的好用得多,尤其是枚举)。
    • 其他的可以去看谷歌的文档,介绍的很详细。

    其他建议

    • CBCentralManager 扫描到的蓝牙对象最好再做一层包装,方便给蓝牙设备添加其他标志状态,或者记录连接情况。

    总结

    Protobuf的特性对蓝牙这种小数据量传输的场景有很好的便利性,而且数据安全性很高,数据包也小得多,是一个很好的技术协作场景。

    相关文章

      网友评论

        本文标题:iOS蓝牙 + Protobuf 相关开发经验总结

        本文链接:https://www.haomeiwen.com/subject/uowwsktx.html