转载

SiriKit实践 - 基于融云实现使用SiriKit发送消息

上篇我们讲了App Extension,这篇就是纯SiriKit相关的了,主要是基于融云实现SiriKit发送消息

吐槽一下,在写这个Demo之前,github上几乎每个demo都番了个遍,本来想站在巨人的肩膀上,没想到几乎都是创建了工程然后带着初始化的代码就提交上去了。稍好一点的,就是在自建UI部分,加了个图,但是没有任何与数据的交互:joy:。最后各种猜测、尝试、踩坑完成了这个Demo。

SiriKit实践 - 基于融云实现使用SiriKit发送消息

SiriKit

Siri是通过对用户的语句进行分析成大致的指令来进行一些操作,之前Siri只能完成一些系统的控制。iOS 10后新增的SiriKit让第三方应用能够接入,为一些不方便用手交互的时候提供语言上的交互。

意图域与意图

用户语句的识别和分解成指令本就是一个比较复杂的过程,而SiriKit简化了这些,SiriKit会识别用户的语句,并拆分有用的信息传递给我们。有种喝三叶口嚼酒的感觉:joy:

SiriKit实践 - 基于融云实现使用SiriKit发送消息

苹果官方定义了 Intent Domain (意图域)和 Intent (意图)的概念,实际上本质就是一个信息拆解的归类。 意图域 是比较大的划分,每个 意图域 下有各自支持的 意图 ,最终分析来把可能你需要的信息交给你。

比如: “发消息给y说z”,SiriKit分析后它属于 消息 意图域下的 发消息 意图,然后把y和z解析给你(具体解析了什么请往后看)

如何支持

根据官方文档,你需要在创建后来指定配置你的App支持哪些 意图域 和其下面的哪些 意图 。用户说出的语句被解析成指令后,首先会匹配App名称,然后匹配解析出来的意图是否和你支持的一致,如果一致才会给你的App进行处理。

比如: 你的App叫x,支持了 消息 意图域下的 发消息 意图。用户安装后说”使用x发消息”,SiriKit分析后用户想用名字是x的应用,意图是 消息 意图域下的 发消息 ,而你的App支持了,就会让你进行处理(具体处理请往后看)。如果没装App或者没支持这个意图,那么你什么都收不到。

支持情况

根据官方文档,目前SiriKit支持VoIP呼叫(3)、消息(3)、付款(2)、照片(2)、锻炼(5)、乘车预定(3)、CarPlay(7)和餐厅预定(5)共计8 Intent Domian(意图域)下共计30种Intent(意图, 括号内数字表示意图数量),具体可查看: SiriKit官方文档翻译-意图域 。

目前应用场景

从国内来看,QQ支持的是消息/VoIP呼叫,Uber和滴滴支持的是乘车预定,Keep支持的是锻炼。

上手实践

经过各种考虑后,决定从消息这个意图来尝试,优点有: 直观、聊天接入方便、应用场景多、参考文章/Demo好找(然而我错了,SiriKit真正实践的Demo和文章是真的少)。这次实现的 Demo地址

创建扩展

其实际包含两项 Intents Extension (处理逻辑, 必选), Intents UI Extension (自定义展示, 可选)。在创建的 Intents 的时候,根据是否要自定义UI来勾选 Inclue UI Extension

SiriKit实践 - 基于融云实现使用SiriKit发送消息

创建后是这样的:

SiriKit实践 - 基于融云实现使用SiriKit发送消息

创建完成后你会发现有示例代码和默认配置了消息相关的三个意图

Intent Extension

//待补

协议方法实现

resolve 匹配数据并检查够不够,坑点,INPerson匹配的是手机联系人,很毒,必须实现

confirm 提示是否要进行处理,可选

handle 进行处理并告知处理结果,必须实现

Intent Handle可以拆分来实现,同一个意图域的建议一起实现,不同意图域的建议拆分实现,以减少内存,注意对应的方法 SiriKit官方文档翻译-意图域

快速completion,否则会Siri会自己处理了

Intent UI Extension

//待补

协议方法实现

根据协议方法传来的信息进行赋值处理

隐藏默认界面

快速进行界面搭建,否则会Siri会用默认界面自己处理

自定义词汇

暂未尝试,一般健身应用用的多,因为不同的健身嘛,具体可看文档 SiriKit官方文档 - Part1-4 指定自定义词汇

原文  http://www.devhy.com/2016/12/12/22-sirikit-practice-2/
正文到此结束
Loading...