2015-05-15 7 views
1

все, кого я знаю, здесь не приветствуются обсуждаемые вопросы, поэтому я стараюсь сделать это как можно более программным. В двух словах я прошу улучшить способы сделать это или способы оптимизации существующего кода. Мое приложение было создано с использованием игрового движка Unity3D, однако это не игра. Я просто считаю, что двигатель очень прост в использовании, из-за этого я использую веб-сайт службы, называемый OneSignal. Достаточно бессвязных, и это становится неуместным.Внедрение обмена мгновенными сообщениями в приложении для Android

Это моя первая попытка создания приложения для обмена мгновенными сообщениями, которое не использует Sockets. Таким образом, мой лучший дизайн в лучшем случае неаккуратный. Однако, вот моя настройка:

В настоящее время я использую HTTProtocol, в котором я сохраняю всю свою логику на своем веб-сервере с помощью PHP. В основном то, что я делаю, возвращает результаты базы данных в формате JSON, который обрабатывается на C#, используя SimpleJSON, а затем обрабатывается приложением для отображения новых сообщений и т. Д. (На основе состояния «прочитано» в приложении/на сервере .)

Вот где это становится проблематичным в моих глазах. Хотя я могу отправить push-уведомление пользователю при получении нового сообщения, как бы я вытащил все эти сообщения с сервера? Единственный логичный способ, который я решил сделать, - постоянно проводить опрос веб-сервера каждые 5-10 секунд и проверять, есть ли новые сообщения. Если они есть, добавьте их в соответствующий список сообщений и примените атрибут «непрочитанное сообщение».

Должен ли телефон хранить все предыдущие сообщения пользователей в памяти? или я должен каждый раз вытаскивать все сообщения из базы данных? Второй вариант кажется, что он будет стоить гораздо больше пропускной способности, чем требуется для простой функции чата. Однако похоже, что куча сообщений, хранящихся на устройстве, приведет к помехам устройства, а чтение из хранилища плоских файлов, содержащее сообщения, каждый раз, когда вы открываете сообщение, будет (по-моему) использовать довольно немного дискового ввода-вывода. Так должны ли сообщения сохраняться в памяти? Затем вы запускаете устройство, постоянно работающее на низкой памяти, поскольку андроиды используют довольно много, и он никогда не будет собран GC, если сообщение (поток) не будет удалено.

Мне сказал друг, что я должен просто доставлять сообщения через push-уведомления и обрабатывать их на устройстве по мере их получения, но проблема в том, что push-уведомления не всегда принимаются, d заканчивается большим количеством потерянных сообщений.

Если мы постоянно проводим опрос базы данных, мы будем разряжать аккумулятор для пользователей.

У меня полная потеря за то, что здесь делать, и хотелось бы получить некоторые рекомендации. Это мое первое приложение для Android, и в то время как он идет очень, очень красиво, функцию, которую я отложил до конца, потому что я решил, что это будет просто (Messaging), оказалось самым сложным.

Если это неправильное место, чтобы задать вопрос, как это, не могли бы вы (в сопровождении вашего немедленного проголосовательного) сообщения в комментариях, где это принадлежит.

+0

Использование OneSignal для отправки уведомления толчка, когда пользователь не в вашем приложении будет наиболее эффективным для сетевого трафика и устройства; срок службы батареи. Это связано с тем, что GCM используется на устройствах Android и APNS на iOS, которые обрабатываются на уровне ОС для обеих платформ.Для приложения мгновенного сообщения вы можете посмотреть ответ Аднана, когда пользователи находятся в вашем приложении. – jkasten

+0

@jkasten - Push-уведомления также обрабатываются, когда пользователь находится в приложении, просто не отображается как «уведомление». Проблема с push-уведомлениями заключается в том, что вы не можете полагаться на них для передачи данных, поскольку они не всегда доставлены. – Hobbyist

+0

Я предлагаю использовать как Push-уведомления, так и собственную реализацию сообщений в приложении. Используйте Push-уведомления, если получатель IM не находится в вашем приложении, или они не получили сообщение, которое им нужно. Когда оба пользователя активны в чате вашего приложения взад и вперед, вы должны использовать свой собственный обмен сообщениями в приложении, чтобы ответы были мгновенными. Логику следует обрабатывать на вашем собственном сервере, когда отправить push-уведомление, только создать уведомление, если получатель не смог получить сообщение с вашей собственной IM-реализацией. – jkasten

ответ

1

Вы можете попробовать и реализовать клиент XMPP в своем приложении, поскольку Unity3d поддерживает .net/mono, вы должны найти suitable library.

уведомления Push-на самом деле не предназначены для обмена мгновенными сообщениями (по крайней мере, не для каждого отдельного сообщения)

Смежные вопросы