Estoy usando Bonjour (NSNetServiceBrowser, para ser precisos) a través de WiFi en una aplicación que estoy desarrollando para un proyecto iOS en el que he estado trabajando.Problemas de NSNetServiceBrowser/Bonjour en iOS
Sin embargo, a pesar de señalar los problemas planteados en la excelente respuesta en Why does NSNetServiceBrowser find unpublished services in iPhone OS?, sigo encontrando una serie de dificultades con NSNetSericeBrowser.
Mi configuración es la siguiente:
- Trabajar con iOS 4.5.3 iPads con.
- Uso de un AirPort Express como punto de acceso/enrutador.
- Ejecutar dns-sd -B _serviceName en mi Mac conectado a la red funciona bien, es decir, todas las llamadas para publicar y detener se reflejan inmediatamente en el escritorio.
Sin embargo, he experimentado los siguientes temas: - (aprox. 15 minutos +)
- servicios que se publican durante mucho tiempo tienden a no se eliminan en los clientes a pesar de que desaparezcan de la ¡Mac! (es decir, didRemoveService no se llama).
- A veces los servicios que se publican no son vistos por otros en la red, aunque aparezcan en la Mac. (es decir, didFindService no llamado) - esto probablemente esté relacionado con los puntos 3/4 a continuación ... por lo que si la aplicación comienza a ejecutarse (y buscar) antes de que el iPad se conecte a la red, entonces no busca el nuevo red correctamente.
- ¿Qué sucede si un dispositivo cambia de red después de publicando un servicio? Descubrí que Bonjour hace no, vuelve a publicar el servicio en la nueva red, ¿cómo puede uno forzar esto?
- ¿Qué sucede si un dispositivo cambia de red mientras busca servicios? Descubrí que esto también causa problemas y tiende a que no se encuentre la sesión (didFindService no se llamó).
Los problemas que he tenido son extraños, porque Bonjour funciona el 90% del tiempo ... ¡es solo ese 10% el que está arruinando la fiabilidad de mi aplicación! Lo molesto es que TODOS los problemas anteriores se pueden resolver al presionar dos veces el botón de inicio y cerrar la aplicación, y luego volver a ejecutarla. Después de ejecutarlo nuevamente, SIEMPRE encuentra las sesiones correctas o las publica correctamente.
Una forma de eludir este problema sería desmontar y reiniciar el NSNetServiceBrowser cada vez que se cambie la red inalámbrica ... pero esto parece muy desordenado e innecesario. Lo frustrante es que Bonjour es una API de alto nivel sin opciones reales de ajuste y prueba.
¿Alguna idea de cómo podría resolver los problemas del 1 al 4?
Gracias!
No entiendo por qué esta pregunta no ha recibido más atención, tengo problemas similares y es realmente irritante. – jbat100