Ich brauche meine VoIP App auf Autostart nach dem Gerät neu zu starten.
Apple-Dokumente erwähnen deutlich, dass: -
(========= EDIT:. Dies ist von den offiziellen Apple-Docs haben Sie einen Blick auf diese, bevor kommentieren oder zu beantworten, dass der App nicht ohne Zutun des Benutzers oder stille Push-Benachrichtigung gestartet wird auch haben Ein Blick auf Github-Projekt unten, Leute haben dieses Verhalten verifiziert)
Werte für das UIBackgroundModes-Array
Wert: voip Beschreibung: Die App bietet Voice-over-IP-Dienste. Apps mit diesem Schlüssel werden automatisch nach dem Systemstart gestartet dass die App VoIP-Dienste wiederherstellen kann. Apps mit diesem Schlüssel sind erlaubt auch Hintergrund-Audio zu spielen.
Ich habe sichergestellt, dass: -
plist
und Capabilities
vorhanden. main
und der application:didFinishLaunchingWithOptions:
-Methode Protokolle hinzufügen. Ich habe sogar versucht, diese GitHub-Beispiel-App mit 36 Sternen zu testen Bootstart. Ссылка
Aber selbst diese App startet beim Neustart nicht neu, wenn ich ein Gerät ausprobiert habe.
Das führt mich dazu zu denken, ob sich in iOS10 kürzlich etwas geändert hat oder fehlt mir hier noch etwas?
Okay, ich habe das ein bisschen weiter untersucht, aber zuerst sollte ich darauf hinweisen, dass ich dies nicht verifiziert habe, indem ich tatsächlich versucht habe, ein Projekt dafür zu bauen, da es für mich jetzt zu zeitaufwendig wäre.
Ich fand dies (bereits in den Kommentaren erwähnt), dies , und am wichtigsten diese Technologie Q & amp; A .
Was ich aus den verschiedenen Kommentaren der Apple-Techniker in diesen Threads zusammengestellt habe, scheint sich das Verhalten von iOS 10 tatsächlich geändert zu haben. Das bedeutet, dass der gleiche Code, der mit VoiP-Servern in früheren iOS-Versionen verbunden war, nicht mehr funktioniert, wenn Sie Ihren Build mit dem neuesten SDK, d. H. IOS 10-Bibliotheken, verknüpfen.
Nun, in Ihrem Fall brauchen Sie eigentlich keine echte VoiP-Verbindung, richtig? Sie sind nur an der Funktion "Start nach Neustart" interessiert, richtig? Zumindest das von Ihnen verlinkte Demo-Projekt macht keine VoiP-Verbindung, die setKeepAliveTimeout:handler:
-Methode zum Beispiel ist nicht einmal implementiert.
Ich bin mir bewusst, dass dieses spezielle Problem nicht in den verknüpften Threads behandelt wird oder in der Q & A behandelt wird, ABER:
Es macht Sinn, dass zusammen mit dem gesamten alten VoiP-Verhalten die Neustartfunktion ebenfalls verschwindet. Wenn Sie zu Push-Kit VoiP wechseln würden, müsste Ihre App nach einem Relaunch nicht gestartet werden. Sobald die nächste Remote-Benachrichtigung eintrifft (und VoiP-Benachrichtigungen haben hohe Priorität, so dass es keine Verzögerung gibt), wird sie neu gestartet.
Offensichtlich lese ich hier den Grundgedanken hinter dieser ganzen Sache ab und kann nicht garantieren, dass Apple wirklich in diese Richtung gedacht hat, aber es ergibt Sinn: Der ganze Grund für eine (alte) VoiP-App soll nach einer Neustart war, dass es benötigt, um eine Verbindung herzustellen , dh es musste etwas Code ausgeführt werden. Mit Push-Benachrichtigungen, die nicht mehr notwendig sind (das OS tut dies im Hintergrund für Sie, um diese Benachrichtigungen zu erhalten), ist es sinnvoll, dass diese Funktionalität zusammen mit dem gesamten VoiP-Ansatz entfernt wurde.
Sie können dies testen, indem Sie mit dem älteren SDK kompilieren (d. h. Xcode 7 als Q & amp; A vorschlagen) und sehen, ob es dann neu startet. Dieser eine Apple-Mitarbeiter hat tatsächlich erklärt, dass das Betriebssystem tatsächlich auf dem Build SDKs für Apps unterscheidet, was für mich völlig kontraintuitiv ist. Offensichtlich würde es in diesem Fall entscheiden "hey, das ist eine ältere App, also erwartet es einen Relaunch, weil sein SDK so dokumentiert ist" für Apps, die auf Xcode 7 aufbauen und "Oh, diese App ist eine neue, also ich nicht "Ich muss mich nicht an die alten Wege halten". Wowsies.
TL; DR : Für mich sieht das stark nach ja aus, das iOS SDK änderte dieses Verhalten und gab den gesamten alten, notizlosen VoiP-Ansatz auf. Das Kompilieren mit den neuen SDKs führt dazu, dass Apps nach dem Neustart nicht neu gestartet werden.
Für den Rekord : Ich kann die wütenden Menschen in diesen Threads verstehen. Obwohl es technische Gründe für die Änderung geben könnte, war diese spezifische Konsequenz alles andere als offensichtlich. Wenn eine Methode veraltet ist, aber das Projekt noch kompiliert und ausgeführt wird, würde ich nicht erwarten, dass ein solcher Prozess auf diese Weise fehlschlägt. Diese Apps stürzen nicht ab, sie werden nur "vom Betriebssystem anders behandelt", was nicht ganz dasselbe ist. Zumindest hätte ich erwartet, dass die Dokumentation im neuen SDK deutlicher wird.
App wird im Hintergrund aufgerufen, wenn es sich im beendeten Modus befindet, nur mit Push-Kit-Benachrichtigung und Zertifikate müssen für Push-Kit generiert werden, nicht mit normaler APNS-Benachrichtigung und normalen Push-Benachrichtigungszertifikaten.
Vom Backend muss Ihre Payload so sein.
%Vor%Sobald Sie die Pushkit-Payload erhalten und die lokale Benachrichtigung mit der Sounddatei planen, wird Ihre App im Hintergrund aufgerufen, bis Ihre Audiodatei abgespielt wird. (Max. 30 Sekunden) Bis müssen Sie Ihre Hintergrundaufgabe erledigen.
Bitte beziehen Sie sich auf einige wichtige Details zur Integration von Push-Kits Schritt für Schritt
Lebenszyklus der App - wenn die App beendet ist und Push-Kit-Nutzlast kommt
Vor allem
didFinishLaunchingWithOptions
// ruft
Dann
didReceiveIncomingPushWithPayload
// Nutzlastmethode ruft invoke
Wenn Sie eine lokale Benachrichtigung haben
didReceiveLocalNotification
// lokale Benachrichtigung erhalten
Dann
handleActionWithIdentifier
// Handler-Methode, wenn Sie über Aktionsschaltflächen (lokal) verfügen
Wenn Sie eine Remote-Benachrichtigung haben
didReceiveRemoteNotification
// Remote-Benachrichtigung erhalten
Dann
handleActionWithIdentifier
// Handler-Methode, wenn Sie über Aktionsschaltflächen (remote) verfügen
Hinweis - Wenn Sie nicht auf das App-Symbol tippen oder Push-Kit-Payload empfangen, wird Ihre App niemals automatisch gesperrt / geöffnet / repoziert. Wenn Sie möchten, dass Ihre App VOIP-basiert ist und die App nach dem Neustart des Geräts widerrufen wird. Nicht möglich.