2010-12-15 7 views
1

Ich verwende einen VOiP-Socket in meiner iPhone-Anwendung. Ich schaffe es, sowohl im Hintergrundmodus als auch wenn die Anwendung im Vordergrund ist, richtig zu funktionieren.Wie kann man * Hintergrundsockel beim iPhone-Start in einer VOiP-Anwendung richtig verbinden?

Mein Problem ist bei iPhone-Start: Wie kann man sicher sein, dass das iPhone Netzwerkzugriff (3G oder Wifi) hat, um den Anschluss richtig zu verbinden, ohne den Benutzer zu stören?

Einzelheiten: eine VoIP-Anwendung soll automatisch so schnell gestartet werden, wie das iPhone beginnt: das funktioniert ok, die didFinishLaunching aufgerufen werden direkt nach den iPhone Start-ups. Aber zu diesem Zeitpunkt hat der Benutzer möglicherweise seinen PIN-Code nicht eingegeben (so dass 3G nicht verfügbar ist) und WLAN ist möglicherweise nicht verfügbar. Gibt es irgendeine Technik zu start automatisch die VOIP-Buchse, wenn der Netzwerkzugriff in Ordnung ist?

Mein derzeitiger Ansatz, der fehlschlägt: in der didFinishLaunching versuche ich weiterhin, die VOiP-Buchse alle 5 Sekunden zu starten. Wenn es zu lange dauert, ohne die Verbindung herzustellen, wird das Betriebssystem die App beenden (max. 20 Sekunden), aber wenn die App als "VOiP" markiert wird, wird sie erneut gestartet und so weiter. .. Nach einer Weile, wenn das Netzwerk in Ordnung ist, wird der Socket erstellt, verbunden und alles scheint OK zu funktionieren, AUSSER, dass, wenn Daten an den Socket kommt, mein Rückruf didReceivedData nicht aufgerufen wird (ich zeige eine lokale Benachrichtigung als sobald ich etwas aus dem Socket zum Debug-Zweck bekomme).

Dann, wenn Ich beginne die Anwendung nur 1 Mal, und dann beenden Sie es (Home-Taste), so dass die Anwendung in den Hintergrund gesetzt wird, in diesem Fall wird der Socket-Callback ordnungsgemäß aufgerufen und ich sehe lokal Benachrichtigungen angezeigt werden, Beweis, dass der Socket in diesem Fall ordnungsgemäß aufwacht.

Ich möchte die VOiP-Buchse direkt vom Start des iPhone (sobald das Netzwerk in Ordnung ist) starten, ohne dass der Benutzer die Anwendung einmal starten muss. Irgendeine Idee, wie man das erreicht?

Antwort

0

Verwenden Sie die Erreichbarkeitsklasse, um alle X Sekunden nach Konnektivität zu suchen, versuchen Sie dann, eine Verbindung herzustellen.

Erreichbarkeit dauert nicht so lange wie die Erstellung des VoIP-Sockets wird.

+1

Warum nicht, aber wie können Sie die Erreichbarkeit im Hintergrund abrufen? Da dies keine VoiP/Location etc (Standard-Hintergrundaufgaben) ist, frage ich mich, wie ich eine solche Long-Running-Hintergrundaufgabe wie "Poll Erreichbarkeit" erreichen kann? Vielleicht als Implementierung eines "Abschluss einer Aufgabe mit endlicher Länge im Hintergrund", wie in http://developer.apple.com/library/ios/documentation/iphone/conceptual/iphoneosprogrammingguide/BackgroundExecution/BackgroundExecution.html#//apple_ref/doc beschrieben/uid/TP40007072-CH5-SW12? Das Problem ist, dass die "applicationDidEnterBackground" nicht beim Booten aufgerufen wird:/ – yonel

+2

Hallo, "Abschluss einer Finite-Length-Aufgabe im Hintergrund" kann jederzeit gestartet werden, wie ich entdeckt habe. Das heißt, Sie könnten Ihre Hintergrundaufgabe beim Start erstellen. SO werden Sie bis zu 10 Minuten bekommen, um Ihre Socketconnections zu machen! – JackPearse

+0

Mit ein wenig Verspätung .... danke Jack, ich werde es versuchen, ich lese darüber in einem anderen SO-Thread und das ist eine interessante Sache zu versuchen. – yonel