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 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