2016-12-26 2 views
2

Мне нужны некоторые пояснения.Один-на-один Android-чат с использованием Firebase

Я использую базу данных реального времени Firebase.

Теперь я должен реализовать чат реального времени между двумя устройствами Android. Мне также нужны push-уведомления.

Таким образом, решение, основанное на базе в режиме реального времени, чтобы упасть, потому что, если приложение не работает, он не будет обрабатывать onChildAdded события.

Я прочитал документацию, что могу достичь своей цели, используя сообщение вверх по потоку от устройства к серверу.

Теперь также написано, что нам нужен сервер приложений.

Я просто хочу, чтобы уточнить необходимость сервера приложений (XMPP или HTTP), и что весь поток сообщений m1 посылается от устройства А, и уведомление о устройстве B.

В мое мнение приложение сервер должен действовать как человек в середине, так:

---> XMPP SERVER ---> FCM

FCM ---> XMPP SERVER --- > B

Это поток? В документации я не могу понять, прав я или нет. Если да, то как отправить сообщение из FCM обратно на сервер XMPP? Уведомляющее сообщение отправляется из FCM клиенту o с сервера XMPP?

Пожалуйста, уточните меня.

Другое решение думали мной: Так как я считаю, очень мощный firebase базу данных в режиме реального времени, я думал, что эти решения, чтобы ходить вокруг проблемы:

  1. Создать приложение сервер прослушивает onChildAdded и когда он изменяет отправить уведомление на клиентское устройство.
  2. Создание фоновой службы на клиентском приложении, прослушивание onChildAdded и создание уведомления при необходимости.

Даже не все эти решения мне не нравятся. Просто хочу понять стандартный и правильный способ достижения моей цели.

+0

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

+1

Вы можете взглянуть на эту ссылку. Это может помочь. https://firebase.googleblog.com/2016/08/sending-notifications-between-android.html –

+0

@ReazMurshed: Мне нужно реализовать push-уведомление, когда приложение не запущено. С единственной базой данных в реальном времени это невозможно. Если приложение не работает, оно не может обработать событие. Я читаю блог. Я понимаю, что написано, но я думаю, что это не лучшее решение, потому что документация на сайте firebase предлагает использовать Firebase Cloud messaging и сервер приложений для достижения того, что мне нужно. – xcsob

ответ

1

Firebaser и автор статьи обсуждался в вопросе комментарии здесь

отправлять сообщения на устройство с Firebase Cloud Messaging, вам необходимо указать ТСМ ключ сервера вашего проекта. Как следует из названия, этот ключ должен использоваться только в коде, который работает в доверенной среде: то есть на сервере, который вы контролируете.

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

  1. один пользователь отправить выше по течению сообщение
  2. другой пользователь получает вниз по течению сообщение

Использование Firebase Cloud Messaging и свой собственный код приложения сервера, вы можете обрабатывать шаг 2. Но это все еще оставляет шаг 1: пользователь должен отправить сообщение, которое каким-то образом вызывает ваш код на сервере приложений. Существует немало способов сделать это.

Например, вы можете реализовать конечную точку HTTP на своем сервере приложений, и приложение чата также отправит туда сообщения (в дополнение к отправке в базу данных).

Вы также можете реализовать конечную точку XMPP и попросить приложение чата отправить там сообщение (снова в дополнение к отправке его в базу данных).

My article предлагает еще один способ, который не требует реализации конечной точки вообще. Он использует сценарий node.js, который работает на вашем сервере приложений и по существу является просто клиентом базы данных. Всякий раз, когда этот скрипт обнаруживает соответствующее сообщение чата, он вызывает API FCM и отправляет нисходящее сообщение.

Этот шаблон использования базы данных Firebase в качестве конечной точки, а затем с использованием серверных сценариев довольно распространен при использовании Firebase. Мы задокументировали это в нашем классическом блоге Where does Firebase fit in your app? (как вариант 2) и в этом article in the Google Cloud documentation.

+0

Привет, человек, спасибо за ответ. Я рассматривал вашу статью как конкретное решение моей проблемы. Я решил реализовать Java-сервер, который прослушивает уведомление (как и в вашей статье), а затем отправляет уведомление пользователю. Мои сомнения: 1) это масштабируемое решение? Может ли сервер быть шеей бутылки? Лучше реализовать его в узле, чтобы быть более надежным и эффективным? 2) сообщение между двумя устройствами всегда обменивается данными в реальном времени, единственное, что изменяется, - это уведомление, отправленное, когда кто-то отправляет сообщение? Я имею в виду: – xcsob

+0

Отправить сообщение B. Это будет означать: 1) добавьте сообщение в качестве ребенка в чате A-B; 2) добавьте запрос уведомления в качестве дочернего элемента уведомления организации. 3) сервер приложений читает дочерний элемент уведомления и отправляет push-уведомление на B 4) B откройте чат и увидите сообщение с помощью прослушивателя onChildAdded в чате A-B. Это поток? Спасибо. – xcsob

+0

Хорошо объяснил @FrankvanPuffelen. –

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