Skip to content

Instantly share code, notes, and snippets.

@Dexwell
Last active April 2, 2024 07:44
Show Gist options
  • Save Dexwell/dedef7389eae26c5b9db927dc5588905 to your computer and use it in GitHub Desktop.
Save Dexwell/dedef7389eae26c5b9db927dc5588905 to your computer and use it in GitHub Desktop.
iOS 15 Local Communication Notification
var content = UNMutableNotificationContent()
content.title = "Title"
content.subtitle = "Subtitle"
content.body = "Text"
content.sound = nil
content.categoryIdentifier = "categoryName"
var personNameComponents = PersonNameComponents()
personNameComponents.nickname = "Sender Name"
let avatar = INImage(imageData: UIImage(named: "Avatar")!.pngData()!)
let senderPerson = INPerson(
personHandle: INPersonHandle(value: "1233211234", type: .unknown),
nameComponents: personNameComponents,
displayName: "Sender Name",
image: avatar,
contactIdentifier: nil,
customIdentifier: nil,
isMe: false,
suggestionType: .none
)
let mePerson = INPerson(
personHandle: INPersonHandle(value: "1233211234", type: .unknown),
nameComponents: nil,
displayName: nil,
image: nil,
contactIdentifier: nil,
customIdentifier: nil,
isMe: true,
suggestionType: .none
)
let intent = INSendMessageIntent(
recipients: [mePerson],
outgoingMessageType: .outgoingMessageText,
content: "Test",
speakableGroupName: INSpeakableString(spokenPhrase: "Sender Name"),
conversationIdentifier: "sampleConversationIdentifier",
serviceName: nil,
sender: senderPerson,
attachments: nil
)
intent.setImage(avatar, forParameterNamed: \.sender)
let interaction = INInteraction(intent: intent, response: nil)
interaction.direction = .incoming
interaction.donate(completion: nil)
do {
content = try content.updating(from: intent) as! UNMutableNotificationContent
} catch {
// Handle error
}
// Show 3 seconds from now
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 3, repeats: false)
// Choose a random identifier
let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: trigger)
// Add notification request
UNUserNotificationCenter.current().add(request)
@thejeraldo
Copy link

@lazyvar Thanks. I thought it was a built in feature for Communication Notifications and I might've missed a configuration.
Right now I am loading the INImage with a url. And because our BE doesn't generate a thumbnail version of the user images 🙄, the images takes 1-2 seconds to show in the notification.

@phamnguyenphu
Copy link

I'm a newbie IOS
Can you help me: Where is the above code located?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment