¿Cómo enviar algunos datos adicionales al enviar notificaciones push usando OneSignal?
Estoy desarrollando una aplicación de Android, así como la escritura de un C # Web Api para él. Ahora puedo enviar notificaciones push usando el código de abajo. Pero tengo que enviar un objeto json que contenga una url para una imagen para que cuando el usuario haga clic en la notificación, una actividad en la aplicación se abre y con esa url carga la imagen con Picasso. ¿Cómo debo hacerlo?
private void SendPushNotifications(int userId) { string appId = "myAppId"; var request = WebRequest.Create("https://onesignal.com/api/v1/notifications") as HttpWebRequest; var user = db.Users.FirstOrDefault(x => x.Id == userId); if (user != null) { string message = "This job is posted by: \n" + user.Name + "\n" + user.Contact + "\n" +user.City; if (request != null) { request.KeepAlive = true; request.Method = "POST"; request.ContentType = "application/json"; request.Headers.Add("authorization", "Basic "+appId); byte[] byteArray = Encoding.UTF8.GetBytes("{" + "\"app_id\": \"app_id\"," + "\"contents\": {\"en\": \""+ message +"\"}," + "\"included_segments\": [\"All\"]}"); string responseContent = null; try { using (var writer = request.GetRequestStream()) { writer.Write(byteArray, 0, byteArray.Length); } using (var response = request.GetResponse() as HttpWebResponse) { using (var reader = new StreamReader(response.GetResponseStream())) { responseContent = reader.ReadToEnd(); } } } catch (WebException ex) { System.Diagnostics.Debug.WriteLine(ex.Message); System.Diagnostics.Debug.WriteLine(new StreamReader(ex.Response.GetResponseStream()).ReadToEnd()); } if (responseContent != null) System.Diagnostics.Debug.WriteLine(responseContent); } } }
Con esta cadena de "mensaje" también quiero enviar un objeto json.
- ¿Cómo obtener una cadena de respuesta de Retrofit sin procesar?
- Android: ¿Cómo configurar la codificación en JSONStringer para las peticiones de servicio web?
- Error StrictMode $ AndroidBlockGuardPolicy.onNetwork
- NoClassDefFoundError usando Jackson 2.2.x en Android con Gradle
- SDK de Android: Análisis de JSON de la URL mediante GSON
Edición + Solución: OneSignal permite enviar datos adicionales mediante la etiqueta 'data' en la cadena codificada que envío como a continuación:
byte[] byteArray = Encoding.UTF8.GetBytes("{" + "\"app_id\": \"app_id\"," + "\"data\": {\"foo\": \"bear\"}," + "\"contents\": {\"en\": \"" + message + "\"}," + "\"included_segments\": [\"All\"]}");
Así que en Android será mapeado en JsonObject additionalData
OneSignal.startInit(this) .setNotificationOpenedHandler(new OneSignal.NotificationOpenedHandler() { @Override public void notificationOpened(String message, JSONObject additionalData, boolean isActive) { Toast.makeText(MainActivity.this,message,Toast.LENGTH_SHORT).show(); } }) .init();
Y usted puede utilizarlo fácilmente. 🙂
- Android Google Services nuevo archivo de configuración preguntas
- Código de respuesta inesperado 500 para el método POST
- Android - ¿cómo analizar JsonArray de cadena?
- Parse JSON con valores de ambos lados
- Agregar JsonArray a JsonObject generó caracteres de escape (gson)
- ¿Cómo analizar la respuesta de json usando Jackson en android?
- Escribir datos en el archivo JSON local
- Deserialización GSON con tipos genéricos y nombres genéricos de campos
- Android Support Annotation "debería tener @Retention (RetentionPolicy.SOURCE)"
- Android: Utilizar matriz de color en XML