Skip to content

Receiving Unfiltered Messages

Backendless Real-Time Messaging delivers messages to listeners added to a channel. A listener is a callback function which is invoked by Backendless to deliver a message to the client application. Depending on the API used to add a listener, it can receive either all messages published into the channel or a filtered subset of messages. The filtering options are explained in greater detail in the Receiving Filtered Messages section of this guide.

Receiving String Messages

Adding a listener to receive messages as string objects. Messages should be published as string objects):

Channel *channel = [Backendless.shared.messaging subscribeWithChannelName:@"MyChannel"];
RTSubscription *subscription = [channel addStringMessageListenerWithResponseHandler:^(NSString *message) {
    NSLog(@"Received string message: %@", message);
} errorHandler:^(Fault *fault) {
    NSLog(@"Error: %@", fault.message);
}];
let channel = Backendless.shared.messaging.subscribe(channelName: "MyChannel")
let _ = channel.addStringMessageListener(responseHandler: { message in
    print("Received string message: \(message)")
}, errorHandler: { fault in
    print("Error: \(fault.message ?? "")")
})

Receiving Dictionary/Map messages

Adding a listener to receive messages as dictionary/map objects. Messages can be published as JSON objects, complex types or disctionary/map objects:

Channel *channel = [Backendless.shared.messaging subscribeWithChannelName:@"MyChannel"];
RTSubscription *subscription = [channel addDictionaryMessageListenerWithResponseHandler:^(NSDictionary *message) {
    NSLog(@"Received message as a dictionary: %@", message);
} errorHandler:^(Fault *fault) {
    NSLog(@"Error: %@", fault.message);
}];
let channel = Backendless.shared.messaging.subscribe(channelName: "MyChannel")
let _ = channel.addDictionaryMessageListener(responseHandler: { message in
    print("Received message as a dictionary: \(message)")
}, errorHandler: { fault in
    print("Error: \(fault.message ?? "")")
})

Receiving custom type/class messages

Adding a listener to receive messages as instances of a custom type (the Person class). Published messages must be instances of the class, map/dictionary objects or JSON objects with the same structure as the class:

Channel *channel = [Backendless.shared.messaging subscribeWithChannelName:@"MyChannel"];
RTSubscription *subscription = [channel addCustomObjectMessageListenerForClass:[Person class] responseHandler:^(Person *message) {
    NSLog(@"Received message as a custom object: %@", message);
} errorHandler:^(Fault *fault) {
    NSLog(@"Error: %@", fault.message);
}];
let channel = Backendless.shared.messaging.subscribe(channelName: "MyChannel")
let _ = channel.addCustomObjectMessageListener(forClass: Person.self, responseHandler: { message in
    print("Received message as a custom object: \(message)")
}, errorHandler: { fault in
    print("Error: \(fault.message ?? "")")
})

General signature

A general signature for receiving messages as instances of a custom type:

- (RTSubscription *)addStringMessageListenerWithResponseHandler:^(NSString * _Nonnull)responseHandler errorHandler:^(Fault * _Nonnull)errorHandler;

- (RTSubscription *)addDictionaryMessageListenerWithResponseHandler:^(NSDictionary<NSString *,id> * _Nonnull)responseHandler errorHandler:^(Fault * _Nonnull)errorHandler;

- (RTSubscription *)addCustomObjectMessageListenerForClass:(Class  _Nonnull __unsafe_unretained)customClass responseHandler:^(id _Nonnull)responseHandler errorHandler:^(Fault * _Nonnull)errorHandler;

- (RTSubscription *)addMessageListenerWithResponseHandler:^(PublishMessageInfo * _Nonnull)responseHandler errorHandler:^(Fault * _Nonnull)errorHandler;
func addStringMessageListener(responseHandler: ((String) -> Void)!, errorHandler: ((Fault) -> Void)!) -> RTSubscription?

func addDictionaryMessageListener(responseHandler: (([String : Any]) -> Void)!, errorHandler: ((Fault) -> Void)!) -> RTSubscription?

func addCustomObjectMessageListener(forClass: AnyClass, responseHandler: ((Any) -> Void)!, errorHandler: ((Fault) -> Void)!) -> RTSubscription?

func addMessageListener(responseHandler: ((PublishMessageInfo) -> Void)!, errorHandler: ((Fault) -> Void)!) -> RTSubscription?

Receiving messages in Backendless internal format

Adding a listener to receive message in the Backendless internal format:

Channel *channel = [Backendless.shared.messaging subscribeWithChannelName:@"MyChannel"];
RTSubscription *subscription = [channel addMessageListenerWithResponseHandler:^(PublishMessageInfo *message) {
    NSLog(@"Published message - %@", message.message);
    NSLog(@"Publisher ID - %@", message.publisherId);
    NSLog(@"Message headers - %@", message.headers);
    NSLog(@"Message subtopic - %@", message.subtopic);
} errorHandler:^(Fault *fault) {
    NSLog(@"Error: %@", fault.message);
}];
let channel = Backendless.shared.messaging.subscribe(channelName: "MyChannel")
let _ = channel.addMessageListener(responseHandler: { message in
    print("Published message - \(message.message ?? NSNull())")
    print("Publisher ID - \(message.publisherId ?? "")")
    print("Message headers - \(message.headers ?? [String : Any]())")
    print("Message subtopic - \(message.subtopic ?? "")")
}, errorHandler: { fault in
    print("Error: \(fault.message ?? "")")
})