studio personalizadas notificaciones google enviar activar android iphone firebase xmpp firebase-cloud-messaging

android - personalizadas - ¿Cómo enviar notificaciones de dispositivo a dispositivo utilizando FCM sin utilizar XMPP o cualquier otro script?



notificaciones push android php mysql (3)

¿Hay alguna forma de enviar un mensaje de notificación Upstream a través de FCM desde un dispositivo Android a otros dispositivos conectados con la base de datos Firebase?

Actualmente NO es posible enviar mensajes directamente de un dispositivo a otro.
(o al menos no es posible sin introducir una vulnerabilidad de seguridad ENORME: más detalles a continuación)

Todos los detalles:

  1. ¡Enviar mensajes a un dispositivo de usuario es una acción bastante seria!
    basado en la carga útil, un mensaje puede generar spam, phishing y la ejecución de métodos internos.
  2. Desea que esta operación se permita solo como entidades confiables, es por eso que la API de envío de FCM requiere la SERVER-API-KEY en el encabezado de autenticación.
  3. Agregar SERVER-API-KEY en el código de su aplicación (o comunicarlo a la aplicación de alguna otra manera) NO ES SEGURO . Esto se debe a que apk se puede extraer, descompilar, inspeccionar, ejecutar en emuladores, ejecutar bajo depuración, etc.

La mejor manera de implementar esto hoy es tener algún tipo de servidor entre los dos dispositivos:

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

El servidor puede ser tan simple como una página PHP o una implementación XMPP más compleja.

Un ejemplo en Node.js se puede encontrar aquí:
Envío de notificaciones entre dispositivos con Firebase Database y Cloud Messaging

¿Hay alguna forma de enviar un mensaje de notificación de Upstream a través de FCM desde un dispositivo Android a otros dispositivos conectados con la base de datos Firebase?

Sé que el servidor XMPP puede recibir los mensajes ascendentes y enviar las notificaciones a los otros dispositivos. Para recibir los mensajes enviados con la API ascendente, ¿debo implementar un servidor XMPP pero hay alguna otra forma?


Después de muchos intentos, finalmente obtuve una solución y funciona perfectamente

Paso 1: Incluye dos bibliotecas.

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

Paso 2: en su actividad principal o desde donde desea enviar notificaciones.

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

Paso 3: cree una tarea asincrónica que envíe notificaciones a todos los dispositivos.

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(); }

Paso 4: llama al hacer clic en tu botón

btnSend.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { sendMessage(jsonArray,"Hello","How r u","Http://google.com","My Name is Vishal"); } });


Finalmente, después de 2 meses de intentar mantener un script de servidor confiable, de repente encontré OneSignal . Es completamente gratuito, admite mensajes push de dispositivo a dispositivo en iOS, Android, WP y navegadores.

Espero que no reciba la bandera de spam de promoción, pero actualmente es la única (y la más fácil) forma de ser completamente "sin fin" .

Además, es una forma completamente segura. Nadie puede enviar push a menos que conozca una identificación de usuario especial del sistema operativo, que puede almacenar en Firebase Database protegida por reglas.

UPD: No es un reemplazo para Firebase. Solo tiene servicio push y nada más

UPD2: Firebase ahora tiene funciones, y ejemplos de su uso ha enviado FCM. Ahora no necesita ningún otro servidor o servicio. Lea más en muestras oficiales https://github.com/firebase/functions-samples