WWDC Quick Look 💓 By SwiftGGTeam
Explore SMS message filters

Explore SMS message filters

观看原视频

Highlight

iOS 16 为 SMS 消息过滤扩展新增了 12 个子分类能力,开发者可以将未知发件人的短信自动归类到 Transactional 和 Promotional 的细分子文件夹中,而不是只能简单标记为垃圾信息。

核心内容

短信收件箱的混乱问题

01:08

在很多国家,短信已经成为企业通知客户的主要渠道——银行交易提醒、营销活动、快递通知、预约提醒。这些消息来自短码、字母数字码和普通电话号码,混杂在收件箱中,让用户很难找到家人朋友的个人消息。

iOS 提供了”过滤未知发件人”功能,但如果每天收到多条消息,即使过滤后的文件夹也会迅速堆积。

Message Filter Extension 的工作方式

02:04

iOS 提供了基于沙盒的扩展模型来分类未知发件人的消息。用户从 App Store 安装过滤应用后,在设置 > 信息 > 未知与垃圾信息中开启过滤并选择一个过滤器。注意,同一时间只能激活一个过滤器。

iOS 14 开始,信息应用会显示三个文件夹:Transactions(交易)、Promotions(推广)和 Junk(垃圾)。无论使用哪个过滤器,这个分类结构都保持一致。

iOS 16 的子分类增强

03:37

iOS 16 之前,开发者只能将消息分类到三个顶层类别。iOS 16 新增了 12 个子分类,让分类更精细:

Transactional 子分类:

  • Finance(财务)
  • Orders(订单)
  • Health(健康)
  • Public Services(公共服务)
  • Weather(天气)
  • Reminders(提醒)
  • Rewards(奖励)

Promotional 子分类:

  • Coupons(优惠券)
  • Offers(优惠)

以印度市场为例,用户经常收到大量金融交易短信。这些消息现在可以被整理到 Transactions 下的 Finance 子文件夹中。

两阶段过滤流程

04:44

过滤流程分为两个阶段:

配置阶段:用户在设置中选择过滤器时,iOS 16 新 API 会请求过滤器支持的能力。过滤器返回支持的类别和子类别列表,iOS 验证后更新信息应用的收件箱文件夹。

运行时分类阶段:每次收到未知发件人的短信时,iOS 查询过滤器,确定消息属于哪个类别和子类别。过滤器必须返回在配置阶段声明过的能力。

详细内容

创建 Message Filter Extension

06:32

在 Xcode 中,为项目添加 Message Filter Extension target。创建后,MessageFilterExtension.swift 会自动生成所需的函数模板。

声明支持的子分类

07:02

实现 handle(_capabilitiesRequest:context:completion:) 方法声明能力:

func handle(
    _ capabilitiesRequest: ILMessageFilterCapabilitiesQueryRequest,
    context: ILMessageFilterExtensionContext,
    completion: @escaping (ILMessageFilterCapabilitiesQueryResponse) -> Void
) {
    let response = ILMessageFilterCapabilitiesQueryResponse()
    // 最多选择 5 个子分类
    response.transactionalSubActions = [
        .transactionalFinance,
        .transactionalOrders,
        .transactionalHealth
    ]
    response.promotionalSubActions = [
        .promotionalCoupons,
        .promotionalOffers
    ]
    completion(response)
}

关键点:

  • 最多声明 5 个子分类
  • transactionalSubActions 设置交易类子分类
  • promotionalSubActions 设置推广类子分类
  • 声明后,信息应用会显示对应的子文件夹

消息分类逻辑

08:16

实现 handle(_queryRequest:context:completion:) 方法处理 incoming 消息:

func handle(
    _ queryRequest: ILMessageFilterQueryRequest,
    context: ILMessageFilterExtensionContext,
    completion: @escaping (ILMessageFilterQueryResponse) -> Void
) {
    guard let message = queryRequest.messageBody else { return }
    let response = ILMessageFilterQueryResponse()

    switch message {
    case _ where message.contains("debited"):
        response.filterAction = .transaction
        response.filterSubAction = .transactionalFinance
    case _ where message.contains("coupon"):
        response.filterAction = .promotion
        response.filterSubAction = .promotionalCoupons
    default:
        response.filterAction = .allow
    }

    completion(response)
}

关键点:

  • queryRequest.messageBody 获取消息正文
  • filterAction 设置顶层分类(.transaction.promotion.junk.allow
  • filterSubAction 设置子分类
  • 如果返回的 action 和 sub-action 组合不匹配,iOS 会忽略 sub-action,只使用 action
  • 无法分类的消息返回 .allow,让它进入普通收件箱

分类结果展示

配置完成后,信息应用会显示子文件夹。例如:

  • Transactions > Finance:包含 “debited” 关键词的银行短信
  • Transactions > Orders:包含订单信息的短信
  • Promotions > Coupons:包含 “coupon” 关键词的营销短信

Apple 印度 SMS 过滤器的更新

11:03

Apple 在印度的 SMS 过滤器也使用了 iOS 16 的新能力,新增 Finance、Orders 和 Reminders 子文件夹。银行交易进入 Finance,外卖/快递消息进入 Orders,重要事件和待办事项进入 Reminders。

核心启发

  • 做什么:为特定市场(如印度、东南亚)开发本地化短信分类工具

  • 为什么值得做:这些市场短信使用量大,银行、电商、公共服务都依赖短信通知,分类需求强烈

  • 怎么开始:创建 Message Filter Extension,根据当地常见的短信模板关键词配置分类规则

  • 做什么:构建智能财务助手,自动整理银行交易短信

  • 为什么值得做:Finance 子分类让银行短信有了专门的去处,可以进一步提取交易数据

  • 怎么开始:在 Extension 中识别银行短信格式,提取金额、时间、商户信息,存入 App 的数据库生成消费报告

  • 做什么:开发促销信息聚合工具

  • 为什么值得做:Coupons 和 Offers 子分类让用户不再错过优惠,同时保持收件箱整洁

  • 怎么开始:将促销短信分类到对应文件夹,在 App 中提供统一的优惠码管理和过期提醒

  • 做什么:创建企业级短信管理方案

  • 为什么值得做:企业内部系统(OA、ERP、监控告警)经常通过短信发送通知,需要与营销短信区分

  • 怎么开始:为企业定制过滤器,将内部系统短信归类到 Reminders 或 Public Services,确保重要通知不被淹没

关联 Session

评论

GitHub Issues · utterances