Ho creato un'applicazione di chat usando SocketRocket, quando esco dall'app (entra in modalità background) Voglio ricevere il messaggio di chat! quindi potrei farlo chiamandolo app VoIP ma alcune persone dicono che Apple lo rifiuterà dall'App Store a meno che non lo faccia anche VoIP. Quindi, come posso farlo e se l'unico modo per farlo è chiamandolo un'applicazione VoIP come fa whatsapp gestisce questa situazione ??Come mantenere viva la connessione webs iphone iphone mentre è in background?
Ecco quello che ho fatto per mantenere viva l'applicazione in background:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
NSLog(@"Application entered background state.");
NSAssert(self.backgroundTask == UIBackgroundTaskInvalid, nil);
self.didShowDisconnectionWarning = NO;
self.backgroundTask = [application beginBackgroundTaskWithExpirationHandler: ^{
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"Background task expired");
if (self.backgroundTimer)
{
[self.backgroundTimer invalidate];
self.backgroundTimer = nil;
}
[application endBackgroundTask:self.backgroundTask];
self.backgroundTask = UIBackgroundTaskInvalid;
});
}];
dispatch_async(dispatch_get_main_queue(), ^{
self.backgroundTimer = [NSTimer scheduledTimerWithTimeInterval:10 target:self selector:@selector(timerUpdate:) userInfo:nil repeats:YES];
});
}
- (void) timerUpdate:(NSTimer*)timer {
UIApplication *application = [UIApplication sharedApplication];
NSLog(@"Timer update, background time left: %f", application.backgroundTimeRemaining);
if ([application backgroundTimeRemaining] < 60 && !self.didShowDisconnectionWarning)
{
UILocalNotification *localNotif = [[UILocalNotification alloc] init];
if (localNotif) {
localNotif.alertBody = @"Background session will expire in one minute.";
localNotif.alertAction = @"OK";
localNotif.soundName = UILocalNotificationDefaultSoundName;
[application presentLocalNotificationNow:localNotif];
}
self.didShowDisconnectionWarning = YES;
}
if ([application backgroundTimeRemaining] < 10)
{
// Clean up here
[self.backgroundTimer invalidate];
self.backgroundTimer = nil;
[application endBackgroundTask:self.backgroundTask];
self.backgroundTask = UIBackgroundTaskInvalid;
}
}
grazie, ma non credo che altre app utilizzino l'APNS per farlo, ho rintracciato molte applicazioni di chat e sembra che usi le notifiche remote quando l'app è in sottofondo !! – Atrash
@ MKAlatrash, stai dicendo che lo fanno o no? – jcaron
Un altro dice la stessa cosa: http://stackoverflow.com/a/11022682/3527940 – jcaron