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?

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.

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

  • ¿Es posible usar WebSockets o similar con una aplicación nativa de Android?
  • Comenzando en una nueva línea en el emulador (proyecto Android Eclipse)
  • Material-calendarview set color de fondo de las fechas
  • ¿Cuándo son TODOS los casos en que se llama al método onSaveInstanceState ()?
  • Cómo implementar el reconocimiento de gestos en el uso de Android
  • El geocodificador no siempre devuelve un valor
  • ¿Hay una manera de obtener una lista de todas las clases de un archivo .dex?
  • Ubicación del usuario de Google Maps V2 para Android
  • Ubuntu 15.04 construir Android 5.0 error: Usted está tratando de construir con la versión incorrecta de java. ¿por qué?
  • ViewPager ¿Fragmentos que se destruyen con el tiempo?
  • ¿Cómo obtengo las preferencias compartidas en Asynctask?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.