Richtlinien für mobile Geräte – iOS
In diesem Thema werden Aspekte behandelt, die bei der Entwicklung für ein iOS-Gerät zu beachten sind:
- Verwaltung des Hintergrundstatus
- CallKit
- Einstellungen des Datenschutzmanifests
- iOS 14 Netzwerkänderungen mit Auswirkungen auf weitergeleitete Sitzungen
- Weitere Informationen
Verwaltung des Hintergrundstatus
iOS unterstützt Multitasking für alle Apps; allerdings muss ein Entwickler einige Schritte befolgen, damit das OpenTok-iOS-SDK in verschiedenen App-Zuständen einwandfrei funktioniert. Dieses Dokument behandelt eine Reihe von Vorgehensweisen, die sich unserer Erfahrung nach bei den meisten OpenTok-Apps bewährt haben. Es ersetzt jedoch nicht das Durchlesen der Apple-Dokumentation zu diesem Thema – insbesondere die Abschnitte „Strategien für den Umgang mit App-Zustandsübergängen“, „Hintergrundausführung“ und „Tipps zur Entwicklung einer VoIP-App“. Obwohl Apple die meisten OpenTok-Apps nicht als VoIP-Apps betrachtet, sind die Inhalte zur Konfiguration von Audiositzungen und zur Socket-Konfiguration relevant und hilfreich für das Verständnis dieses Dokuments.
Schnellstart - Einstellen der App-Berechtigungen
Damit die App im Hintergrund weiter Audio aufnimmt, wählen Sie in Xcode das Ziel der App und die Option Signing & Capabilities Registerkarte. Klicken Sie dann auf die Schaltfläche + Fähigkeit und fügen Sie dem Projekt die Fähigkeit Hintergrundmodi hinzu. Wählen Sie dann die Audio, Airplay, and Picture in Picture Option. Diese Einstellung verhindert auch, dass die App während der Wiedergabe und Aufnahme von Audio im Hintergrund in einen angehaltenen Zustand übergeht.
Wenn Ihre Anwendung Push-Benachrichtigungen mit hoher Priorität benötigt, die die Anwendung bei eingehenden Anrufen aufwecken, die native Benutzeroberfläche der Telefonanwendung verwenden oder über Halteereignisse benachrichtigt werden, wählen Sie die Option Voice over IP Fähigkeit in XCode.
Was OpenTok im Hintergrund tun kann (und was nicht)
Mithilfe des OpenTok-SDKs kann eine App kann jede der folgenden Aktionen im Hintergrund ausführen:
- Halten Sie eine OpenTok-Sitzung aktiv.
- Halten Sie eine reine Audio-Sitzung ab.
- Setzen Sie Audio-/Video-Flags für Herausgeber und Abonnenten. Zum Beispiel, das Setzen der
OTPublisher.publishAudioEigenschaft zuYESist erlaubt. - Veröffentlichen Sie mit einer benutzerdefinierten Videoerfassungsimplementierung, die die Kamera nicht erfasst (z. B. Veröffentlichung aus einer Datei oder einer synthetischen Videoquelle).
Eine App kann die Verwendung der Kamera wieder aufnehmen, sobald sie in den aktiven Zustand zurückkehrt.
Anwendungen kann nicht im Hintergrund die folgenden Aktionen durchführen:
- Verwenden Sie die Kamera als Videoquelle für einen Verlag.
- Richten Sie neue Ansichten mit Videos aus OpenTok-Streams ein.
- Behalten Sie eine aktive Audiositzung bei, wenn ein Telefon- oder FaceTime-Anruf eingeht.
- Verhindern Sie, dass andere Anwendungen System-Audio-Ressourcen beanspruchen.
- Eine Verbindung zu einer OpenTok-Sitzung aufrechterhalten, ohne dass ein aktiver Publisher oder Subscriber vorhanden ist.
Aktive OpenTok-Sitzungen im Hintergrund
Die oben beschriebene Konfiguration ermöglicht es Apps, eine aktive OpenTok-Sitzung auch dann fortzuführen, wenn sich die App im Hintergrund befindet – vermutlich, weil der Endnutzer die Home-Taste gedrückt, den Bildschirm gesperrt oder URL-Inhalte in einem anderen Prozess geöffnet hat. Die audio Diese Berechtigung ermöglicht es dem App-Prozess, im Hintergrund aktiv zu bleiben, solange eine Audiositzung aktiv ist. Das bedeutet, dass die Audioaufnahme und -wiedergabe in Ihrer OpenTok-Sitzung fortgesetzt werden können, solange kein anderer Prozess Audio-Ressourcen anfordert.
Wenn es richtig konfiguriert ist, zeigt iOS an, dass Ihre App im Hintergrund mit einer aktiven Audiositzung läuft. Dies wird durch einen roten Hintergrund der Statusleiste sowie durch eine zusätzliche Leiste angezeigt, die den Namen der App mit der aktiven Audiositzung angibt - in diesem Fall Ihre App.

Die Voice over IP Fähigkeit ist für die Aufrechterhaltung von langlebigen Signalisierungsverbindungen zu einem Anwendungsserver gedacht.
Wenn Sie die Option Voice over IP Wenn Sie im Abschnitt „XCode-Funktionen“ diese Option auswählen, sollte Ihre App Funktionen implementieren, die diese Funktion rechtfertigen; andernfalls könnte Ihre App bei der App-Store-Prüfung abgelehnt werden. Diese Funktion sollte nicht dazu verwendet werden, die App aus anderen Gründen, die nicht mit Audio- oder Videokommunikation zusammenhängen, im Hintergrund laufen zu lassen.
Wenn Ihre Anwendung über Anwendungsereignisse benachrichtigt werden muss, empfehlen wir die Verwendung von Apple Push-Benachrichtigungen mit Ihrem Anwendungsserver, um die Anwendung aufzuwecken und einen Arbeitsablauf durchzuführen. Wenn Ihre Anwendung eingehende Anrufe implementiert, empfehlen wir die Verwendung des VoIP-Push-Benachrichtigungen.
CallKit
CallKit ist ein Framework, mit dem iOS-Apps die Integration in das Betriebssystem verbessern können. Dadurch kann die App:
- Benachrichtigung über eingehende oder ausgehende Anrufe an das OS
- Starten Sie die App mit einer VoIP-Push-Benachrichtigung (nur wenn Sie die Benutzeroberfläche für eingehende Anrufe anzeigen möchten)
- Audio-Routing handhaben
- Koordiniert die Audio-Sitzungen zwischen allen laufenden Apps
- Erhöht die Audioausgangspegel
- Zeigt Anrufsteuerelemente in einer Benachrichtigung und in einer nativen Anrufoberfläche an
OpenTok bietet zwei Möglichkeiten zur Integration mit CallKit:
- Einrichten einer
CustomAudioDevicedie dieAudioSessionAktivierungen. Siehe diese Probe. - Aktivieren Sie den Anrufdienstmodus mit
OTAudioDeviceManager.currentAudioSessionManager(). Die vom Audiositzungsmanager zurückgegebene Instanz sollte zur Konfiguration der Audiositzung und zur Benachrichtigung des SDK über Aktivierungen und Deaktivierungen von Audiositzungen verwendet werden. Siehe diese Probe.
Wenn Ihre App über Anwendungsereignisse wie eingehende Anrufe benachrichtigt werden soll, ist der Entwickler für die Umsetzung verantwortlich. Wir empfehlen die Verwendung der PushKit Rahmen und VoIP-Push-Benachrichtigungen. Siehe dazu diese Probe.
Für die native OpenTok-Integration muss der Entwickler den Modus „Calling Services“ bereits zu Beginn des App-Starts aktivieren. Für VoIP-Push-Benachrichtigungen ist ein Aufruf an CXProvider.reportNewIncomingCall innerhalb von 3 Sekunden, sonst kann die App abstürzen. In diesem Zeitrahmen sollte die App die SDK CallKit-Unterstützung konfigurieren, bevor die CXAnswerCallAction Rückruf ausgeführt wird.
Um den Modus der aufrufenden Dienste zu aktivieren, rufen Sie den folgenden Code in Ihrer Anwendung auf application:didFinishLaunchingWithOptions: Methode.
let sessionManager = OTAudioDeviceManager.currentSessionManager()
sessionManager?.enableCallingServicesMode()
Konfigurieren Sie die AVAudioSession im CXStartCallAction oder CXAnswerCallAction CXProvider Callbacks.
Verwenden Sie den Video-Chat-Modus für Videoanrufe oder den Voice-Chat für reine Audioanrufe.
sessionManager?.preconfigureAudioSessionForCall(withMode: .videoChat)
sessionManager?.preconfigureAudioSessionForCall(withMode: .voiceChat)
Benachrichtigung des Sitzungsmanagers über Aktivierungen und Deaktivierungen von Audiositzungen.
func provider(_ provider: CXProvider, didActivate audioSession: AVAudioSession) {
sessionManager?.audioSessionDidActivate(audioSession)
}
func provider(_ provider: CXProvider, didDeactivate audioSession: AVAudioSession) {
sessionManager?.audioSessionDidDeactivate(audioSession)
}
Prüfen Sie die CallKit-Dokumentation für Entwickler für weitere Informationen.
Die Kontrolle verlieren
Eingehende Telefon- und FaceTime-Anrufe sind wahrscheinlich die ersten Ereignisse, die Ihre Anwendung vollständig unterbrechen. Wenn dies geschieht, wird Ihre Anwendung unterbrochen, unabhängig davon, ob eine Audiositzung aktiv ist.
Wenn Ihre App angehalten wird, weil die Audiositzung einem anderen Prozess Platz gemacht hat, ist keine zusätzliche Logik erforderlich, um dies zu handhaben. Wird die App für einen längeren Zeitraum angehalten, wird die Verbindung zur OpenTok-Sitzung beendet. Andere mit der Sitzung verbundene Clients erhalten connectionDestroyed Ereignisse für die Geräteverbindung, und eine eventuelle Bereinigung wird notwendig sein, sobald die App nicht mehr ausgesetzt ist. Solange Ihr Controller die Fehler- und Trennungsereignisse für die Sitzung verarbeitet, sollte sich dies nicht von einem freiwilligen oder einem anderen Trennungsworkflow unterscheiden. Die Clients können die Verbindung wiederherstellen, sobald die Bereinigung des Verbindungsabbruchs verarbeitet wurde.
Einstellungen des Datenschutzmanifests
Die Versionen 2.27.3, 2.26.3 und 2.25.5 des Vonage Video iOS SDK bieten nun Unterstützung für die Datenschutzmanifest, das von Apples App Store verlangt wird. Bei Verwendung dieser SDK-Versionen werden die erforderlichen datenschutzrelevanten Einstellungen automatisch hinzugefügt, wenn Sie den Datenschutzbericht für Ihre Anwendung erstellen. Falls Sie eine ältere Version des Vonage Video React Native SDK verwenden müssen, können Sie die erforderlichen Datenschutzeinstellungen manuell hinzufügen, basierend auf die Einstellungen in dieser Datei in die Datenschutz-Manifestdatei Ihrer eigenen App.
iOS 14 Netzwerkänderungen mit Auswirkungen auf weitergeleitete Sitzungen
Mit iOS 14 führt Apple den Datenschutz im lokalen Netzwerk ein (siehe dieses Video).
Ab iOS 14 fordert das Betriebssystem den Benutzer zur Erteilung einer Berechtigung auf, wenn eine Application versucht, Clients im selben lokalen Netzwerk in einem weitergeleitete Sitzung. Der Standardtext in der Benachrichtigung besagt, dass die App „Geräte in Ihrem lokalen Netzwerk finden und eine Verbindung zu ihnen herstellen möchte“.
Bei einer weitergeleiteten Sitzung nutzt die Vonage Video API das lokale Netzwerk, um Videoteilnehmer in Ihrem lokalen Netzwerk zu erkennen und eine Verbindung zu ihnen herzustellen, sofern dies möglich ist. Wenn Clients keine Verbindung im lokalen Netzwerk herstellen können, nutzt die Anwendung den OpenTok-TURN-Server, um Audio- und Videostreams weiterzuleiten.
Wenn der Benutzer die Berechtigung ablehnt, kann der Versuch, sich anzumelden, fehlschlagen, falls der Client keine Verbindung zum OpenTok-TURN-Server herstellen kann. In diesem Fall schlagen nach der Ablehnung der Berechtigung auch alle zukünftigen Versuche, sich bei Clients im selben Netzwerk anzumelden, fehl, es sei denn, der Benutzer ändert die Berechtigung in den Einstellungen. Leider stellt iOS keine API zur Verfügung, mit der eine Application feststellen kann, ob der Nutzer diese Berechtigung akzeptiert oder abgelehnt hat.
Es ist wichtig zu beachten, dass dies nicht für Videositzungen gilt, bei denen die OpenTok Media Router, da die Medien über das Internet statt über das lokale Netzwerk übertragen werden.
Wenn Ihre Anwendung eine weitergeleitete Sitzung nutzt, empfehlen wir Ihnen, einen aussagekräftigen benutzerdefinierten Verwendungshinweis hinzuzufügen, um den Benutzer darüber zu informieren, warum die Anwendung diese Berechtigung benötigt:
- Öffnen Sie in Xcode die Datei "info.plist" Ihrer Anwendung.
- Klicken Sie im info.plist-Editor mit der rechten Maustaste auf die linke Spalte und wählen Sie Zeile hinzufügen (oder klicken Sie +), um eine Einstellung hinzuzufügen für Datenschutz - Nutzung des lokalen Netzwerks Beschreibung.
- Bearbeiten Sie den Wert dieser Zeichenfolge, um zu beschreiben, wie Ihre App diese Berechtigung nutzt. Fügen Sie beispielsweise folgenden Text hinzu: „Diese App nutzt das lokale Netzwerk, um Videoteilnehmer im selben Netzwerk zu erkennen und, sofern möglich, eine Verbindung zu ihnen herzustellen.“
Die Aufforderung an den Benutzer wird diese Beschreibung enthalten.
Für Anwendungen, die keine weitergeleiteten Sitzungen nutzen können und bei denen der Benutzer nicht zur Eingabe der Zugangsdaten für das lokale Netzwerk aufgefordert werden soll, können Sie eine der in den folgenden Abschnitten beschriebenen Optionen verwenden.
Überspringen von Prüfungen des lokalen Netzwerks zur Herstellung der Medienkonnektivität
Sie können die OTSessionICEConfig.filterOutLanCandidates Eigenschaft, um die Anwendung dazu zu zwingen, das lokale Netzwerk nicht zum Aufbau einer Verbindung zu verwenden, wie im folgenden Code gezeigt.
Objektiv-C
OTSessionSettings *settings = [[OTSessionSettings alloc] init];
OTSessionICEConfig *myICEServerConfiguration = [[OTSessionICEConfig alloc] init];
myICEServerConfiguration.filterOutLanCandidates = YES;
settings.iceConfig = myICEServerConfiguration;
session = [[OTSession alloc] initWithApiKey:kApiKey
sessionId:kSessionId
delegate:self settings:settings];
Schnell
let settings = OTSessionSettings()
let myICEServerConfiguration = OTSessionICEConfig()
myICEServerConfiguration.filterOutLanCandidates = true
settings.iceConfig = myICEServerConfiguration
let session = OTSession(apiKey: apiKey, sessionId: sessionId, delegate: self,
settings: settings)
Anmerkung: Die OTSessionICEConfig.filterOutLanCandidates Diese Eigenschaft ist im OpenTok iOS SDK ab Version 2.30.0 verfügbar.
TURN-Server verwenden
Sie können die OTSessionICEConfig.transportPolicy um die Anwendung dazu zu zwingen, TURN-Server zum Aufbau der Verbindung zu verwenden, wie im folgenden Code gezeigt.
Objektiv-C
OTSessionSettings *settings = [[OTSessionSettings alloc] init];
OTSessionICEConfig *myICEServerConfiguration = [[OTSessionICEConfig alloc] init];
myICEServerConfiguration.transportPolicy = OTSessionICETransportRelay;
settings.iceConfig = myICEServerConfiguration;
session = [[OTSession alloc] initWithApiKey:kApiKey
sessionId:kSessionId
delegate:self settings:settings];
Schnell
let settings = OTSessionSettings()
let myICEServerConfiguration = OTSessionICEConfig()
myICEServerConfiguration.transportPolicy = .relay
settings.iceConfig = myICEServerConfiguration
let session = OTSession(apiKey: apiKey, sessionId: sessionId, delegate: self,
settings: settings)
Weitere Informationen
Weitere Informationen finden Sie unter: