На сервере почти никаких, единственное что нужно это fcmtoken. То есть приложение при первом запуске должно отправить fcmtoken, его сохранить на сервере. Затем когда приходит сообщение, надо определить fcm token получателя и через curl по моему Post запрос на сервер гугла отправить. Если чат общий, то там есть встроенные решения для отправки по группам, по моему просто просто доп параметр надо добавить. В приложении обработка стандартная, стандартный гугловский класс код разбирает. Подводных камней ноль, единственное, там два параметра есть для отправки пуша, первый выводит сообщения в notifications, а второй ничо не делает, а просто передает его в broadcast reciver приложения. И это, в андроиде нет ограничений для объема сообщения, то есть его можно на сервере вообще не хранить, а как есть отправлять, подделать его все равно не выйдет, все пуши подписываются.