Как отправить уведомление устройства на устройство с помощью FCM без использования XMPP или любого другого скрипта.?

Есть ли способ отправить сообщение уведомления о восходящем streamе через FCM с одного устройства Android на другие устройства, связанные с базой данных Firebase.

Я знаю, что XMPP-сервер может затем получать восходящие сообщения и отправлять уведомления другим устройствам. Чтобы получать сообщения, отправленные с помощью upstream API, мне нужно реализовать XMPP-сервер, но есть какой-либо другой способ?

Есть ли способ отправить сообщение уведомления о восходящем streamе через FCM с одного устройства Android на другие устройства, связанные с базой данных Firebase?

В настоящее время невозможно отправлять сообщения с одного устройства на другое.
(или, по крайней мере, это невозможно без внедрения ОГРОМНОЙ уязвимости безопасности: подробнее см. ниже)

Полная информация:

  1. Отправка сообщений на пользовательское устройство – довольно серьезное действие!
    на основе полезной нагрузки сообщение может привести к спаму, фишингу, выполнению внутренних методов.
  2. Вы хотите, чтобы эта операция была разрешена только для доверенных объектов, поэтому API-интерфейс отправки FCM требует SERVER-API-KEY в заголовке проверки подлинности.
  3. Добавление SERVER-API-KEY в код приложения (или передача его в приложение каким-либо другим способом) НЕ БЕЗОПАСНО . Это связано с тем, что apk может быть извлечен, декомпилирован, проверен, выполнен на эмуляторах, выполнен в рамках отладки и так далее.

Лучший способ реализовать это сегодня – это иметь какой-то сервер между двумя устройствами:

 [DeviceA] -- please send message to B --> [SERVER] -- fcmSendAPI --> [DeviceB] 

Сервер может быть таким же простым, как страница PHP, или более сложная реализация XMPP.

Пример в Node.js можно найти здесь:
Отправка уведомлений между устройствами с базой данных Firebase и облачными сообщениями

Наконец, через 2 месяца, пытаясь поддерживать надежный серверный скрипт, я неожиданно обнаружил OneSignal . Он полностью бесплатный, поддерживает push-сообщения устройства на устройство в iOS, Android, WP и браузерах.

Надеюсь, я не получу флаг для рекламного спама, но в настоящее время это единственный (и самый простой) способ быть полностью «беззащитным» .

Кроме того, это абсолютно безопасный способ. Никто не может отправлять push, если он не знает специального идентификатора пользователя ОС, который вы можете хранить в базе данных Firebase, защищенной правилами.

UPD: Это не замена Firebase. Он имеет только услугу push и ничего больше

UPD2: Firebase теперь имеет функции, а примеры ее использования отправляют FCM. Теперь вам не нужен какой-либо другой сервер или услуга. Читайте больше в официальных примерах https://github.com/firebase/functions-samples

После многих попыток, наконец, я получил одно решение и его работу отлично

Шаг 1. Включите две библиотеки.

 compile 'com.squareup.okhttp3:okhttp:3.4.1' compile 'com.google.firebase:firebase-messaging:9.2.0' 

Шаг 2. В вашей главной службе или откуда вы хотите отправлять уведомления.

 OkHttpClient mClient = new OkHttpClient(); String refreshedToken = "";//add your user refresh tokens who are logged in with firebase. JSONArray jsonArray = new JSONArray(); jsonArray.put(refreshedToken); 

Шаг 3: Создайте одну асинхронную задачу, которая отправляет уведомления всем устройствам.

 public void sendMessage(final JSONArray recipients, final String title, final String body, final String icon, final String message) { new AsyncTask() { @Override protected String doInBackground(String... params) { try { JSONObject root = new JSONObject(); JSONObject notification = new JSONObject(); notification.put("body", body); notification.put("title", title); notification.put("icon", icon); JSONObject data = new JSONObject(); data.put("message", message); root.put("notification", notification); root.put("data", data); root.put("registration_ids", recipients); String result = postToFCM(root.toString()); Log.d("Main Activity", "Result: " + result); return result; } catch (Exception ex) { ex.printStackTrace(); } return null; } @Override protected void onPostExecute(String result) { try { JSONObject resultJson = new JSONObject(result); int success, failure; success = resultJson.getInt("success"); failure = resultJson.getInt("failure"); Toast.makeText(MainActivity.this, "Message Success: " + success + "Message Failed: " + failure, Toast.LENGTH_LONG).show(); } catch (JSONException e) { e.printStackTrace(); Toast.makeText(MainActivity.this, "Message Failed, Unknown error occurred.", Toast.LENGTH_LONG).show(); } } }.execute(); } String postToFCM(String bodyString) throws IOException { public static final String FCM_MESSAGE_URL = "https://fcm.googleapis.com/fcm/send"; final MediaType JSON = MediaType.parse("application/json; charset=utf-8"); RequestBody body = RequestBody.create(JSON, bodyString); Request request = new Request.Builder() .url(Url.FCM_MESSAGE_URL) .post(body) .addHeader("Authorization", "key=" + "your server key") .build(); Response response = mClient.newCall(request).execute(); return response.body().string(); } 

Шаг 4: Позвоните в onclick вашей кнопки

  btnSend.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { sendMessage(jsonArray,"Hello","How ru","Http:\\google.com","My Name is Vishal"); } }); 
  • Что такое ярлык для автоматического импорта всех в Android Studio?
  • Как установить тайм-аут в библиотеке дооснащения?
  • Android - многолинейная линейная компоновка
  • Как получить доступ к файлу в папке с ресурсами?
  • Android: как программно найти имя версии Android?
  • Android: как обнаружить, когда свиток закончился
  • Android: прокрутка изображения
  • Разница между OnTouch и OnClick Android
  • Адаптер пейджера не отображает изображение после получения ответа от fragmentа
  • Добавление изображения в Toast?
  • как повернуть bitmap на 90 gradleусов
  • Interesting Posts

    Разница между «этими» и «супер» ключевыми словами в Java

    Перенесите медиатеку iTunes * с * метаданными на новую машину

    Получить окончательный сгенерированный источник HTML с помощью c # или vb.net

    Как элегантно проверить, находится ли число в пределах диапазона?

    Удаление файла из нескольких загружаемых файлов при нажатии кнопки при использовании ввода файла HTML5

    C # как зарегистрировать сборку в GAC без GacUtil?

    Как определить, какие устройства находятся в слоте PCI

    Настройка WebView для просмотра рабочего стола, а не для мобильного сайта

    Изменение номера порта проекта в Visual Studio 2013

    Windows 7 VPN как не туннелировать интернет?

    Рабочий лист Excel VBA Load в функции

    Как я могу вернуть пользовательский код состояния HTTP из метода WCF REST?

    Ошибка при загрузке действительного документа Windows-1252 «Системная ошибка: -2146697210»

    Каков наилучший способ потокового видео с моего компьютера на телевизор? (Предпочтительно беспроводным способом)

    Go 1.3 Сборщик мусора, не отбрасывающий серверную память обратно в систему

    Давайте будем гением компьютера.