В рамках работ по переходу клиентской части Push & Pull в мобильном приложении на нативный вызов, пришлось изменить формат отправляемых на сервер сообщений.
(это то что вы отправляете через CPullStack::AddByUser, CPullWatch::addToStack )
Ранее мы кодировали команды к серверу с помощью нашей волшебной CUtil::PhpToJSObject()
По не известным науке причинам (хвостов не найти), кодирование происходит не по стандартам JSON, из-за этого мы не можем нативными средствами анализировать содержимое пакетов и проводить над ними какие либо операции, а нам очень надо
В обновлении Push & Pull версии 18.0.0 мы переходим к кодированию через Bitrix\Main\Web\Json::encode
В связи с этим, ваш JS код может поймать несколько ошибок связанных с типизацией, а может и не поймать, нужно проверять
Например: вы отправляли следующий массив
Array( "id" => 1234 ) |
{"id":"1234"} |
Начиная с обновления pull 18.0.0 такой код будет приводить к ошибке, нужно заменить его на id.toString().indexOf('12')
В следующем примере, вы можете увидеть разницу, отправляем массив:
$array = Array( 'digit' => 123, 'string' => 'abc', 'mixed' => 'abc123', 'booleanTrue' => true, 'booleanFalse' => false, 'null' => null, 'array' => Array(1,2,3), 'arrayAssoc' => Array("1" => 1, "2" => 2, "3" => 3), 'arrayEmpty' => Array(), 'empty' => '', ); |
{ "digit": 123, "string": "abc", "mixed": "abc123", "booleanTrue": true, "booleanFalse": false, "null": null, "array": [ 1, 2, 3 ], "arrayAssoc": { "1": 1, "2": 2, "3": 3 }, "arrayEmpty": [], "empty": "", } |
CUtil::PhpToJSObject
{ 'digit':'123', 'string':'abc', 'mixed':'abc123', 'booleanTrue':true, 'booleanFalse':false, 'null':'', 'array':[ '1', '2', '3' ], 'arrayAssoc':{ '1':'1', '2':'2', '3':'3' }, 'arrayEmpty':[], 'empty':'' } |
Пожалуйста, в течении лета, выделите время и проверьте ваш код (который отправляет мгновенные команды и принимает их) на отсутсвие ошибок!
Предварительный код нового модуля находится во вложении.
Подробнее о технологии вы можете прочитать здесь
pull.zip
(99.5 КБ)