नहीं भेज रहा है मेरे ऐप को पृष्ठभूमि में उपयोगकर्ताओं के स्थान को ट्रैक करने की आवश्यकता है लेकिन यह 'get' अनुरोध भेजने में विफल रहा है। जब ऐप अग्रभूमि में आता है तो http अनुरोध तत्काल भेजा जाता है। मैं अपने सभी नेटवर्क अनुरोधों के लिए RestKit का उपयोग कर रहा हूं और मैंने अपनी पृष्ठभूमि स्थान सेवा सेट अप करने के लिए this tutorial का पालन किया। मेरी applicationDidEnterBackgroundआईओएस पृष्ठभूमि स्थान http अनुरोध
-(void)applicationDidEnterBackground:(UIApplication *)application
{
self.bgLocationManager = [[CLLocationManager alloc] init];
self.bgLocationManager.delegate = self;
[self.bgLocationManager startMonitoringSignificantLocationChanges];
NSLog(@"Entered Background");
}
में और मैं अपने applicationDidBecomeActive प्रतिनिधि में stopMonitoringSignificantLocationChange
यह मेरा locationManager प्रतिनिधि जहां मैं नए अपडेट किए गए स्थान को स्वीकार करने और
-(void) locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
NSLog(@"I am in the background");
bgTask = [[UIApplication sharedApplication]
beginBackgroundTaskWithExpirationHandler:
^{
[[UIApplication sharedApplication] endBackgroundTask:bgTask];
}];
// ANY CODE WE PUT HERE IS OUR BACKGROUND TASK
NSString *currentLatitude = [[NSString alloc]
initWithFormat:@"%g",
newLocation.coordinate.latitude];
NSString *currentLongitude = [[NSString alloc]
initWithFormat:@"%g",
newLocation.coordinate.longitude];
NSString *webToken = [[NSUserDefaults standardUserDefaults] stringForKey:@"userWebToken"];
NSLog(@"I am in the bgTask, my lat %@", currentLatitude);
NSDictionary *queryParams;
queryParams = [NSDictionary dictionaryWithObjectsAndKeys:webToken, @"auth_token", currentLongitude, @"lng", currentLatitude, @"lat", nil];
RKRequest* request = [[RKClient sharedClient] post:@"/api/locations/background_update" params:queryParams delegate:self];
//default is RKRequestBackgroundPolicyNone
request.backgroundPolicy = RKRequestBackgroundPolicyContinue;
// AFTER ALL THE UPDATES, close the task
if (bgTask != UIBackgroundTaskInvalid)
{
[[UIApplication sharedApplication] endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}
}
नेटवर्क काम करता है का अनुरोध करता है अपने सर्वर पर भेज है योजना के रूप में लेकिन यह पृष्ठभूमि में नहीं बुलाया जाएगा। क्या मुझे कोई अतिरिक्त कदम चाहिए? मेरी info.plist में मेरे पास आवश्यक पृष्ठभूमि मोड कुंजी और स्थान-सेवाएं मान के रूप में हैं।
संपादित
मैं भी this past SO answer करने के लिए भेजा। मैंने पूरे अपडेटेट टोलोकेशन कॉल में लॉग डालने के साथ कुछ परीक्षण चलाए और उन्हें सभी को बुलाया गया लेकिन 'प्राप्त' अनुरोध नहीं भेजा गया था। इसके बजाय जब मैंने अंततः अग्रभूमि में ऐप लॉन्च किया तो उसने सभी नेटवर्क अनुरोधों (10 से अधिक) भेजे।
EDIT (2) मैंने अपने अनुरोध के लिए आरकेआरक्वेटबैकग्राउंड पॉलिसीकंटिन को जोड़ा लेकिन यह मेरे नतीजे नहीं बदले। (जैसा कि आप रीस्टकिट के लिए पृष्ठभूमि अपलोड/डाउनलोड में here देख सकते हैं)। मुझे लगता है कि रेस्टकिट होस्ट को प्रारंभ करता है लेकिन ऐप सक्रिय होने तक अनुरोध भेजने में विफल रहता है।
उत्तर
RestKit कुछ है कि पृष्ठभूमि में निषिद्ध है कर रही होगी। NSURLRequest का उपयोग पूरी तरह से काम करता है।
NSMutableURLRequest * urlRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.example.com/api/locations/background_update"]];
[urlRequest setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[urlRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[urlRequest setHTTPMethod:@"POST"];
[urlRequest setHTTPBody:jsonData];
NSHTTPURLResponse *response = nil;
[NSURLConnection sendSynchronousRequest:urlRequest
returningResponse:&response
error:&error];
यह इससे पहले कि आप में प्रवेश के बाद से वहाँ पृष्ठभूमि कार्य के साथ बाधित करने के लिए कोई यूआई है एक तुल्यकालिक अनुरोध का उपयोग करने के
क्या आपके बाकी की जगहों को स्टॉक सिंक्रोनस NSURLConnection के साथ बदलने का प्रयास करें? – dklt
मैं डीकेएलटी के सवाल से सहमत हूं, क्योंकि ऐसा लगता है कि '[[आरके क्लाइंट साझा क्लाइंट] पोस्ट पर कॉल: पैराम्स: प्रतिनिधि:]' ऐसा कुछ होने का कारण बन रहा है जो दृश्यों के पीछे जीसीडी-कतार पर हो सकता है जो कवर नहीं है आपकी पृष्ठभूमि टास्क ब्रैकेटिंग ... और आपके डेटा को प्राप्त करने के लिए सिंक्रोनस कॉल पृष्ठभूमि कार्य में अनुरोध भेजे जाने पर अनुरोध कर सकते हैं। हां, RKRequestBackgroundPolicyContinue इसका ख्याल रखने के लिए हो सकता है, लेकिन आप पोस्ट करने के बाद कॉलिंग के बाद इसे वास्तव में सेट नहीं कर रहे हैं: पैराम्स: प्रतिनिधि:, और उस बिंदु तक, यह बहुत देर हो सकती है। –
@dklt मैं इसे NSRLConnection अनुरोध के साथ काम करने में सक्षम था, सुझाव के लिए धन्यवाद। यदि आप उत्तर देते हैं तो मैं इसे स्वीकार करूंगा। –