667. PotatoChat手机版锁屏通知

你这是在要“PotatoChat 手机版在锁屏上显示通知”的方案/实现说明吗?我可以给你不同层面的内容:设计文案(锁屏要显示什么)、隐私策略、iOS/Android 的实现要点与示例代码/推送负载、以及可交互操作(快速回复、标为已读)等。先给你一个精简又实用的总览 + 平台实现要点与示例;如果你需要我可以再把代码扩充到完整工程级别。

667. PotatoChat手机版锁屏通知

一、设计与隐私原则(简短)

  • 默认显示最少敏感信息:锁屏上应有隐私保护选项(比如“显示完整消息/仅显示有人发消息/不显示”)。
  • 当用户选择隐藏敏感内容时,通知标题可显示“PotatoChat”或“新消息”,正文显示“来自 张三 的消息”而不展示具体文本。
  • 优先显示发信人、会话名、未读计数、是否为群消息、是否为重要消息(@你/提及)。
  • 支持在通知上快速操作:回复、标为已读、静音/取消静音、展开查看(如果隐私允许)。
  • 支持会话分组(相同会话合并,避免通知泛滥)。

二、iOS(要点 + APNs 示例 + Swift 关键点)
要点

  • 请求并检查用户授权(UNUserNotificationCenter)。
  • 使用 APNs 发送远程通知;如果需要在收到后修改/解密通知展示,使用 Notification Service Extension(mutable-content:1)。
  • 使用 thread-id 将同一会话的通知归属于同一线程(可用于折叠)。
  • 可通过 category 添加动作(快速回复)。
  • 控制消息预览:iOS 控制由系统设置(“显示预览”),App 无法强制覆盖;如果需要,在推送里只发非敏感摘要。

APNs 示例(远程推送 JSON)
{
"aps": {
"alert": {
"title": "张三",
"subtitle": "PotatoChat",
"body": "在群聊“家庭”中:今晚几点聚?"
},
"badge": 3,
"sound": "default",
"category": "MESSAGE_CATEGORY",
"thread-id": "chat_123",
"mutable-content": 1
},
"chat_id": "chat_123",
"sender_id": "user_456",
"message_id": "msg_789",
"sensitive": false
}

Swift(简要说明)

  • 注册通知权限、请求 UNTextInputNotificationAction 快速回复动作、实现 UNUserNotificationCenterDelegate 的 userNotificationCenter(_:didReceive:withCompletionHandler:) 以在应用前台显示通知或处理点击。
  • 若消息内容端到端加密,服务器发送推送时可只包含密文或摘要,Notification Service Extension 在设备端解密并填充 alert。

三、Android(要点 + FCM 示例 + Kotlin 关键点)
要点

  • Android 使用 Firebase Cloud Messaging(FCM)常见;也支持本地通知。
  • 建议使用 Notification Channel(Android 8+),设置 importance(如 HIGH)来决定是否显示为“heads-up”/锁屏提醒。
  • 控制锁屏上显示内容:NotificationCompat.Builder.setVisibility(NotificationCompat.VISIBILITY_PUBLIC / VISIBILITY_PRIVATE / VISIBILITY_SECRET)。
    • VISIBILITY_PUBLIC:锁屏显示完整通知。
    • VISIBILITY_PRIVATE:锁屏仅显示应用名/摘要(根据系统隐私设置)。
    • VISIBILITY_SECRET:在锁屏完全隐藏。
  • 使用 NotificationCompat.MessagingStyle 或 Conversation API(Android 11+)呈现会话样式。
  • 支持通知分组(setGroup)和折叠。

FCM 数据/通知示例(data 消息更灵活)
{
"to": "<fcm_token>",
"priority": "high",
"data": {
"type": "message",
"chat_id": "chat_123",
"sender_name": "张三",
"body": "今晚几点聚?",
"message_id": "msg_789",
"sensitive": "false"
}
}

Kotlin(创建通知示例)

  • 创建 Channel(importance = HIGH)
  • 构建 NotificationCompat.Builder:
    • setSmallIcon, setContentTitle(如果敏感可设为“PotatoChat”), setContentText(或简略摘要)
    • setVisibility(NotificationCompat.VISIBILITY_PRIVATE) // 根据用户隐私选项
    • setStyle(NotificationCompat.MessagingStyle(user).addMessage(…))
    • addAction(回复PendingIntent) // 快速回复
  • 用 NotificationManager.notify(…) 展示

四、交互与快速回复

  • iOS:UNTextInputNotificationAction 支持直接在通知中输入回复。
  • Android:RemoteInput + action PendingIntent 支持直接回复。
  • 快速动作应尽量由后台接口完成(发送快速回复 API),并反馈操作结果(通过更新通知或静默推送更新状态)。

五、锁屏文案建议(中文例)

  • 非敏感(用户允许展示预览):
    • 标题:张三
    • 内容:今晚几点聚?
  • 隐私模式(隐藏正文):
    • 标题:PotatoChat
    • 内容:来自 张三 的消息
  • 群聊提醒(有人@你的情况高亮):
    • 标题:[群] 家庭
    • 内容:@你 张三:今晚几点聚?

六、其他注意事项

  • 推送优先级与节电策略:移动设备厂商(如华为、小米)会限制后台推送,需做适配(保持 token、后台保活策略、应用白名单说明)。
  • 用户设置:提供清晰的通知设置页(锁屏显示/消息预览/振动/声音/免打扰/群组静音)。
  • 合规性:涉及隐私内容要遵守当地法规(GDPR/中国个人信息保护等)。
  • 如果启用端到端加密,服务器应避免在推送中泄露明文内容;使用 Notification Service Extension 或在 Android 上先拉取并解密后再展示。

如果你需要我:

  • 给出完整的 iOS Swift 示例项目片段(含 Notification Service Extension);
  • 给出完整的 Android Kotlin 示例(含 Notification Channel、MessagingStyle、RemoteInput);
  • 或者给出一份产品级的通知文案与设置页文案模板;
    请选择你想要的方向,我会按你选的继续。