1. Постоянное соединение удобнее всего реализовывать на сокетах.
2. Подводные камни - реконнект и восстановление сесии. Необходимо дополучить данные которые были переданы во время дисконекта.
5. Могу предположить, что GCM работает все же асинхронно, а сокет нужны для постоянного соединения(например для чатов или онлайн игр)