爱奇艺ios国际版 (爱奇艺ios与安卓)

苹果全球开发者大会(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: 支持自定义扩展程序的样式,但自定义视图控制器无法收到任何触摸事件。

爱奇艺ios小组件,爱奇艺iosvr

SiriKit Media Intents

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

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

爱奇艺ios小组件,爱奇艺iosvr

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 反馈处理结果。

爱奇艺ios小组件,爱奇艺iosvr

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 包含了需要的信息。爱奇艺会为媒体*放播**意图跳过启动广告,提高*放播**体验。

爱奇艺ios小组件,爱奇艺iosvr

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

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

爱奇艺ios小组件,爱奇艺iosvr

细节及注意事项如下:1. 处理请求,搜索意图需要 Resolve 和 Handle 两个步骤。

  • Resolve 步骤主要提取搜索内容
  • Handle 步骤返回响应结果即可,响应码 INSearchForMediaIntentResponseCodeContinueInApp

2. App 在系统回调 application:continueUserActivity:restorationHandler: 拿到搜索信息,展示搜索结果。

爱奇艺ios小组件,爱奇艺iosvr

Siri Suggestions

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

爱奇艺ios小组件,爱奇艺iosvr

定义 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,优先选择满足需要的内置意图。

爱奇艺ios小组件,爱奇艺iosvr

捐赠 Shortcut

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

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

爱奇艺ios小组件,爱奇艺iosvr

爱奇艺ios小组件,爱奇艺iosvr

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

爱奇艺ios小组件,爱奇艺iosvr

爱奇艺ios小组件,爱奇艺iosvr

删除捐赠

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

· NSUserActivity

爱奇艺ios小组件,爱奇艺iosvr

· Intents

爱奇艺ios小组件,爱奇艺iosvr

Handle Shortcuts

  • NSUserActivity 需要在 App 内处理;

爱奇艺ios小组件,爱奇艺iosvr

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

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

爱奇艺 Siri Suggestions 实现

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

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

爱奇艺ios小组件,爱奇艺iosvr

  • 媒体*放播**建议使用系统内置的 INPlayMediaIntent 实现。App 捐赠当前*放播**行为,但用户可能不会重复观看已看过的内容。INUpcomingMediaManager 提供了更新建议内容的方式,可以向用户建议未看过或未看完的内容。
  • 支持在后台执行的 shortcut 可以定制扩展程序的 UI,给用户更好的体验。爱奇艺也对 Intents UI app extension 做了调研,详细实现方式请参考官方文档

爱奇艺ios小组件,爱奇艺iosvr

爱奇艺ios小组件,爱奇艺iosvr

总结

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

SiriKit

·Introduction to Siri Shortcuts

·Introducing Parameters for Shortcuts

·Introducing SiriKit Media Intents

爱奇艺ios小组件,爱奇艺iosvr

爱奇艺ios小组件,爱奇艺iosvr

也许你还想了解2020爱奇艺卡通人物检测识别挑战赛,点击“阅读原文”,前往大赛通道!

爱奇艺ios小组件,爱奇艺iosvr