智能化设计:App 的进化
Design for intelligence: Apps, evolved
2020年6月24日
一句话判断
这是 Apple “Design for Intelligence” 三部曲的第一部,从设计哲学层面解释了 App 应该如何从”工具”进化为”智能助手”,核心理念是:不要让用户找功能,让功能在正确的时机找到用户。
这场 Session 讲了什么
Session 从一个根本性问题出发:当今的 App 太依赖用户主动操作了。用户需要知道功能在哪里、什么时候该用什么功能、怎么组合多个功能来完成目标。Apple 提出了”Intelligent App”的设计理念——App 应该利用系统提供的智能能力(Siri Suggestions、Widgets、Shortcuts)来主动预测和满足用户需求。
Apple 总结了 App 进化的三个方向:第一,从被动等待到主动预测,通过用户行为模式分析,在用户可能需要时提前展示功能;第二,从独立操作到跨 App 协作,通过系统级的 Intelligence 让不同 App 的功能串联起来;第三,从单一入口到多维触达,通过 Widgets、Siri、Shortcuts、Notifications 等多个通道让用户快速完成任务。
值得深挖的点
用户行为的”时间锚点”理论
Apple 的设计团队提出了一个有趣的概念:用户的 App 使用行为有很强的时间规律性。比如用户每天早上 8 点打开新闻 App,每周五下午用打车 App,每年 12 月用购物 App。系统通过观察这些时间模式,可以在正确的时间点通过 Siri Suggestions 推荐 App 或特定功能。作为开发者,你需要确保你的 App 的 NSUserActivity 和 Intent 捐赠足够丰富,让系统能学到这些模式。
渐进式智能(Progressive Intelligence)
Apple 强调智能不应该是”一步到位”的。App 应该从最简单的智能功能开始——比如记住用户上次看到的位置——逐步增加更复杂的预测能力。这种渐进式方法对开发者也更友好:先集成基础的用户活动捐赠,再添加 Shortcuts 支持,最后做跨 App 的场景联动。
代码片段
捐赠用户活动让系统学习行为模式
场景:记录用户每天阅读新闻的行为模式。
import Intents
class NewsArticleViewController: UIViewController {
func userDidOpenArticle(_ article: Article) {
// 创建用户活动,让系统学习用户的行为模式
let activity = NSUserActivity(activityType: "com.newsapp.read")
activity.title = article.title
activity.userInfo = [
"articleId": article.id,
"category": article.category
]
// 标记为可搜索和可预测
activity.isEligibleForSearch = true
activity.isEligibleForPrediction = true
activity.suggestedInvocationPhrase = "阅读\(article.category)新闻"
// 关联相关网页内容
activity.webpageURL = article.url
// 激活 Activity,系统会开始学习这个行为模式
activity.becomeCurrent()
// 显示文章内容
displayArticle(article)
}
}
实现 Siri 智能建议的关键配置
场景:为新闻阅读功能配置可被 Siri 推荐的快捷方式。
// 在 Info.plist 中声明支持的 Activity Types
// NSUserActivityTypes: ["com.newsapp.read"]
// 为捐赠操作设置上下文信息
func donateReadAction(for article: Article) {
let intent = ReadArticleIntent()
intent.articleTitle = article.title
intent.articleCategory = article.category.rawValue
intent.suggestedInvocationPhrase = "看\(article.category)新闻"
// 创建交互并捐赠
let interaction = INInteraction(intent: intent, response: nil)
interaction.groupIdentifier = "news-reading" // 分组标识
interaction.donate { error in
if let error = error {
print("捐赠交互失败: \(error)")
}
}
}
利用 Widget 展示智能内容
场景:Widget 根据时间智能推荐内容。
import WidgetKit
struct NewsWidgetEntry: TimelineEntry {
let date: Date
let articles: [Article]
let relevance: WidgetRelevance? // 关联度评分
}
// 早上推荐要闻,晚上推荐轻松内容
func getTimeline(for context: TimelineProvider.Context,
completion: @escaping (Timeline<NewsWidgetEntry>) -> Void) {
let hour = Calendar.current.component(.hour, from: Date())
let articles: [Article]
if hour < 12 {
// 早上:推荐重要新闻
articles = ArticleService.fetchHeadlines()
} else {
// 下午/晚上:推荐轻松阅读
articles = ArticleService.fetchLeisureReads()
}
let entry = NewsWidgetEntry(date: Date(),
articles: articles,
relevance: nil)
let timeline = Timeline(entries: [entry], policy: .atEnd)
completion(timeline)
}
最佳实践
已有项目:先从 NSUserActivity 捐赠开始。检查你 App 的核心用户流程,在每个关键操作点添加 Activity 捐赠。不要一次做太多——先覆盖最常用的 3-5 个操作,观察 Siri Suggestions 的推荐效果,再逐步扩展。
新项目:从架构层面就把”智能触达”考虑进去。为每个核心功能定义对应的 Activity Type 和 Intent,确保用户行为数据能被系统收集。产品设计时考虑 Widgets 和 Shortcuts 的入口设计,不要把所有功能都塞进 App 本体。
还有什么值得关注
- Siri Suggestions 的学习周期大约需要 1-2 周才能见效,不要因为短期内看不到效果就放弃。
- Apple 特别强调了隐私:所有行为学习都在设备本地完成,不会上传到云端。
- 这个 Session 是三部曲的基础,建议搭配 Session 10087 和 10088 一起观看。