code: public void joinGroups(final ArrayList<String> groupIDList, final JoinGroupCompletionListener completionListener) {
          if (isConnected()) {
              if ((groupIDList != null) && (groupIDList.size() > 0)) {
                  String urlEndpoint = "/v1/groups";
  
                  JSONArray groupList = new JSONArray(groupIDList);
                  JSONObject data = new JSONObject();
                  try {
                      data.put("groups", groupList);
  
                      signalingChannel.sendRESTMessage("post", urlEndpoint, data, new RespokeSignalingChannel.RESTListener() {
                          @Override
                          public void onSuccess(Object response) {
                              final ArrayList<RespokeGroup> newGroupList = new ArrayList<RespokeGroup>();
                              for (String eachGroupID : groupIDList) {
                                  RespokeGroup newGroup = new RespokeGroup(eachGroupID, signalingChannel, RespokeClient.this);
                                  groups.put(eachGroupID, newGroup);
                                  newGroupList.add(newGroup);
                              }
  
                              new Handler(Looper.getMainLooper()).post(new Runnable() {
                                  @Override
                                  public void run() {
                                      if (null != completionListener) {
                                          completionListener.onSuccess(newGroupList);
                                      }
                                  }
                              });
                          }
  
                          @Override
                          public void onError(final String errorMessage) {
                              postJoinGroupMembersError(completionListener, errorMessage);
                          }
                      });
                  } catch (JSONException e) {
                      postJoinGroupMembersError(completionListener, "Error encoding group list to json");
                  }
              } else {
                  postJoinGroupMembersError(completionListener, "At least one group must be specified");
              }
          } else {
              postJoinGroupMembersError(completionListener, "Can't complete request when not connected. Please reconnect!");
          }
      }
docs: Join a list of Groups and begin keeping track of them.
  
  @param groupIDList         An array of IDs of the groups to join
  @param completionListener  A listener to receive a notification of the success or failure of the asynchronous operation