2015-09-16 4 views
9

Ich kann keine voip-Pushkit-Benachrichtigungen erhalten, um die App neu zu starten, wenn der Benutzer die App zwangsweise beendet hat (durch Streichen) die Multitasking-Schnittstelle) UND wenn das Gerät neu gestartet wurde.Die Voip Pushkit-Benachrichtigung startet die App nicht neu, wenn sie zwangsweise beendet wurde und das Gerät neu gestartet wurde.

Allerdings kann ich die voip pushkit Meldungen in den folgenden Szenarien an der Arbeit:

  • Die App wurde zwang verliess dann die pushkit Meldung eintrifft. Die App wird sofort neu gestartet. Standard-Push-Benachrichtigungen können die App in einem solchen Szenario nicht aufwecken.

  • Die App war im Hintergrund/ausgesetzt und das Gerät wird neu gestartet. Dank dem Voip-Modus wird die App beim Neustart des Geräts neu gestartet (ich kann den Vorgang im Xcode Activity Monitor sehen). Es gibt einen Trick hier notwendig, um die pushkit Benachrichtigung zu erhalten, richtig verarbeitet werden, die in http://blog.biokoda.com/post/114315188985/ios-and-pushkit in diesen Begriffen beschrieben wird „vor der Initialisierung PushKit eine Hintergrundaufgabe starten. Um diese Aufgabe zu beenden, wenn PushKit Token empfangen wird“

Irgendwie, wenn Kombinieren diese beiden (Gerät Neustart und App Force-Quit) dann Pushkit-Benachrichtigungen scheint die App nicht neu zu starten. Auch wenn ich das Gerät in Xcode anmelde, bekomme ich keine Protokolle von apsd, die sagen, dass die Benachrichtigung vom System verarbeitet wurde.

Hier ist mein Code:

@implementation AppDelegate 
{ 
    UIBackgroundTaskIdentifier bgTask; 
} 
- (BOOL)application:(UIApplication *)application 
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    UIApplication* app = [UIApplication sharedApplication]; 
    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ 
     [app endBackgroundTask:bgTask]; 
     bgTask = UIBackgroundTaskInvalid; 
    }]; 
    dispatch_async(dispatch_get_global_queue(
    DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
     while (true) { 
      ; 
     } 
    }); 
    // Initialize pushkit 
    PKPushRegistry *pushRegistry = 
     [[PKPushRegistry alloc] initWithQueue:dispatch_get_main_queue()]; 
    pushRegistry.delegate = self; 
    pushRegistry.desiredPushTypes = [NSSet setWithObject:PKPushTypeVoIP];  
    return YES; 
} 

- (void)pushRegistry:(PKPushRegistry *)registry 
    didUpdatePushCredentials:(PKPushCredentials *)credentials 
    forType:(NSString *)type{ 
    UIApplication* app = [UIApplication sharedApplication]; 
    [app endBackgroundTask:bgTask]; 
    // ... more code to read the token ... 
} 

- (void)pushRegistry:(PKPushRegistry *)registry 
    didReceiveIncomingPushWithPayload:(PKPushPayload *)payload 
    forType:(NSString *)type { 
    // ... logging to check if notification is received ... 
} 

Auch ich "Voice over IP" und "Remote-Benachrichtigungen" aktiviert in Hintergrund-Modi haben.

Ich weiß, dass andere Anwendungen wie WhatsApp in diesem Szenario neu gestartet werden können, also verstehe ich nicht, was ich falsch mache.

Auf eine verwandte Anmerkung, hilft es nicht, das folgende zu tun 1) Erzwinge das Beenden 2) Schicke eine Pushkit-Benachrichtigung - die empfangen wird 3) Neustart. Die App wird nicht neu gestartet und eine neue Push-Benachrichtigung wird sie immer noch nicht neu starten.

+0

@ Sahara108 und ich haben auch dieses Problem. Ich habe Apple direkt gefragt. Wenn sie antworten, bevor jemand anderes es herausgefunden hat, werde ich die Antwort hier posten. Auch Sie erwähnen, dass Sie WhatsApp et al können neu gestartet werden, aber starten sie vollständig neu? Bei unseren Untersuchungen starten die Apps neu, starten aber nicht vollständig.Ihre Protokollierung wird vorzeitig abgeschnitten (sieht aus wie ein OS-Kill). – Pandalover

+0

Ich habe festgestellt, dass die App neu gestartet wurde, indem ich den Prozess im Aktivitätsmonitor betrachtet habe. – mcaoun

Antwort

3

Nachdem ich die App mit einem AdHoc-Provisioning-Profil getestet und von iTunes installiert habe, sind die Voip-Push-Benachrichtigungen, die über prod gateway.push.apple.com anstelle von gateway.sandbox.push.apple.com bereitgestellt wurden, gestartet die erzwungene App nach dem Neustart.

Das OS kümmert sich offenbar auf eine andere Art und Weise um Entwicklung und Produktion.

sucht weiter in die APSD logs, fand ich, dass, wenn eine Entwicklung unter Verwendung des folgenden Bereitstellungsprofil ausgedruckt:

: XXXX-XXXX XX: XX: XX 0300 APSD [97]:
Diese aktivierten Themen entfernt wurden {( „YOUR_BUNLE_IDENTIFIER“ )}

Dies geschieht nicht, wenn eine Ad-hoc-Profil Bereitstellung verwenden.

+0

Meinten Sie Appstore Provisioning? In meinem Test kann die App neu gestartet werden, wenn das Telefon neu gestartet wird, aber unvollständig ist. Es klemmt beim Versuch, eine xmpp-Socket-Verbindung zu öffnen. Es scheint, dass das Netzwerk zu diesem Zeitpunkt nicht verfügbar ist. Kann Ihre App erfolgreich neu gestartet werden? – sahara108

Verwandte Themen