Краш при ивенте left (при использовании FPWCSApi2RoomManager)

Ivan Balychev

New Member
@Max Периодически происходит краш при приходите ивента Left

Code:
LiveXP[1215:272649] Room onData LEFT


2021-02-24 19:03:41.012172+0200 LiveXP[1215:272649] -[__NSCFNumber length]: unrecognized selector sent to instance 0xaa3ecf20131a45c6


2021-02-24 19:03:41.032023+0200 LiveXP[1215:272649] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber length]: unrecognized selector sent to instance 0xaa3ecf20131a45c6'


*** First throw call stack:


(0x1827a99d8 0x196b2fb54 0x1826b9bbc 0x1827ac01c 0x1827adf8c 0x183961cd4 0x101493254 0x101493ca0 0x105d07ce4 0x105d09528 0x105d17994 0x1827295e0 0x182723a88 0x182722ba0 0x19948b598 0x1850142f4 0x185019874 0x1013dd654 0x182401568)


libc++abi.dylib: terminating with uncaught exception of type NSException


*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber length]: unrecognized selector sent to instance 0xaa3ecf20131a45c6'


terminating with uncaught exception of type NSException
Screenshot 2021-02-24 at 19.04.32.png
 

Max

Administrator
Staff member
Добрый день
Воспроизводится ли проблема в примере Video Chat или Conference? Если нет, модифицируйте код примера минимально для того, чтобы краши начали воспроизводиться, и пришлите, используя эту форму
 

Ivan Balychev

New Member
Выявил проблему: происходит при ивенте Left, когда в параметре info приходит не строка а number

Респонз в примере:

Code:
{"message":"OnDataEvent","data":[{"operationId":"eecfe223-918b-40c2-a063-214e4fb39af3","payload":{"name":"LEFT","roomName":"ivan_test_4/ivan_test_20","info":"336"}}]}
Респонз от нашего сервера:

Code:
{"message":"OnDataEvent","data":[{"operationId":"eecfe223-918b-40c2-a063-214e4fb39af3","payload":{"name":"LEFT","roomName":"ivan_test_4/ivan_test_20","info":336}}]}
Тоесть, поле info приходит как number а не как string.
Считаю проблему больше на нашей стороне, однако все же в сдк неплохо иметь проверку на типы данных внутри ивента.
 

Max

Administrator
Staff member
Тоесть, поле info приходит как number а не как string.
Да, должно быть string, т.к. список участников хранится в виде словаря, а не массива. Это во всех SDK так.
Считаю проблему больше на нашей стороне, однако все же в сдк неплохо иметь проверку на типы данных внутри ивента.
Если вы проксируете ответы от нашего бэкенда, то такого не должно происходить, т.к. он типы данных проставляет правильно.
Если же Вы полностью подменяете наш бэкенд, то необходимо использовать те типы данных, которые SDK понимает. Проверку типов добавить, скорее всего, можно, но чем должна заканчиваться такая проверка, если сообщение ее не проходит: разрывом сессии? игнорированием сообщения?
 

Ivan Balychev

New Member
Это уже особенности реализации :) (чем она закончиться)
Но как минимум не крашем приложения :(
 

Max

Administrator
Staff member
Добавили тикет WCS-3087.
Как временное решение, рекомендуется проксирование к стандартному бэкенду через свой, поскольку стандартный бэкенд формирует ответы правильно.
 

Ivan Balychev

New Member
Спасибо, на стороне нашего сервера мы это исправили. Но все же иметь проверку в сдк, которая не приведет к крашу - возможно кому-то поможет в будущем.
 

Max

Administrator
Staff member
Добрый день.
В сборке 2.6.37 добавили валидацию ответа сервера, SDK будет выводить в лог сообщение Error converting JSON to FPWCSApi2RoomMessage и не пропускать такое событие дальше.
Отметим, что SDK проводит валидацию любых сообщений от сервера, не только RoomApi, в связи с этим рекомендуется обновить WCS до сборки 5.2.935 или новее, поскольку в этой сборке добавлены сообщения о статусе публикуемого потока muted/umnumed, и наличие этого статуса также валидируется.
 
Top