2012-08-08 18 views
10

ऐप पृष्ठभूमि में होने पर PHP सर्वर को HTTP async अनुरोध करना संभव है? ऐप एक स्थान आधारित है, और वर्तमान स्थान एकत्र करना चाहिए और प्रत्येक 5 (या अन्य मूल्य) मिनटों में सर्वर को निर्देशांक भेजना चाहिए। क्या मैं सर्वर पर http पोस्ट भी कर सकता हूं, ऐप पृष्ठभूमि में भी है? मैंने इसके बारे में बहुत सारे विचार पढ़े, लेकिन उनमें से कुछ ने कहा कि किया जा सकता है, दूसरों को नहीं किया जा सकता है।पृष्ठभूमि में रहते हुए आईओएस HTTP अनुरोध

धन्यवाद,

एलेक्स।

+0

पहले, कभी नहीं कोशिश करते हैं और एक निश्चित समय पर स्थान को इकट्ठा । यह बैटरी को हटा देगा। बस प्रमुख स्थान परिवर्तनों में लिस्टिंग शुरू करें और यदि ऐसा होता है तो सर्वर पर नया स्थान भेजें। यदि आपको अधिक सटीक स्थान की आवश्यकता है तो जीपीएस शुरू करें जब प्रमुख स्थान परिवर्तन होता है और जीपीएस को रोकता है जब आपके पास अपनी आवश्यकताओं के लिए पर्याप्त स्थान होता है। फिर सर्वर को डेटा भेजें। – rckoenes

+2

इस तरह मैंने इसे किया है, मैं अपडेट स्थान शुरू करता हूं, स्थान प्राप्त करता हूं, स्थान अपडेट रोकता हूं, सर्वर से अनुरोध भेजता हूं, 5 मिनट के बाद स्थान अपडेट फिर से शुरू करता हूं, स्थान प्राप्त करता हूं, रोकता हूं, आदि। सवाल यह है कि मैं सक्षम हूं यदि अनुरोध पृष्ठभूमि मोड में है तो अनुरोध भेजने के लिए? धन्यवाद। –

उत्तर

16

यह किया जा सकता है लेकिन यह अविश्वसनीय है क्योंकि आप कुछ समय भेजने के लिए ओएस से पूछते हैं और यह आपके अनुरोध को स्वीकार या अस्वीकार कर सकता है। यह वही है मैं (अतः पर कहीं से चोरी) है:

[...] //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

आपको बहुत धन्यवाद, मैं आपको वर्ष के डेवलपर घोषित करता हूं :)। तो, मूल रूप से, यह कुछ समय काम कर सकता है और अन्य नहीं करते हैं, ओएस द्वारा निर्भर करता है। –

+0

क्या मैं इसे सिम्युलेटर में परीक्षण कर सकता हूं। – Dilip

+3

कि 'isInBackground' पूरी तरह से अनावश्यक है। – 2rs2ts

3

ये लिंक तुम बाहर में मदद मिलेगी ...

iphone - Connecting to server in background

+0

धन्यवाद, क्या वाकिओ ने सुझाव दिया है, लेकिन कोड के बिना: डी। मुझे लगता है कि स्टार्टबैकग्राउंड टास्कविथ एक्सप्लोरेशन हैंडलर विधि मेरी समस्या का समाधान करेगी। –

संबंधित मुद्दे