[Chat] Fix iOS group chat notifications rendering as direct messages (#10590)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -104,7 +104,7 @@ class NotificationService: UNNotificationServiceExtension {
|
|||||||
|
|
||||||
var speakableGroupName: INSpeakableString? = nil
|
var speakableGroupName: INSpeakableString? = nil
|
||||||
if userInfo["convoKind"] as? String == "group",
|
if userInfo["convoKind"] as? String == "group",
|
||||||
let groupName = userInfo["convoGroupName"] as? String,
|
let groupName = userInfo["groupName"] as? String,
|
||||||
!groupName.isEmpty {
|
!groupName.isEmpty {
|
||||||
speakableGroupName = INSpeakableString(spokenPhrase: groupName)
|
speakableGroupName = INSpeakableString(spokenPhrase: groupName)
|
||||||
}
|
}
|
||||||
@@ -120,6 +120,19 @@ class NotificationService: UNNotificationServiceExtension {
|
|||||||
attachments: nil
|
attachments: nil
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// The push payload omits the full recipient list for group convos. Without
|
||||||
|
// any signal of multiple recipients, iOS classifies the notification as
|
||||||
|
// `MessagingDirect` and ignores `speakableGroupName`. Setting
|
||||||
|
// `recipientCount` on the donation metadata is Apple's documented escape
|
||||||
|
// hatch for this case, and overrides the (zero-length) recipients array.
|
||||||
|
if userInfo["convoKind"] as? String == "group",
|
||||||
|
let groupMemberCount = userInfo["groupMemberCount"] as? Int,
|
||||||
|
groupMemberCount > 0 {
|
||||||
|
let metadata = INSendMessageIntentDonationMetadata()
|
||||||
|
metadata.recipientCount = groupMemberCount
|
||||||
|
intent.donationMetadata = metadata
|
||||||
|
}
|
||||||
|
|
||||||
// For group convos, attach the composite group avatar (rendered by the
|
// For group convos, attach the composite group avatar (rendered by the
|
||||||
// ogcard service) to the `speakableGroupName` parameter so iOS shows it
|
// ogcard service) to the `speakableGroupName` parameter so iOS shows it
|
||||||
// alongside the sender on the Communication Notification.
|
// alongside the sender on the Communication Notification.
|
||||||
@@ -196,7 +209,7 @@ class NotificationService: UNNotificationServiceExtension {
|
|||||||
userInfo: [AnyHashable: Any]
|
userInfo: [AnyHashable: Any]
|
||||||
) {
|
) {
|
||||||
guard userInfo["convoKind"] as? String == "group",
|
guard userInfo["convoKind"] as? String == "group",
|
||||||
let groupName = userInfo["convoGroupName"] as? String,
|
let groupName = userInfo["groupName"] as? String,
|
||||||
!groupName.isEmpty else {
|
!groupName.isEmpty else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user