Intereting Posts
InApp Billing Security и метод удаленного вызова метода Контекст приложения SharedPreferences и контекст активности Android CalendarView замедляет компоновку Что означает // noinspection ForLoopReplaceableByForEach означает? Настроить фокус на EditText Что такое обезьяна, которая возится с моим телефоном Android? Студия Android «У вашего приложения нет последних изменений кода ..» Как удалить белое подчеркивание в виджет SearchView на панели инструментов Android Приложения Android OpenGL перестают работать после загрузки в эмулятор SetBackgroundResource () отбрасывает мои атрибуты макета XML Ошибка в окончательной последовательности запуска Не удалось выполнить команду MI -gdb-set target-async off Значки «Назад» и «Переполнение» Неправильный цвет в предустановленных устройствах после обновления до библиотеки поддержки 23.2.0 Как мне обрабатывать намерение «share page» браузера в android? Модуль ядра HAX не установлен Не удается разрешить символ «GoogleCloudMessaging» GCM

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

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

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

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

Есть ли способ отправить сообщение уведомления о восходящем потоке через 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<String, String, String>() { @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"); } });