Cómo utilizar PubNub publicar devolución de llamada para averiguar qué mensaje volver a publicar en caso de un error
La devolución de llamada de publicación en la API de PubNub devuelve un mensaje como el siguiente:
[1,"Sent","13729639808030640"]
Pero esto no da ninguna indicación en cuanto a para qué mensaje es esta devolución de llamada. En caso de error de publicación, el primer valor en la matriz de retorno será 0. Pero ¿cómo saber qué mensaje volver a publicar?
- Java MimetypesFileTypeMap siempre devuelve la aplicación / octet-stream en el emulador de Android
- ¿Existe una API disponible para usar la función de control remoto de red de Samsung TV?
- Cómo borrar el contenido del archivo de texto sin borrarlo
- ¿Cómo llamar a un método cada vez que se está viendo una actividad?
- Serialización y des-serialización de android.graphics.Bitmap en Java
El editor puede publicar mensajes a una velocidad alta y no esperar a recibir la devolución de llamada antes de publicar otro mensaje. Por lo tanto, cuando se invoca la devolución de llamada, el editor ya pudo haber publicado 10 mensajes más.
- Cómo hacer un Libgdx Bitmapfont de modo que es el color de los píxeles es la inversa del fondo?
- Cómo centrarse en ScrollView y LinearLayout
- AndroidDebugKey Keystore fue manipulado, o la contraseña era incorrecta
- Listview se bloquea en modo retrato cuando se hace clic en elementos (con fragmentos)
- IllegalBlockSizeException al intentar cifrar y descifrar una cadena con AES
- IntelliJ IDEA 13 error: seleccione Android SDK
- El detector de progreso de subida no se disparó (API de unidad de Google)
- ¿Quién está agregando "\ n" en la imagen codificada en Base64 cuando la escribo en un archivo? Java
PubNub REST API también proporciona el formato JSONP. Puede crear un mapa de los identificadores de la función de "devolución de llamada" a los mensajes reales y al finalizar el procesamiento, puede obtener una referencia en el mensaje original utilizando el identificador de la función de devolución de llamada como respuesta.
Por ejemplo:
https://pubsub.pubnub.com/publish/demo/demo/0/iosdev/m_2c453/%22Hello%20world2%22
Como se puede ver, hay m_2c453
en URI, que será utilizado por el servidor en respuesta:
m_2c453([1,"Sent","14034711347326358"])
Y aquí sabemos, que m_2c453
se ha utilizado para enviar "Hello world"
mensaje.
Pero, creo que la plataforma dependiente PubNub SDK debe manejar todo esto para usted.
Se transfiere aquí ya que es demasiado largo para una respuesta de mensaje.
En respuesta con @Geremy, por lo que si el mensaje 1,2,3,4,5 se enviará, voy a obtener una devolución de llamada en 1,2,3,4,5 orden? No habrá un caso donde una respuesta fallará en decir 2 y 4? En ese caso, si continuamos con la noción de que recibimos una respuesta ordenada, esto significaría que una respuesta no llegó a los mensajes 4 y 5 en lugar de 2 y 4. ¿Puedo sugerir al equipo pubnub que agreguen un Cuarenta datos en el JSONArray que devuelven, contendría el campo id en el mensaje que se publicó (si hay tal información, por ejemplo, {"id": 123, mensaje: "hola"}), si no hay ninguno, obviamente el ID devuelto sería cadena nula o vacía.
Me enfrenté a un desafío similar. Quería hacer cola de mensajes mientras el dispositivo está desconectado, y luego enviarlos al volver a conectar. En la devolución de llamada necesitaba una forma de saber qué mensaje se envió para eliminarlo de la cola. He ideado esta solución:
function sendData(channel, data, callback) { Pubnub.publish({ channel: channel, message: data, callback : callback }); } //This code is placed within the "reconnect" callback of the subscription if ($localStorage.chatQueue.length) { for (var i = 0; i < $localStorage.chatQueue.length; i++) { sendData( $localStorage.chatQueue[i].channel, $localStorage.chatQueue[i].data, function(){ console.log("arguments"); console.log(arguments); console.log("this"); console.log(this); index = $localStorage.chatQueue.indexOf(this); console.log("Message in offline queue sent, index = "+index); if (index > -1) { $localStorage.chatQueue.splice(index, 1); } }.bind($localStorage.chatQueue[i]) ); } }
El truco está vinculando this
en la función de devolución de llamada al objeto de mensaje. Parece funcionar. Supongo que también podría limitarse a la variable i
que daría un puntero directo al mensaje en la cola.
Me inspiré en esta respuesta en otra pregunta: https://stackoverflow.com/a/19472945/3319392
- Android.view.InflateException: Línea de archivo XML binario # 33: Error al inflar la clase
- Búsqueda personalizada android