2015-06-10 21 views
9

Die aktuelle API ändert sich für den iOS9-Status -setKeepAliveTimeout:handler: ist veraltet.setKeepAliveTimeout ist in iOS9 veraltet.

Bislang war dies die einzige Möglichkeit, wie eine VoIP-SIP-App auf iOS ihre Registrierung beim SIP-Server aufrechterhalten konnte.

Diese Technik wird von verschiedenen Apps wie LinPhone und anderen verwendet.

Hat jemand einen Blick auf die vorgeschlagenen Alternativen von Apple? Oder wird SIP ab (Post-) iOS9 lahmgelegt?

See: https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIApplication_Class/index.html#//apple_ref/occ/instm/UIApplication/setKeepAliveTimeout:handler:

http://www.linphone.org/docs/liblinphone/group__IOS.html

+0

Ich habe das gleiche Problem. Meine VoIP-App aktualisiert die Registrierung beim KeepAlive-Timeout. Es soll in einer lan-Umgebung funktionieren, auch ohne Internetverbindung, was keine Remote-Benachrichtigungen bedeutet. Meine App funktioniert gerade mit dieser veralteten API, aber ich bin mir nicht sicher, wie lange dies dauern wird. – Phani2013

Antwort

0

Apple-Dokument die Alternative in der Seite, die Sie verknüpft:

Discussion

In iOS 8 and later, voice-over-IP (VoIP) apps register for UIRemoteNotificationTypeVoIP remote notifications instead of using this method.

+3

UIRemoteNotificationTypeVoIP ermöglicht es einem externen Auslöser, die VoIP-App zu aktivieren. Dies gilt nicht für den Fall, dass der SIP-Client sich erneut beim SIP-Server registrieren muss. – chriscap

0

Es scheint, dass Sie das Signalisierungsereignis an den Apple Push Notification Server zu lecken haben durch Registrierung für https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIApplication_Class/index.html#//apple_ref/occ/instm/UIApplication/registerForRemoteNotifications.

Das ist ziemlich bedauerlich, scheint aber unvermeidlich. Die Idee dahinter ist wahrscheinlich, Batterie zu sparen, indem Sie weniger aktive Netzwerkverbindungen auf dem Telefon haben.

Das bedeutet also, dass Sie die Information, dass ein Ereignis Ihre Anwendung erreicht hat, an Apple-Dienste weitergeben müssen. Sie können wahrscheinlich nur eine Aktivierungsbenachrichtigung an Ihre App senden und dann selbst den Ereignistyp laden. Dies kann jedoch zu viel Latenz verursachen, so dass Sie möglicherweise mehr Signalisierungsinformationen an Apple-Dienste weitergeben müssen. : -/

0

Von Apple Docs:

In iOS 8 and later, voice-over-IP (VoIP) apps register for registerForRemoteNotifications remote notifications instead of using this method. Using remote notifications eliminates the need for a timeout handler to check in with the VoIP service. Instead, when a calls arrives for the user, the VoIP service sends a VoIP remote notification to the user’s device. Upon receiving this notification, the device launches or wakes the app as needed so that it can handle the incoming call.

In der Vergangenheit verwendeter setKeepAliveTimeout Aufruf einem Handler zu ermöglichen, eine der Endzeit genannt zu werden und ein Maximum von 10 Sekunden haben würde zu verlassen oder seine Zum Beenden müssen auch Aufrufe an den Handler nicht innerhalb des Zeitlimitwerts liegen.

Die neue (registerForRemoteNotifications) wäre in Ordnung, da der Handler intern ist (zu IOS) und würde Ihre App rufen, wenn ein Remote-Ereignis auftritt (das würde sogar Ihre App wecken, wenn sie im Schlaf ist).

In beiden Fällen sollten beide dasselbe tun, die ältere Version würde mit dem Code umgehen, und die neue, Sie würden eine Benachrichtigung erhalten (auch mit ihr umgehen), aber Sie werden das Timeout nicht mehr kontrollieren.

von Apple docs:

Call this method to initiate the registration process with Apple Push Notification service. If registration succeeds, the app calls your app delegate object’s application:didRegisterForRemoteNotificationsWithDeviceToken: method and passes it a device token. You should pass this token along to the server you use to generate remote notifications for the device. If registration fails, the app calls its app delegate’s application:didFailToRegisterForRemoteNotificationsWithError: method instead.

Wenn Sie Ihre App Remote-Benachrichtigungen wollen Warnungen angezeigt werden, spielen Töne oder führen andere Benutzer gerichtete Aktionen, müssen Sie die registerUserNotificationSettings nennen: Verfahren die Arten von Benachrichtigungen zu beantragen Sie möchten verwenden. Wenn Sie diese Methode nicht aufrufen, übermittelt das System automatisch alle Remote-Benachrichtigungen an Ihre App. Da der Registrierungsprozess die bevorzugten Benachrichtigungseinstellungen des Benutzers berücksichtigt, garantiert die Anforderung des Zugriffs auf Benachrichtigungstypen für Benutzer auch nicht, dass diese gewährt werden. Verwenden Sie die currentUserNotificationSettings-Methode, um herauszufinden, welche Benachrichtigungseinstellungen verfügbar sind.

und schließlich (für Un-Registrierung):

You should call this method in rare circumstances only, such as when a new version of the app removes support for all types of remote notifications. Users can temporarily prevent apps from receiving remote notifications through the Notifications section of the Settings app. Apps unregistered through this method can always re-register.

nicht sicher, aber ich hoffe, das hilft.

Grüße,

Heider Sati

0

Wenn wir PUSHKIT integrieren, wird es sich um alles kümmern, die Anwendung in Bezug auf Wakeup. Wenn Sie die Push-Benachrichtigung senden, während Sie einen VoIP-Anruf mit Push-Benachrichtigung über PUSHKIT erhalten, wird es funktionieren, wenn es im Hintergrundzustand ist. Ich habe dasselbe gemacht.

Ich hoffe, das wird Ihnen helfen.