diff --git a/src/pages/docs/messages/updates-deletes.mdx b/src/pages/docs/messages/updates-deletes.mdx index e557e64032..eabce81a6f 100644 --- a/src/pages/docs/messages/updates-deletes.mdx +++ b/src/pages/docs/messages/updates-deletes.mdx @@ -88,6 +88,40 @@ await channel.updateMessage( { description: 'reason for update' } ); ``` + +```swift +import Ably + +let realtime = ARTRealtime(key: "{{API_KEY}}") +// This assumes there is an 'updates' namespace with a channel rule enabling updates and deletes +let channel = realtime.channels.get("updates:example") + +// Publish the original message +channel.publish([.init(name: "message-name", data: "original-data")]) { result, error in + if let error = error { + print("Failed to publish: \(error.message)") + return + } + + // Get the serial from the published message + guard let serial = result.serials.first else { + print("No serial available") + return + } + + // Publish an update using the serial + let messageUpdate = ARTMessage(name: nil, data: "updated-data") + messageUpdate.serial = serial + + channel.update(messageUpdate, operation: .init(clientId: nil, descriptionText: "reason for update", metadata: nil), params: nil) { result, error in + if let error = error { + print("Failed to update message: \(error.message)") + return + } + print("Message updated") + } +} +``` #### Returns @@ -182,6 +216,40 @@ await channel.deleteMessage( { description: 'reason for delete' } ); ``` + +```swift +import Ably + +let realtime = ARTRealtime(key: "{{API_KEY}}") +// This assumes there is an 'updates' namespace with a channel rule enabling updates and deletes +let channel = realtime.channels.get("updates:example") + +// Publish the original message +channel.publish([.init(name: "message-name", data: "original-data")]) { result, error in + if let error = error { + print("Failed to publish: \(error.message)") + return + } + + // Get the serial from the published message + guard let serial = result.serials.first else { + print("No serial available") + return + } + + // Delete the message using the serial + let messageToDelete = ARTMessage(name: nil, data: "") // clear the previous data + messageToDelete.serial = serial + + channel.delete(messageToDelete, operation: .init(clientId: nil, descriptionText: "reason for delete", metadata: nil), params: nil) { result, error in + if let error = error { + print("Failed to delete message: \(error.message)") + return + } + print("Message deleted") + } +} +``` #### Returns @@ -279,6 +347,43 @@ channel.appendMessage({ serial, data: '!' }); // the message in history now has data: "Hello, World!" ``` + +```swift +import Ably + +let realtime = ARTRealtime(key: "{{API_KEY}}") +// This assumes there is an 'updates' namespace with a channel rule enabling updates and deletes +let channel = realtime.channels.get("updates:example") + +// Publish the original message +channel.publish([.init(name: "message-name", data: "Hello")]) { result, error in + if let error = error { + print("Failed to publish: \(error.message)") + return + } + + // Get the serial from the published message + guard let serial = result.serials.first else { + print("No serial available") + return + } + + // Append to the message a few times (without needing to await each to finish + // before doing the next); the data will be concatenated + for fragment in [", ", "World", "!"] { // fragments to append + let messageAppend = ARTMessage(name: nil, data: fragment) + messageAppend.serial = serial + + channel.append(messageAppend, operation: nil, params: nil) { result, error in + if let error = error { + print("Failed to append: \(error.message)") + return + } + print("Message appended with fragment: \(fragment)") + } + } +} +``` #### Returns @@ -342,6 +447,25 @@ const channel = rest.channels.get('updates:example'); // message for a serial you have stored or passed around const message = await channel.getMessage(msg); ``` + +```swift +import Ably + +let rest = ARTRest(key: "{{API_KEY}}") +let channel = rest.channels.get("updates:example") + +let serial = "0123456789-001@abcdefghij:001" // example serial + +channel.getMessageWithSerial(serial) { message, error in + if let error = error { + print("Failed to get message: \(error.message)") + return + } + if let message = message { + print("Retrieved message: \(message.data, default: "")") + } +} +``` ## Get message versions @@ -366,6 +490,25 @@ const channel = rest.channels.get('updates:example'); const page = await channel.getMessageVersions(msg); console.log(`Found ${page.items.length} versions`); ``` + +```swift +import Ably + +let rest = ARTRest(key: "{{API_KEY}}") +let channel = rest.channels.get("updates:example") + +let serial = "0123456789-001@abcdefghij:001" // example serial + +channel.getMessageVersions(withSerial: serial) { page, error in + if let error = error { + print("Failed to get message versions: \(error.message)") + return + } + if let page = page { + print("Found \(page.items.count) versions") + } +} +``` ## Message version structure