@@ -31,14 +31,16 @@ @interface PubNub (PublishPrivate)
3131 @param shouldStore Whether message should be stored in history storage or not.
3232 @param metadata JSON representation of \b NSDictionary with values which should be used by \b PubNub
3333 service to filter messages.
34+ @param sequenceNumber Next published message sequence number which should be used.
3435
3536 @return Configured and ready to use request parameters instance.
3637
3738 @since 4.0
3839 */
3940- (PNRequestParameters *)requestParametersForMessage : (NSString *)message toChannel : (NSString *)channel
4041 compressed : (BOOL )compressMessage storeInHistory : (BOOL )shouldStore
41- metadata : (nullable NSString *)metadata ;
42+ metadata : (nullable NSString *)metadata
43+ sequenceNumber : (NSUInteger )sequenceNumber ;
4244
4345/* *
4446 @brief Merge user-specified message with push payloads into single message which will be processed on
@@ -199,6 +201,9 @@ - (void) publish:(id)message toChannel:(NSString *)channel
199201 mobilePushPayload : (NSDictionary <NSString *, id> *)payloads storeInHistory : (BOOL )shouldStore
200202 compressed : (BOOL )compressed withMetadata : (NSDictionary <NSString *, id> *)metadata
201203 completion : (PNPublishCompletionBlock)block {
204+
205+ // Get next published message sequence number and update stored data.
206+ NSUInteger nextSequenceNumber = [self .sequenceManager nextSequenceNumber: YES ];
202207
203208 // Push further code execution on secondary queue to make service queue responsive during
204209 // JSON serialization and encryption process.
@@ -232,9 +237,12 @@ - (void) publish:(id)message toChannel:(NSString *)channel
232237 messageForPublish = [PNJSON JSONStringFrom: mergedData withError: &publishError];
233238 }
234239 PNRequestParameters *parameters = [strongSelf requestParametersForMessage: messageForPublish
235- toChannel: channel compressed: compressed
240+ toChannel: channel
241+ compressed: compressed
236242 storeInHistory: shouldStore
237- metadata: metadataForPublish];
243+ metadata: metadataForPublish
244+ sequenceNumber: nextSequenceNumber];
245+
238246 NSData *publishData = nil ;
239247 if (compressed) {
240248
@@ -334,6 +342,9 @@ - (void)sizeOfMessage:(id)message toChannel:(NSString *)channel compressed:(BOOL
334342
335343 if (block) {
336344
345+ // Get next published message sequence number.
346+ NSUInteger nextSequenceNumber = [self .sequenceManager nextSequenceNumber: NO ];
347+
337348 // Push further code execution on secondary queue to make service queue responsive during
338349 // JSON serialization and encryption process.
339350 __weak __typeof (self) weakSelf = self;
@@ -364,7 +375,8 @@ - (void)sizeOfMessage:(id)message toChannel:(NSString *)channel compressed:(BOOL
364375 toChannel: channel
365376 compressed: compressMessage
366377 storeInHistory: shouldStore
367- metadata: metadataForPublish];
378+ metadata: metadataForPublish
379+ sequenceNumber: nextSequenceNumber];
368380 NSData *publishData = nil ;
369381 if (compressMessage) {
370382
@@ -387,7 +399,9 @@ - (void)sizeOfMessage:(id)message toChannel:(NSString *)channel compressed:(BOOL
387399#pragma mark - Misc
388400
389401- (PNRequestParameters *)requestParametersForMessage : (NSString *)message toChannel : (NSString *)channel
390- compressed : (BOOL )compressMessage storeInHistory : (BOOL )shouldStore metadata : (NSString *)metadata {
402+ compressed : (BOOL )compressMessage storeInHistory : (BOOL )shouldStore
403+ metadata : (nullable NSString *)metadata
404+ sequenceNumber : (NSUInteger )sequenceNumber {
391405
392406 PNRequestParameters *parameters = [PNRequestParameters new ];
393407 if (channel.length ) {
@@ -400,11 +414,14 @@ - (PNRequestParameters *)requestParametersForMessage:(NSString *)message toChann
400414 [parameters addPathComponent: (!compressMessage ? [PNString percentEscapedString: message] : @" " )
401415 forPlaceholder: @" {message}" ];
402416 }
417+
403418 if ([metadata isKindOfClass: [NSString class ]] && metadata.length ) {
404419
405420 [parameters addQueryParameter: [PNString percentEscapedString: metadata] forFieldName: @" meta" ];
406421 }
407422
423+ [parameters addQueryParameter: @(sequenceNumber).stringValue forFieldName: @" seqn" ];
424+
408425 return parameters;
409426}
410427
0 commit comments