Creating a Public Forum
A public forum is a common way to share information with other users. Forums are often organized around a particular subject. The following use case describes how to create public forum functionality in your app and illustrates the use of the APIs by creating a channel for the SF Giants.
Create Channel
In Magnet Message, our channel object is how messages are sent to and received by a group. To create a channel (sf_giants):
MMXChannel.createWithName(
"sf_giants",
summary: "Get the inside scoop on the San Francisco Giants",
isPublic: true,
publishPermissions: .Subscribers,
success: { channel in
// do something
},
failure: { error in
// do something
})
Discover Channels
Next, discover channels that you can subscribe to.
Check Channel Subscription
After discovering a channel, check if the current user is subscribed to the channel:
let sfGiantsChannel: MMXChannel = ...
if sfGiantsChannel.isSubscribed {
print("I'm following the Giants!")
}
Subscribe to Channel
To subscribe to a channel (sfGiants) so the user can send and receive messages:
let sfGiantsChannel: MMXChannel = ...
sfGiantsChannel.subscribeWithSuccess({
// do something
}, failure: { error in
// do something
})
Unsubscribe from Channel
To unsubscribe from a channel (sfSeals):
let sfSealsChannel: MMXChannel = ...
sfSealsChannel.unSubscribeWithSuccess({
// do something
}) { error in
// do something
}
View Channel Subscribers
After subscribing, you can see other subscribers to the channel (sfGiants):
let sfGiantsChannel: MMXChannel = ...
myChannel.subscribersWithLimit(100, offset: 0,
success: { count, subscribers in
// do something
},
failure: { error in
// do something
})
Get Published Messages on Channel
You can also get all messages published on the channel:
let sfGiantsChannel: MMXChannel = ...
let dateComponents = NSDateComponents()
dateComponents.hour = -1
let theCalendar = NSCalendar.currentCalendar()
let now = NSDate()
let anHourAgo = theCalendar.dateByAddingComponents(
dateComponents,
toDate: now,
options: NSCalendarOptions(rawValue: 0))
sfGiantsChannel.messagesBetweenStartDate(anHourAgo, endDate: now,
limit: 10,
offset: 0,
ascending: false,
success: { totalCount, messages in
// do something
}, failure: { error in
// do something
})
Publish Message to Channel
To publish a message to the channel:
let messageContent = ["message":"Hello channel!"]
myChannel.publish(messageContent,
success: { message in
print("Successfully published to \(myChannel)")
},
failure: { error in
print("Could publish to \(myChannel)\nError = \(error)")
})
Register for Message Notifications
Register for notifications to receive messages that are published on the channel:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
// Indicate that you are ready to receive messages now!
MMX.start()
NSNotificationCenter.defaultCenter().addObserver(
self,
selector: "didReceiveMessage:",
name: MMXDidReceiveMessageNotification,
object: nil)
}
Once incoming message notification is enabled, you can continue to implement your notification code as shown below:
func didReceiveMessage(notification: NSNotification) {
let userInfo : [NSObject : AnyObject] = notification.userInfo!
let message = userInfo[MMXMessageKey] as! MMXMessage
}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
NSNotificationCenter.defaultCenter().removeObserver(self)
}
Rename Channel
Additionally, a channel can be renamed. To rename a channel, call the rename method on the channel object.
let channel = ...
channel.rename("new_name", success: { channel in
//Channel renaming succeeded!
}, failure: { error in
//Channel renaming failed
})
NOTE: Passing in a null name to the channel causes it to be automatically named with this format:
“.NO_NAME.SDK_GENERATED_UUID”
Next Steps
See how to create a Private Discussion Group in your app.