In unserer App möchten wir eine kleine Datenmenge als Antwort auf eine Push-Benachrichtigung herunterladen. Bis jetzt funktionieren Push-Benachrichtigungen reibungslos. Sie starten die App im Hintergrund und rufen didReceiveRemoteNotification auf.Asynchroner Code wird erst ausgeführt, wenn die App in der Anwendung aktiviert ist: didReceiveRemoteNotification: fetchCompletionHandler:
Das Problem ist, dass die App nach der Rückkehr dieser Methode keine CPU-Zeit mehr erhält, bis sie wieder im Vordergrund steht, so dass es keine Möglichkeit gibt, diese Daten asynchron im Hintergrund abzurufen.
Wenn ich dies auf den einfachsten Fall reduziere, kann ich immer noch keinen asynchronen Code ausführen.
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
[application setApplicationIconBadgeNumber:1];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[application setApplicationIconBadgeNumber:9];
completionHandler(UIBackgroundFetchResultNewData);
});
}
Als Reaktion auf einen Stoß, startet die App im Hintergrund und das Abzeichen Zahl auf 1 gesetzt, aber die Ausweisnummer ist nicht auf 9 bis die App aus dem Home-Bildschirm gestartet wird.
Sollte iOS nicht weiterhin die App ausführen, bis der Beendigungshandler aufgerufen wird, bis zu 30 Sekunden?
In der Info.plist ist der Remote-Benachrichtigungs-Hintergrundmodus angegeben, die Push-Nutzlast enthält "content-available": "1", und ich beende die App nicht, indem ich im App-Switcher nach oben wische.
hinzuzufügen, wir Parsen mit dieser Push-Benachrichtigung senden folgenden Javascript verwenden:
Parse.Push.send({
where: installationQuery,
data: {
"content-available": 1,
}
}, { success: function() {},
error: function(error) {}
});
Haben Sie das versucht: http://stackoverflow.com/questions/16295953/dispatch-after-is-limited-to-10-seconds? – anhtu