code: public void subscribeWithOptions(Map options, OnMessageWithOptions onMessage){
  		if(options != null){
  			String channel = null;
  			Boolean subscribeOnReconnected = true;
  			String filter = null;
  			String subscriberId = null;
  
  			if (options.containsKey("channel")){
  				channel = (String) options.get("channel");
  			}
  			if (options.containsKey("subscribeOnReconnected")){
  				subscribeOnReconnected = (Boolean) options.get("subscribeOnReconnected");
  			}
  			if (options.containsKey("filter")){
  				filter = (String) options.get("filter");
  			}
  			if (options.containsKey("subscriberId")){
  				subscriberId = (String) options.get("subscriberId");
  			}
  
  			ChannelSubscription subscribedChannel = subscribedChannels.get(channel);
  			Pair<Boolean, String> subscribeValidation = isSubscribeValid(channel,
  					subscribedChannel);
  
  			if (subscribeValidation != null && subscribeValidation.first) {
  				subscribedChannel = new ChannelSubscription(subscribeOnReconnected,
  						onMessage);
  				subscribedChannel.setSubscribing(true);
  				subscribedChannel.setFilter(filter);
  				subscribedChannel.setSubscriberId(subscriberId);
  				subscribedChannel.setWithOptions(true);
  				subscribedChannels.put(channel, subscribedChannel);
  
  				this._subscribeWithOptions(channel,subscribeValidation.second, subscribeOnReconnected, filter, subscriberId);
  			}
  		}else{
  			raiseOrtcEvent(
  					EventEnum.OnException,
  					this,
  					new OrtcSubscribedException(String.format(
  							"subscribeWithOptions called with no options")));
  		}
  	}
docs: Subscribes to a channel to receive messages sent to it with given options.
  
  @param options
  The subscription options dictionary, EX: "options = {
  channel,
  subscribeOnReconnected, // optional, default = true,
  filter, // optional, default = "", the subscription filter as in subscribeWithFilter
  subscriberId // optional, default = "", the subscriberId as in subscribeWithBuffer
  }".
  @param onMessage
  The callback called when a message arrives at the channel, data is provided in a dictionary.