siri快捷指令踩坑

·  阅读 1712

最近开发一款物联软件,主要是通过蓝牙连接、读写数据实现App与真实设备之间通讯,此部分已完成。这里要说的是,产品希望用户可以通过语音控制唤起App程序,直接进行开关机及其他多种操控。目前iPhone手机,快速想到的就是通过siri实现,毕竟苹果爸爸已开放相关接口。

方案概要

  1. siri指令成功唤起,直接启动App,在App独立进程中处理相关指令操作;
  2. siri指令成功唤起,不启动App,直接在弹出的扩展进程中处理相关指令操作,比如系统的发信息就是这么处理;

快速集成

可以参考:events.jianshu.io/p/f318f49fb…,此处略过

集成测试问题总结

1.siri extension,扩展info.plist配置问题

测试1:若添加自定义意图,如上图:RelaxIntentIntent;

结果1:唤起指令时,不会直接跳转App,会弹出扩展界面进行处理,不需要用户授权;

测试2:若不添加自定义意图;

结果2:唤起快捷指令时,iOS15之前版本可以直接跳转App;iOS15.0~15.1之间版本出现每次执行快捷指令,都会提醒授权打开,授权后才能打开;但手机升级到15.1后又神奇的发现,同一个应用的快捷指令授权仅首次提醒;

2.siri唤起的扩展、快捷指令点击打开的扩展、以及App处于三个独立进程

导致问题:

  • 全局缓存数据无法共享;
  • 单例管理类无法共享;
  • userDefault等持久化数据需要通过App Groups关联方式进行使用;

总结与思考

若不用处理蓝牙生命周期(扫描、连接、断开、读写),类似这样闭环的业务逻辑,则选用方案2显然更加方便快捷,不需要打开App就能实现,如:调用接口发送一条消息。

但针对目前产品的需求,个人觉得方案1更合理,目前不足之处就是iOS15.0~15.1之间小版本可能存在的问题。若使用方案2,则需要在扩展模块中单独去维护一套蓝牙业务,因为单例、线程等都不互通,将会带来一些潜在问题:

  • 后续Extension可能不支持在应用外进行蓝牙等耗性能操作;
  • 蓝牙业务耦合增加;
  • 蓝牙连接在进程之间互斥,无法连接同一设备,相当于siri扩展连了某台设备,App就无法连接这台设备;

结论:目前已用方案2实现需求,考虑转方案1进行重构。

对以上问题和观点,大家有啥好的建议可以在评论区中讨论🤝

分类:
iOS
标签:
分类:
iOS
标签:
收藏成功!
已添加到「」, 点击更改