code: function(udidOrCallback, callback) {
      var self = this;
      var udid, cb;
  
      if(isFunction(udidOrCallback)) {
        cb = udidOrCallback;
      } else {
        udid = udidOrCallback;
        cb = callback;
      }
  
      if(!isFunction(cb)) {
        throw new Error('The QB.addressbook.get accept callback function is required.');
      }
  
      var ajaxParams = {
        'type': 'GET',
        'url': Utils.getUrl(config.urls.addressbook),
        'contentType': 'application/json; charset=utf-8',
        'isNeedStringify': true
      };
  
      if(udid) {
        ajaxParams.data = {'udid': udid};
      }
  
      this.service.ajax(ajaxParams, function(err, res) {
        if (err) {
          // Don't ask me why.
          // Thanks to backend developers for this
          var isFakeErrorEmptyAddressBook = self._isFakeErrorEmptyAddressBook(err);
  
          if(isFakeErrorEmptyAddressBook) {
            cb(null, []);
          } else {
            cb(err, null);
          }
        } else {
          cb(null, res);
        }
      });
    }
docs: Retrive all contacts from address book.
  The method accepts 1 or 2 parameters.
  @memberof QB.addressbook
  @param {string|function} udidOrCallback - You could pass udid of address book or
  callback function if you want to get contacts from global address book.
  @param {function} [callback] - Callback function is used as 2nd parameter if you pass udid as 1st parameters.
  This callback takes 2 arguments: an error and a response.
  
  @example
  var UDID = 'D337E8A4-80AD-8ABA-9F5D-579EFF6BACAB';
  
  function gotContacts(err, contacts) {
  contacts.forEach( (contact) => { alert(contact); })
  }
  
  QB.addressbook.get(gotContacts);
  // or you could specify what address book you need by udid
  QB.addressbook.get(UDID, gotContacts);