Design for intelligence: Apps, evolved
Design 入门 26m

智能化设计:App 的进化

Design for intelligence: Apps, evolved

2020年6月24日

在 Apple 官方观看视频

一句话判断

这是 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 一起观看。
WWDC 2020