写点什么

爱奇艺 iOS 深度实践:SiriKit 详解应用篇

  • 2020-05-03
  • 本文字数:4068 字

    阅读完需:约 13 分钟

爱奇艺iOS深度实践:SiriKit详解应用篇

前言

苹果全球开发者大会(Worldwide Developers Conference,下文简称 WWDC)自 1983 年加州首次举办以来至今一直备受 iOS 开发者关注,第一代 iOS 也从 2007 年一路走来,如今 iOS 系统的版本也已经到了两位数。这次 iOS 13 带来了新的对话式快捷指令、更深层次的自定和新媒体播放体验,让各项功能变得更加强大。WWDC2019 之后,爱奇艺对 Siri 进行了相关的技术研究和探索,本文重点讨论 SiriKit Media Intents 和 Siri Suggestions,鉴于业界对此讨论也不并多,结合爱奇艺的场景上线了媒体播放意图、媒体搜索意图、Siri 建议、Siri 新媒体播放建议等功能,帮助用户更便捷的使用爱奇艺。

SiriKit

2016 年 WWDC 大会上苹果开放了 Siri 的 API,开发者们可以利用 SiriKit 将自己的服务提供给用户。SiriKit 负责处理用户通过 Siri 对 App 服务的请求,并定义了用户可以发出的请求类型,称为意图,使用域将相关的意图进行分组。例如,消息域具有发送消息,搜索消息以及将消息标记为已读或未读的意图。App 通过创建能与 Siri 通信的扩展来使用 SiriKit,使用时 App 无需处于运行状态。此扩展会对它能够处理的特定域和意图进行注册。比如,一个信息 App 可以注册支持信息的域,以及发送信息的意图,SiriKit 包含 Intents IntentsUI 框架,支持两种类型的扩展:


1. Intents app extension: 负责接收来自 SiriKit 的用户请求,并将其转换为 App 特定的操作。


2. Intents UI app extension: 支持自定义扩展程序的样式,但自定义视图控制器无法收到任何触摸事件。


SiriKit Media Intents

在 WWDC2019 上苹果介绍了新的媒体播放服务,并且给开发者开放更多的能力。爱奇艺也同步开始技术调研,并在 iOS 13 正式版发布前上线了对媒体播放意图的支持。Media domain 负责处理用户对媒体类服务的请求,支持媒体播放、添加媒体、搜索媒体、媒体偏好四种意图。借助 Media domain,用户无需启动 App 即可实现对音频媒体的播放和控制,这对音频类 App 非常有意义。对于视频,Siri 会帮用户启动 App 并在前台播放,同样简化了播放流程,提高使用体验。

爱奇艺媒体播放意图接入流程


1. Extension Target 下 Supported Intents Class Name 添加 INPlayMediaIntent, Media Categories 选择适合 App 的选项,支持多选;


2. 需要在前台播放媒体时, App Target Info.plist NSUserActivityTypes 添加 Intent Class Name.


  • 在后台播放 ,App 收到的系统回调是 application:handleIntent:completionHandler:

  • 在前台播放, App 收到的系统回调是


application:continueUserActivity:restorationHandler


需要在 Info.plist 中声明 App 支持的活动类型.


3. 提供意图示例短语, 对于媒体播放意图,缺失不会影响功能,但提交商店时会收到缺失示例短语警告


4. App Info.plist 中设置 App 别名(可选), 用户通过 Siri 使用 App 服务时,必须在对话中包括 App 的名称,为了方便表述,可以为 App 提供别名。比如,爱奇艺 iPad 版名称为 “爱奇艺 HD”,别名为“爱奇艺”。当 iPad 同时安装了“爱奇艺” App 和“爱奇艺 HD” App 时,Siri 会优先选择“爱奇艺” App 响应用户对“爱奇艺”服务的请求。


5. 处理请求:


1). 典型的处理流程需要三个步骤:Resolve、Confirm 和 Handle


  • Resolve: 验证意图的参数,确保具有满足用户请求所需的信息。SiriKit 会调用每个参数的解析方法,根据返回的解析结果决定如何继续。

  • Confirm: 对意图参数执行最终验证,并验证 App 的服务已准备就绪,可以实现意图。

  • Handle: 实现意图,并向 SiriKit 反馈处理结果。



2). Media domain 的意图处理建议省略 Confirm 步骤。Apple 在分析自己 App 的使用情况时,发现 Confirm 步骤会降低人们继续播放媒体的可能性。


  • 媒体播放意图中,Resolve 步骤负责解析意图的 INMediaSearch 对象,并返回具体可播放的媒体对象。

  • mediaSearch 包含的媒体信息可能不会精确匹配实际的媒体名称,因为用户的表述和 Siri 语音识别的结果可能是不准确的。搜索服务的模糊查询会返回准确的媒体信息,Siri 也会正确的提示实际播放的内容。

  • mediaSearch 可能为空,用户没有指定具体播放的内容。不建议主动询问要播放什么,用户可能会因此而退出使用。开发者需要做出决定,比如播放推荐或热门的内容,或者按用户的播放记录继续播放。

  • 除了媒体名称,mediaSearch 还包括媒体类型、艺术家、排序等信息,这些信息应结合使用,缩小搜索范围,播放更匹配的内容。

  • 爱奇艺对用户的意图做了进一步的识别,比如播放“破冰行动大结局”,“延禧攻略第十集”,“最新的奇葩说”等,提供更好的用户体验。


3). 扩展程序的生命周期很短,媒体播放是由 App 完成的,Handle 步骤只需返回响应结果即可。


  • 音频媒体应该在后台播放,响应码为:

  • INPlayMediaIntentResponseCodeHandleInApp

  • 视频媒体需要在前台播放,响应码为:

  • INPlayMediaIntentResponseCodeContinueInApp


4). App 读取 intent 中的媒体信息,开始播放。


  • 后台播放,App 收到的系统回调是

  • application:handleIntent:completionHandler:,intent 参数包含了需要的信息;

  • 前台播放,App 收到的系统回调是

  • application:continueUserActivity:restorationHandler:,userActivity.interaction.intent 包含了需要的信息。

  • 爱奇艺会为媒体播放意图跳过启动广告,提高播放体验。


5). App 读取 intent 中的媒体信息,开始播放。


  • 后台播放, App 收到的系统回调是 application:handleIntent:completionHandler:,intent 参数包含了需要的信息;

  • 前台播放,App 收到的系统回调是 application:continueUserActivity:restorationHandler:,userActivity.interaction.intent 包含了需要的信息。爱奇艺会为媒体播放意图跳过启动广告,提高播放体验。


爱奇艺媒体搜索意图接入流程

媒体搜索意图只支持 App 在前台展示搜索结果,在完成播放意图的支持后,搜索意图的实现比较简单。



细节及注意事项如下:


1. 处理请求, 搜索意图需要 Resolve 和 Handle 两个步骤。


  • Resolve 步骤主要提取搜索内容

  • Handle 步骤返回响应结果即可,响应码 INSearchForMediaIntentResponseCodeContinueInApp



2. App 在系统回调


application:continueUserActivity:restorationHandler: 拿到搜索信息,展示搜索结果。


Siri Suggestions

Siri 基于用户的习惯和使用 App 的方式,提供接下来可能要做的事情的建议。例如,如果用户经常在上午买咖啡,Siri 可能会在用户通常下单的时间建议用户下单。Siri 会在锁定屏幕或“搜索”中向用户建议快捷指令。Shortcuts 使开发者可以将 App 的关键功能与 Siri 接通,让用户可以在新的场景以新的方式使用 App。


定义 Shortcu

开发者需要考虑为哪些重要的、经常使用的功能定义 Shortcut,帮助用户更快速的使用 App 的功能。 有两种定义的方式,NSUserActivity 和 Intents。


  • NSUserActivity 是一种表示 App 状态的轻量级方式,如果只是要构建打开 App 内某个功能的简单 shortcut,建议使用这种方式。定义 Shortcut,只需在 App Target Info.plist NSUserActivityTypes 中添加类型即可,例如,com.myapp.name.my-activity-type;

  • Intents 可以提供最优的 Shortcuts 体验。Siri 会根据意图参数提供更加智能的预测,并且支持自定义语音回复和定制化的 UI,结合 Intents App Extension,无需启动 App 即可完成响应。


开发者可以选择自定义意图或使用系统内置意图。在自定义之前,应查看 Siri Domains,优先选择满足需要的内置意图。


捐赠 Shortcut

每次用户在 App 中使用支持了 shortcut 的功能时,App 需要告诉 Siri,这样 Siri 才会学习到建议 shortcut 的正确时机和场景。


  • NSUserActivity

  • Siri 会根据 userInfo 中的信息寻找规律,使用 requiredUserInfoKeys 指定 userInfo 中哪些关键 key 在寻找规律时用来对比。persistentIdentifier 在删除捐赠时使用。



  • Intents

  • Siri 会将捐赠按意图参数解构组合为 Intent Definition File 中定义的所有可能的 shortcut,从而实现更智能的预测。groupIdentifier 在删除捐赠时使用。



删除捐赠

如果已捐赠的 shortcut 中包括用户删除的信息,或者 App 不再支持已捐赠的功能时,应该从 Siri 中删除捐赠。


  • NSUserActivity


  • Intents


Handle Shortcuts

  • NSUserActivity 需要在 App 内处理;


  • Intents 支持后台使用的 shortcut,需要创建 Intents App Extension。

  • 意图处理的具体方法参考上述媒体播放意图《处理请求》部分。

爱奇艺 Siri Suggestions 实现

爱奇艺目前支持两种建议,常用功能建议和媒体播放建议。Siri 建议出现的时机依赖捐赠形成的规律,而具体策略并不完全透明。开发者在日常生活中,有遇到其他 App 的 Siri 建议功能弹出略频繁,可能会对用户有所打扰。爱奇艺在捐赠播放行为时,会考虑播放的持续性,希望建议出现时,用户确实有观看时间和观看需求,避免用户在碎片时间偶然播放形成规律带来不好的体验。


  • 常用功能建议使用 NSUserActivity 实现,点击后会打开播放记录页面;



  • 媒体播放建议使用系统内置的 INPlayMediaIntent 实现。App 捐赠当前播放行为,但用户可能不会重复观看已看过的内容。INUpcomingMediaManager 提供了更新建议内容的方式,可以向用户建议未看过或未看完的内容。

  • 支持在后台执行的 shortcut 可以定制扩展程序的 UI,给用户更好的体验。爱奇艺也对 Intents UI app extension 做了调研,详细实现方式请参考官方文档



总结

SiriKit 的能力还需要不断完善,仍有一些可优化的地方,比如当用户播放意图但不指定具体 App 时,希望可以展示支持播放的 App 列表给用户选择。随着 Apple 开放更多 Siri 相关的能力,用户可以在新的场景以新的方式使用 App 的功能。开发者可以参考以下资料,为 App 支持 Siri 相关功能。




本文转载自公众号爱奇艺技术产品团队(ID:iQIYI-TP)。


原文链接


https://mp.weixin.qq.com/s?__biz=MzI0MjczMjM2NA==&mid=2247486750&idx=1&sn=8e092b0edcd905a7e95b563479563be8&chksm=e976913dde01182b0dfc3aec1f100eb53e3213eeab852228e57c5aa52fe9209f8fcfbd397993&scene=27#wechat_redirect


2020-05-03 10:006107

评论

发布
暂无评论
发现更多内容

2021金九银十阿里Java岗7轮技术面经历,险幸上岸

Java 程序员 架构 面试 计算机

律所管理系统能解决律师事务所存在的这些问题

低代码小观

公司管理 企业 企业管理 管理工具 律所

教育机构这一大堆问题都是由教育管理系统解决的

低代码小观

公司管理 教育 企业管理 CRM 管理工具

从简历被拒到收割8个大厂offer,我用了3个月成功破茧成蝶

收到请回复

Java 程序员 面试

会声会影和剪映在音频处理功能上的比较

懒得勤快

GitHub上首本IntelliJ IDEA操作手册,标星果然百万名不虚传

Java 架构 面试 程序人生 编程语言

深入思考软件工程,开启 DevOps 之旅

BoCloud博云

DevOps cicd 云原生 CI/CD 敏捷交付

汇纳科技数据科学团队研究商场活动效果并优化的论文被ISR期刊接收

阿里P8手抄本惨遭泄露,并出现病毒式传播,致28人斩获大厂offer

收到请回复

Java 面试 阿里 大厂Offer

和12岁小同志搞创客开发:如何驱动LED点阵模块?

不脱发的程序猿

少儿编程 创客开发 LED点阵模块

惊!HUAWEI高工熬夜赶出这本20W字的图解计算机操作系统指南手册,竟被我偶然发现!

Java 架构 面试 程序人生 编程语言

我凭借这份pdf拿下了蚂蚁金服、字节跳动、小米等大厂的offer

Java 编程 程序员 架构

网络安全产品之堡垒机应用于金融行业案例讲解

行云管家

云计算 网络安全 等保 堡垒机

理论+实例,带你掌握Linux的页目录和页表

华为云开发者联盟

Linux 内存管理 寄存器 页目录 页表

这还不够全?阿里P8架构师耗时八年时间才整理出来这“Java核心知识PDF(Java高岗)

Java 程序员 架构 面试 后端

云栖大会|感受万物数字化,体验千行视频化

阿里云视频云

云计算 阿里云 AI 音视频 视频云

为什么要进行代码评审?

爱数技术范儿

代码评审

【ShardingSphere技术专题】「ShardingJDBC」(1)带你一同认识一下ShardingJDBC是什么?(高手勿入)

洛神灬殇

ShardingJDBC ShardingSphere 算法学习笔记指南 10月月更

Kubernetes 中的应用参数配置案例详析

Zilliz

数据库 Kuber k8s Helm

极客架构营2期模块5作业

Ping

程序员常用的工具软件推荐

程序员小呆

Java c++ 程序员 架构师 Go 语言

JS的深浅复制,原来如此!

华为云开发者联盟

js 序列化 深复制 浅复制

相约 DTCC 2021 | Tapdata 受邀分享:如何打造面向 TP 业务的数据平台架构

tapdata

面试巨作!13万字!腾讯高工手写JDK源码笔记 带你飙向实战

收到请回复

Java jdk 面试 后端

从互联网“后来者”到“引领者”:这场IPv6大会上,我读懂了中国式创新

脑极体

为什么网络 I/O 会被阻塞?

编程 架构 操作系统 计算机

2022年最新Java小白学习路线总结,从零基础跟着学习不掉队(PDF+视频分享篇)

Java 编程 程序员 计算机 java面试

高性能、免运维,博云开源云原生本地存储方案:Carina

BoCloud博云

数据库 云原生 中间件 本地存储

封神总结!蚂蚁金服+滴滴+美团+拼多多+腾讯15万字Java面试题

收到请回复

Java 程序员 面试 微服务 大厂Offer

马萨卡!阿里大佬珍之若宝的最强高并发pdf,竟然被上传GitHub开源

Java 架构 面试 编程语言

手把手带你做LiteOS的树莓派移植

华为云开发者联盟

树莓派 系统 LiteOS arm 树莓派移植

爱奇艺iOS深度实践:SiriKit详解应用篇_移动_爱奇艺技术产品团队_InfoQ精选文章