2015-01-19 9 views
13

Ich bin dabei, eine VoIP-Anwendung für iOS zu schreiben, aber wenn die App im Hintergrund ist, hört sie auf, Anrufe anzunehmen. Wenn die App wieder aktiv ist, werden alle Nachrichten in der Warteschlange verarbeitet.iOS Hintergrund funktioniert nicht

Folgendes habe ich getan.

Beim Erstellen der App füge ich Voice Voice over IP sowie Audio und AirPlay zur plist Datei hinzu. Dann markiere ich die Websocket-Verbindung mit NetworkServiceTypeVoIP, wie Sie here sehen können.

Ich habe nicht den Timeout-Handler Keep Alive gesetzt, weil die Registrierung spielt keine Rolle, wenn die App nicht aufwachen wird, um den Anruf zu beantworten. Jede Hilfe würde sehr geschätzt werden.

Es sollte angemerkt werden, dass dies mein erstes Swift-Projekt ist und ich bin nicht sehr vertraut mit der iOS-Plattform.

+0

Verwenden Sie einen TCP-Socket als VoIP-Socket? http://StackOverflow.com/a/7393083/624920 –

+0

Ich benutze ein Websocket, so ist es definitiv TCP. Den Code für das Projekt finden Sie hier https://github.com/BetterVoice/phonertc/blob/master/src/ios/WebSocket.swift#L27 –

Antwort

0

Sie können Ihre Antwort oder einen Hinweis finden ->here < -

richtig zu erforschen haben die folgenden:

applicationDidEnterBackground 
beginBackgroundTaskWithExpirationHandler 
1

einen Blick auf Apple-Nehmen documentation, sind Sie wahrscheinlich daran interessiert, UIBackgroundModes=voip.

UPD:

Aus Dokumentation:

einen VoIP-App zu konfigurieren, müssen Sie Folgendes tun:

  1. Aktivieren der Unterstützung für Voice-over-IP aus dem Hintergrund Modi Abschnitt von die Capabilities-Registerkarte in Ihrem Xcode-Projekt. (Sie können auch diese Unterstützung aktivieren, indem die UIBackgroundModes Schlüssel mit dem VoIP-Wert in Ihrer App Info.plist-Datei.)
  2. Konfigurieren einer der Buchsen-App für VoIP-Nutzung.
  3. Bevor Sie in den Hintergrund wechseln, rufen Sie die Methode setKeepAliveTimeout:handler: auf, um einen Handler zu installieren, der in regelmäßigen Abständen ausgeführt werden soll ( ). Ihre App kann diesen Handler verwenden, um ihre Dienstverbindung aufrechtzuerhalten.
  4. Konfigurieren Sie Ihre Audiositzung für die Verarbeitung von Übergängen zu und von aktiver Verwendung.
+2

Wenn die Verbindung abbricht oder sich ändert, wird Ihre Antwort auf "Sie" reduziert bin wahrscheinlich an 'UIBackgroundModes = voip' interessiert.". Könntest du es ein wenig ausmalen, so dass das Folgen des Links unnötig ist? –

+1

Hat das folgende Update für Sie einen Sinn ergeben? – ilidar

+0

Ah, das ist ** viel ** besser. Vielen Dank. –

2

Damit die App im Hintergrund-Modus zu arbeiten, müssen Sie Voice-over-IP-Flag auf EIN aktivieren (Pfad: Ziel Zum -> Funktionen -> Hintergrund-Modus). wie unten.

enter image description here

Und fügen Sie in Ihrem Projekt folgenden Code im Hintergrund zu unterstützen:

Schritt 1: Declare __block UIBackgroundTaskIdentifier bgTask als globale Variable.

Schritt 2: Hinzufügen folgenden Codes in applicationDidEnterBackground.

- (void)applicationDidEnterBackground:(UIApplication *)application { 

     bgTask = [application beginBackgroundTaskWithExpirationHandler:^{ 
     bgTask = UIBackgroundTaskInvalid; 
      }]; 

} 

Schritt 3: Stop-Hintergrund-Task-Handler einmal Apps im Vordergrund Modus kommen.

- (void)applicationWillEnterForeground:(UIApplication *)application { 
    // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 

    [[UIApplication sharedApplication] endBackgroundTask:bgTask]; 

}