为智能而设计:在用户需要的地方出现
Design for intelligence: Meet people where they are
2020年6月23日
一句话判断
“智能”不是在应用里塞一个 AI 对话框——真正的智能设计是”在用户需要的时候,用最少的工作量,完成用户想做的事”。这场 Session 用 Apple 自己的产品案例重新定义了”智能体验”。
这场 Session 讲了什么
这场 Session 从设计哲学层面探讨了如何在应用中构建”智能”体验。Apple 对”智能”的定义不是”用机器学习做很酷的事情”,而是”让用户感觉应用在替他们想”。Session 提出了智能设计的三个核心原则:情境感知(Contextual Awareness)、主动帮助(Proactive Help)和渐进式信息披露(Progressive Disclosure)。
情境感知意味着应用要理解用户当前的状态和意图。比如 Maps 在检测到用户在机场时,会主动展示登机口信息和航班状态;Siri 在检测到用户的日常通勤模式后,会提前计算路线和预计到达时间。这些功能不是用户主动请求的,而是系统”猜”到了用户可能需要。
主动帮助是情境感知的延伸——不只是知道用户在做什么,还要在合适的时机主动提供帮助。Session 用了 Translate 应用的例子:当用户复制了一段外语文本,系统会自动在通知中提供翻译结果,不需要用户打开任何翻译应用。
渐进式信息披露是指信息的展示要分层。第一次接触时只展示最核心的内容,随着用户深入使用逐步揭示更多功能。这避免了”功能过载”——一上来就给用户展示 20 个选项的界面不是智能,而是懒惰。
值得深挖的点
“零点击”体验的设计目标
Session 提出了一个激进的设计目标:最好的交互是零点击的交互。如果你的应用能做到”用户还没想到就已经完成了”,那才是真正的智能。Apple 自己的案例包括:自动填充验证码(从短信中提取验证码并自动填入)、自动切换深色模式(根据时间自动切换)、以及 App Clips(扫码即用,零安装)。这些体验的共同特点是用户不需要做任何”学习”——系统就按照最自然的方式工作了。
智能推荐的可信度问题
Session 坦诚地讨论了智能推荐”猜错”的代价。如果你的应用主动推荐了用户不需要的内容,比”不推荐”更糟糕——因为用户会失去对应用的信任。Apple 的建议是:只在高置信度时做主动推荐,低置信度时提供”你可能还需要…”这样的弱推荐。宁可漏掉一次有用的推荐,也不要做出错误的强推荐。
代码片段
// 利用 Core Spotlight 让应用内容可被系统搜索
import CoreSpotlight
import MobileCoreServices
class IndexingManager {
func indexArticle(_ article: Article) {
// 创建 Spotlight 索引条目
let attributeSet = CSSearchableItemAttributeSet(
itemContentType: kUTTypeText as String
)
attributeSet.title = article.title
attributeSet.contentDescription = article.summary
attributeSet.keywords = article.tags
let item = CSSearchableItem(
uniqueIdentifier: "article-\(article.id)",
domainIdentifier: "articles",
attributeSet: attributeSet
)
CSSearchableIndex.default().indexSearchableItems([item]) { error in
if let error = error {
print("索引失败: \(error)")
}
}
}
// 用户从 Spotlight 搜索结果进入应用时处理
func handleSpotlightEntry(_ activity: NSUserActivity) {
guard activity.activityType == CSSearchableItemActionType,
let uniqueId = activity.userInfo?[CSSearchableItemActivityIdentifier] as? String else {
return
}
// 直接跳转到对应文章
let articleId = uniqueId.replacingOccurrences(of: "article-", with: "")
navigateToArticle(id: articleId)
}
}
// 使用 NSUserActivity 实现主动推荐
class SmartSuggestionManager {
func donateViewActivity(for product: Product) {
let activity = NSUserActivity(
activityType: "com.example.app.viewProduct"
)
activity.title = "查看\(product.name)"
activity.userInfo = ["productId": product.id]
activity.isEligibleForSearch = true
activity.isEligibleForPrediction = true
activity.suggestedInvocationPhrase = "查看\(product.name)"
// 关键属性:让 Siri 理解这个活动的上下文
activity.keywords = Set(product.tags)
activity.requiredUserInfoKeys = Set(["productId"])
activity.becomeCurrent()
}
// 捐赠定期的用户习惯
func donateDailyHabit() {
let activity = NSUserActivity(
activityType: "com.example.app.dailyCheckin"
)
activity.title = "每日签到"
activity.isEligibleForPrediction = true
activity.suggestedInvocationPhrase = "每日签到"
// 持续捐赠让 Siri 学习用户的使用时间模式
activity.becomeCurrent()
}
}
// 利用 Intelligent Suggestions 改善输入体验
import SwiftUI
struct SmartOrderView: View {
@State private var selectedItems: [String] = []
let suggestions: [String] // 基于用户历史生成的智能建议
var body: some View {
VStack {
// 智能建议区域:基于用户习惯推荐
if !suggestions.isEmpty {
ScrollView(.horizontal, showsIndicators: false) {
HStack {
Text("常点菜品")
.font(.caption)
.foregroundColor(.secondary)
ForEach(suggestions, id: \.self) { item in
Button(item) {
selectedItems.append(item)
}
.buttonStyle(.bordered)
.font(.subheadline)
}
}
.padding(.horizontal)
}
}
// 完整菜单(渐进式信息披露)
List(menuItems) { item in
// ...
}
}
}
}
最佳实践
- 让你的应用内容出现在 Spotlight 搜索结果中——这是最低成本的”在用户需要时出现”
- 使用
NSUserActivity捐赠用户行为,让 Siri 学习使用模式并做出智能建议 - 智能推荐的 UI 要明显标注”为你推荐”,让用户知道这是个性化内容而非固定内容
- 当推荐出错时提供简单的”不感兴趣”反馈按钮,持续改善推荐质量
- 在应用启动时检查
NSUserActivity,确保从 Spotlight/Siri 进入时能直接跳转到正确页面
还有什么值得关注
- Apple 的 Human Interface Guidelines 新增了”Intelligence”章节,专门讲智能功能的设计规范
- Session 提到了 Widget 的智能叠放(Smart Stack)——系统会根据用户习惯自动选择展示哪个 Widget
- App Clips 的”零安装”体验是”零点击”设计理念的极致体现,值得深入研究其交互模型