Creating a Private Discussion Group

A private discussion group allows you to create an "invite-only" discussion group so that people can discuss a topic privately. The following use case describes how to create and interact with a MMX private discussion group.

Create Channel

Create the private channel:

String channelName = "MMX"; String channelSummary = "Let's use Slack for team communication regarding MMX"; MMXChannel.create(channelName, channelSummary, false, new MMXChannel.OnFinishedListener<MMXChannel>() { public void onSuccess(MMXChannel result) { //success } public void onFailure(MMXChannel.FailureCode code, Throwable ex) { Log.e(TAG, "Exception caught: " + code, ex); ... } });

Invite Users

Invite users to join the channel by name:

User janeDoe = ...; String message = "Let's use Slack for MMX!"; mmxChannel.inviteUser(janeDoe, message, new MMXChannel.OnFinishedListener<MMXChannel.MMXInvite>() { public void onSuccess(MMXChannel.MMXInvite result) { //success } public void onFailure(MMXChannel.FailureCode code, Throwable ex) { Log.e(TAG, "Exception caught: " + code, ex); } });

Use Notifications for Invites

Notifications are leveraged to listen for incoming invites:

MMX.EventListener inviteListener = new MMX.EventListener() { public boolean onMessageReceived(MMXMessage message) { return false; } @Override public boolean onInviteReceived(MMXChannel.MMXInvite invite) { String comment = invite.getInviteInfo().getComment(); //display something for the user to accept or decline ... } }; MMX.registerListener(inviteListener);

Display Channel Information

Display more channel information from the invite like name, summary and owner:

MMXChannel.MMXInvite janeDoeInvite = ...; janeDoeInvite.getInviteInfo().getComment(); // returns @"Let's use Slack for MMX!" janeDoeInvite.getInviteInfo().getInviter(); // returns inviter MMXChannel mmxChannel = janeDoeInvite.getInviteInfo().getChannel(); mmxChannel.getOwnerUsername(); // returns creator mmxChannel.getName(); // returns @"MMX" mmxChannel.getSummary(); // returns @"Let's use Slack for team communication regarding MMX"

If you want more information, such as the latest messages and subscriber names in one API call, use the getChannelDetail API:

List<MMXChannel> channels = ...; MMXChannel.getChannelDetail(channels, new ChannelDetailOptions.Builder() .numOfMessages(10) // number of latest messages to retrieve .numOfSubcribers(5) // number of subscribers to retrive .build(), new MMXChannel.OnFinishedListener<List<ChannelDetail>>() { @Override public void onSuccess(List<ChannelDetail> channelDetails) { if (null != channelDetails && !channelDetails.isEmpty()) { for(ChannelDetail channelDetail : channelDetails) { channelDetail.getChannel() ; // The MMXChannel channelDetail.getOwner(); // The channel creator channelDetail.getTotalSubscribers() ; // Total subscribers in the channel channelDetail.getTotalMessages() ; // Total messages in the channel channelDetail.getLastPublishedTime(); // The timestamp when the latest message was posted channelDetail.getSubscribers(); // The subscribers requested by numOfSubcribers in the ChannelDetailOptions channelDetail.getMessages(); // The messages requested by numOfMessages in the ChannelDetailOptions } } } @Override public void onFailure(MMXChannel.FailureCode failureCode, Throwable throwable) { } });

Accept Invite

To accept a private channel invite:

janeDoeInvite.accept("Great! Thanks.", new MMXChannel.OnFinishedListener<MMXChannel.MMXInvite>() { public void onSuccess(MMXChannel.MMXInvite result) { //success } public void onFailure(MMXChannel.FailureCode code, Throwable ex) { Log.e(TAG, "Exception caught: " + code, ex); } });

Decline Invite

To decline an invite:

janeDoeInvite.decline("Sorry.", new MMXChannel.OnFinishedListener<MMXChannel.MMXInvite>() { public void onSuccess(MMXChannel.MMXInvite result) { //success } public void onFailure(MMXChannel.FailureCode code, Throwable ex) { Log.e(TAG, "Exception caught: " + code, ex); } });

Receive Invitation Responses

To receive invitation responses:

MMX.EventListener inviteListener = new MMX.EventListener() { public boolean onMessageReceived(MMXMessage message) { return false; } @Override public boolean onInviteResponseReceived(MMXChannel.MMXInviteResponse inviteResponse) { boolean accepted = inviteResponse.isAccepted(); String responseText = inviteResponse.getResponseText(); ... return true; //consume the event } }; MMX.registerListener(inviteListener);

Publish to Channel

Publish a message to the sfGiants channel from your MMX channel:

MMXChannel myChannel = ...; HashMap<String, String> content = new HashMap<String,String>(); String messageId = myChannel.publish(content, new MMXChannel.OnFinishedListener<String>() { public void onSuccess(String s) { //successfully published a message to this channel } public void onFailure(MMXChannel.FailureCode failureCode, Throwable throwable) { //failed publishing to this channel } });

After you are logged in, messages can be retrieved either by using MMXChannel.getMessages() or by implementing MMX.EventListener.onMessageReceived():

MMXChannel myChannel = ...; MMX.EventListener eventListener = new MMX.EventListener() { public boolean onMessageReceived(MMXMessage mmxMessage) { if (mmxMessage.getChannel().getName().equalsIgnoreCase(myChannel.getName())) { //this is a message published to myChannel ... } return true; //true consumes this message and prevents other listeners from getting called } }; MMX.registerListener(eventListener);


Useful Links