2012-08-08 24 views
10

Uygulama arka planda iken PHP sunucuya HTTP async istekleri yapmak mümkün mü? Uygulama, konuma dayalı bir konumdur ve geçerli konumu toplamalı ve koordinatları her 5 (veya başka bir değer) dakikada bir sunucuya göndermelidir. Uygulamanın arka planda olsa bile http yayınlarını sunucuya yapabilir miyim? Bu konuda birçok düşünce okudum, ancak bazılarının yapılabileceğini, yapamayacağını söyleyenleri söyledim.iOS HTTP isteği arka planda iken

Sağol,

Alex.

+0

Öncelikle, asla denemek ve sabit zamanlarda yerini toplamak . Bu bataryayı boşaltacaktır. Sadece ana konum değişikliklerine giriş yapmaya başlayın ve bunlar ortaya çıkarsa, yeni konumu sunucuya gönderin. Daha doğru bir konuma ihtiyacınız varsa, büyük yer değişikliği gerçekleştiğinde GPS'yi başlatın ve gereksinimleriniz için yeterince doğru konuma sahip olduğunuzda GPS'i durdurun. Ardından verileri sunucuya gönderin. – rckoenes

+2

Yaptığım yol budur, güncelleme konumlarını başlatırım, konum bul, konum güncellemeyi durdur, isteği sunucuya gönder, 5 dakika sonra konum güncellemesini yeniden başlat, konum al, dur, vb. Soru şu: Uygulama arka plan modunda ise isteği göndermek için? Teşekkür ederim. –

cevap

16

Bu yapılabilir, ancak güvenilir değildir çünkü işletim sisteminden bir şey göndermesini ister ve isteğinizi kabul veya reddedebilirsiniz. Bu benim (SO yere çalınan) ne olduğunu:

[...] //we get the new location from CLLocationManager somewhere here  
BOOL isInBackground = NO; 
if ([UIApplication sharedApplication].applicationState == UIApplicationStateBackground) 
{ 
    isInBackground = YES; 
} 
if (isInBackground) 
{ 
    [self sendBackgroundLocationToServer:newLocation]; 
} 


- (void) sendBackgroundLocationToServer: (CLLocation *) lc 
{ 
    UIBackgroundTaskIdentifier bgTask = UIBackgroundTaskInvalid; 
    bgTask = [[UIApplication sharedApplication] 
     beginBackgroundTaskWithExpirationHandler:^{ 
      [[UIApplication sharedApplication] endBackgroundTask:bgTask]; 
    }]; 

    NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithCapacity:2]; 
    [dictionary setObject:[NSNumber numberWithDouble:lc.coordinate.latitude] forKey:@"floLatitude"]; 
    [dictionary setObject:[NSNumber numberWithDouble:lc.coordinate.longitude] forKey:@"floLongitude"]; 
    // send to server with a synchronous request 


    // AFTER ALL THE UPDATES, close the task 
    if (bgTask != UIBackgroundTaskInvalid) 
    { 
     [[UIApplication sharedApplication] endBackgroundTask:bgTask]; 
    } 
} 
+0

Çok teşekkür ederim, size yılın geliştiricisini ilan ediyorum :). Yani, temel olarak, bazı zamanlarda işe yarayabilir ve diğerleri işletim sistemine bağlı değildir. –

+0

Simülatörde test edebilirim. – Dilip

+3

'InInBackground' tamamen gereksizdir. – 2rs2ts

3

Bu bağlantılar size yardımcı olacak ...

iphone - Connecting to server in background

+0

Teşekkürler, vakio önerdi, ancak kodsuz: d. StartBackgroundTaskWithExpirationHandler yönteminin sorunumu çözeceğini düşünüyorum. –

İlgili konular