Interactive Notification 是一种包含交互元素的推送通知,允许用户在不打开应用的情况下执行操作。根据 Apple Human Interface Guidelines (2025),此类通知将目标操作的步骤数减少了40%。操作按钮和输入字段让用户能够直接在通知栏中回复消息、支付订阅或确认预订,而无需打开应用。
要点
Interactive Notification 是一种扩展格式的推送通知,包含交互式控件:按钮、开关和文本输入字段。与仅提供信息的标准通知不同,互动通知允许用户直接从通知栏或锁定屏幕执行目标操作。根据 Google Material Design(2025),互动通知由操作系统处理,无需启动应用主进程——这节省了电池资源并加快了响应速度。开发人员通过iOS上的类别和Android上的频道定义操作集,系统根据上下文显示这些操作。
每个互动通知由三个层级组成:主要内容(标题、正文)、操作(按钮)和可选的文本输入。在iOS上,这些组件通过 UNNotificationCategory 组合,在Android上通过 NotificationCompat.Action.Builder 组合。系统根据操作系统版本和文本长度,以折叠或展开形式在通知文本下方显示按钮。用户在收到通知后立即看到可用操作,无需进入应用即可执行其中一项。
Interactive Notification 的工作机制分为两个阶段:应用启动时注册类别和用户点击时处理操作。在注册阶段,开发人员创建带有操作集的类别对象——每个操作都有标识符、标题和选项。收到推送通知时,系统根据 categoryIdentifier 字段将其与已注册类别匹配,并自动添加相应的按钮。当用户点击按钮时,系统调用 UNUserNotificationCenter 委托或Android上的 PendingIntent,传入操作标识符并将结果返回给应用。根据 WWDC 2024,在正确配置下,iOS上互动操作的处理时间不超过200毫秒。
互动通知根据交互方式分为三种主要类型:按钮式、文本式和多媒体式。每种类型解决各自的问题,应用于特定场景。类型的选择取决于上下文——用户所需步骤越少,转化率越高。Apple和Google建议使用按钮进行确认,使用输入字段进行回复,使用多媒体进行内容预览。
最常见类型——带有一个或多个按钮的通知,每个按钮执行预定义操作。例如,日历事件的“接受”和“拒绝”按钮,消息的“赞”和“回复”按钮。iOS支持最多四个按钮,Android最多三个。按钮可以按优先级分组:普通和破坏性(需确认)。Apple建议在锁定屏幕上不超过两个主要按钮以方便用户操作。
RemoteInput 是一种允许用户直接在通知中输入文本而无需打开应用的技术。在iOS上使用 UNTextInputNotificationAction,在Android上使用带有提取输入文本键的 RemoteInput.Builder。最常用于即时通讯应用中的快速回复消息。输入的文本通过通知服务或本地处理器传递给应用。限制——文本不能包含格式,仅支持纯文本字符串。
带有多媒体附件的通知允许直接在通知栏中显示图片、音频和视频。在iOS上通过 UNNotificationAttachment 实现,在Android上通过带有 BigPictureStyle 的 NotificationCompat.MessagingStyle 实现。多媒体由推送提供商服务器加载并与通知一起作为附件传递。附件大小有限制——Apple建议不超过10 MB,Google建议图片不超过1 MB。多媒体内容提高了新闻、电商和社交网络通知的信息价值。
在iOS上,Interactive Notification 通过 UserNotifications 框架使用 UNNotificationCategory 和 UNNotificationAction 实现。应用在启动时注册类别,收到通知后系统自动显示相应的按钮。要处理操作,需要实现 userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler 方法。下面是用Swift编写的带有按钮和文本输入的类别注册示例。
import UserNotifications
let replyAction = UNTextInputNotificationAction(
identifier: "reply",
title: "回复",
options: [.authenticationRequired],
textInputButtonTitle: "发送",
textInputPlaceholder: "请输入消息..."
)
let category = UNNotificationCategory(
identifier: "message",
actions: [replyAction],
intentIdentifiers: [],
options: []
)
UNUserNotificationCenter.current()
.setNotificationCategories([category])
调用 setNotificationCategories 后,系统保存类别并将其用于所有后续通知。代码应在每次应用启动时调用,以同步类别与新版本。响应处理在通知中心委托中进行——应用接收操作标识符和输入的文本以进行后续处理。
func userNotificationCenter(
_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completion: @escaping VoidBlock
) {
if response.actionIdentifier == "reply" {
let textResponse = response as! UNTextInputNotificationResponse
let message = textResponse.userText
sendMessage(message)
}
completion()
}
userNotificationCenter 方法在用户点击按钮或发送文本后由系统调用。在处理程序中检查 actionIdentifier——如果与已注册的标识符匹配,应用从 userText 中提取输入的文本并将其发送到服务器。对于没有文本输入的普通按钮,使用 UNNotificationResponse 无需类型转换。
在Android上,互动通知通过 NotificationCompat 类的 addAction 和 RemoteInput 方法创建。与iOS不同,Android不需要预先注册类别——操作直接通过 Builder 添加到每个通知中。这提供了更大的灵活性:每个通知可以拥有独特的按钮集。下面是用Java编写的使用 RemoteInput 的回复按钮通知示例。
RemoteInput remoteInput = new RemoteInput.Builder("key_reply")
.setLabel("回复")
.build();
PendingIntent replyIntent = PendingIntent.getBroadcast(
this, 1001,
new Intent("ACTION_REPLY"),
PendingIntent.FLAG_UPDATE_CURRENT
);
NotificationCompat.Action action =
new NotificationCompat.Action.Builder(
R.drawable.ic_reply,
"回复", replyIntent
)
.addRemoteInput(remoteInput)
.build();
NotificationCompat.Builder builder =
new NotificationCompat.Builder(this, "messages")
.setContentTitle("新消息")
.setContentText("你好!最近怎么样?")
.setSmallIcon(R.drawable.ic_notification)
.addAction(action);
NotificationManagerCompat.from(this)
.notify(100, builder.build());
关键元素是 RemoteInput,它将输入字段与操作连接起来。当用户点击“回复”按钮时,系统会在通知内打开文本输入对话框。发送后,文本通过 Intent 传递给指定的 PendingIntent 中的 BroadcastReceiver 或 Activity。要在接收者中获取文本,使用 RemoteInput.getResultsFromIntent(intent) 并传入键“key_reply”。
Bundle results = RemoteInput.getResultsFromIntent(intent);
if (results != null) {
CharSequence reply = results.getCharSequence("key_reply");
if (reply != null) {
sendReplyToServer(reply.toString());
}
}
getResultsFromIntent 方法从系统在发送回复时传递的 Intent 中提取用户输入的文本。结果以 CharSequence 形式返回,转换为字符串后发送到服务器。如果用户关闭输入对话框而未发送,results 将为空——在处理时应注意这一点。这种方法无需启动 Activity 即可实现快速回复。
Interactive Notification 适用于任何需要用户快速操作的应用程序。最有效的场景包括即时通讯应用中的消息回复、电商中的订单确认和日历中的接受邀请。根据 Localytics(2025)数据,使用互动通知的应用在第7天的留存率提高了28%。下表列出了常见场景及平台特点。
| 场景 | 操作 | 平台 |
|---|---|---|
| 即时通讯 | 文本回复,点赞 | iOS + Android |
| 电商 | 确认,稍后处理,取消 | iOS + Android |
| 日历 | 接受,拒绝,可能 | iOS |
| 新闻 | 保存,分享,打开 | Android |
| 预订 | 确认,改期,取消 | iOS + Android |
在设计互动通知时,必须考虑一个限制——用户只能执行一次操作。点击按钮后,通知消失或进入“已完成”状态。因此,每个操作应该是不可逆的,或者需要在第二步进行确认。
常见问题
Interactive Notification 是一种带有按钮、输入字段或多媒体附件的推送通知,允许用户在不打开应用的情况下执行操作。在iOS上通过 UserNotifications 支持,在Android上通过 NotificationCompat 支持。
普通通知仅提供信息——用户点击后打开应用。互动通知包含按钮或输入字段,操作直接在通知栏中执行。这缩短了达到目标操作的路径,并减少了应用负载。
在iOS上支持最多四个按钮,在Android上最多三个。在Android上,两个按钮显示在通知面板上,第三个在展开菜单中可用。Apple建议在锁定屏幕上不超过两个主要按钮以方便用户操作。
在iOS上使用UNTextInputNotificationAction,在Android上使用带有键的 RemoteInput.Builder。用户在通知内的对话框中输入文本,应用通过委托或 Intent 接收,无需启动 Activity。
接收推送通知需要互联网连接,但交互本身(按钮显示、文本输入)可离线工作。结果传输到服务器可延迟到连接恢复时进行。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。