2012-05-10 11 views
7
को अस्वीकार कर दिया गया

मेरा ऐप ही अस्वीकृति पत्र है, जो है के साथ तीन बार, सभी एप्पल द्वारा अस्वीकार कर दिया गया:कैसे ठीक से पृष्ठभूमि में स्थान का उपयोग करने के लिए - एप्लिकेशन 3 बार

हमने पाया अपने अनुप्रयोग एक पृष्ठभूमि मोड का उपयोग करता है लेकिन इसमें कार्यक्षमता शामिल नहीं है जिसके लिए उस मोड को लगातार चलने की आवश्यकता होती है। यह व्यवहार ऐप स्टोर समीक्षा दिशानिर्देशों के अनुपालन में नहीं है।

हमने देखा है कि आपका ऐप UIBackgroundModes कुंजी में आपके Info.plist में स्थान के लिए समर्थन घोषित करता है लेकिन इसमें सुविधाएं शामिल नहीं हैं जिन्हें लगातार स्थान की आवश्यकता होती है।

ऐप पृष्ठभूमि में की आवश्यकता वाले सुविधाओं को जोड़ने के लिए उपयुक्त होगा, जबकि ऐप पृष्ठभूमि में है या UIBackgroundModes कुंजी से "स्थान" सेटिंग को हटा दें।

"जीपीएस के निरंतर उपयोग पृष्ठभूमि में चल सकते हैं नाटकीय रूप से कमी बैटरी जीवन:

आप सुविधाओं है कि स्थान पृष्ठभूमि मोड का उपयोग जोड़ने के लिए चुनते हैं, तो में अपने आवेदन विवरण निम्न बैटरी उपयोग अस्वीकरण शामिल करें । "

पृष्ठभूमि मोड के बारे में जानकारी के लिए, कृपया आईओएस संदर्भ पुस्तकालय में "पृष्ठभूमि में निष्पादन कोड" अनुभाग देखें ।

अब, जहाँ तक मैं जानता हूँ कि मैं पृष्ठभूमि पर चल रहा हूँ और "कुछ कर रही" ... मेरे AppDelegate में मैं didFinishLaunchingWithOptions में निम्नलिखित कोड है:

if ([[launchOptions allKeys] containsObject:UIApplicationLaunchOptionsLocationKey] && 
    ([launchOptions objectForKey:UIApplicationLaunchOptionsLocationKey])) 
{ 
    id locationInBackground = [launchOptions objectForKey:UIApplicationLaunchOptionsLocationKey]; 
    if ([locationInBackground isKindOfClass:[CLLocation class]]) 
    { 
     [self updateMyLocationToServer:locationInBackground]; 
    } 
    else 
    { 
     //Keep updating location if significant changes 
     CLLocationManager *locationManager = [[CLLocationManager alloc] init]; 
     self.bgLocationManager = locationManager; 
     self.bgLocationManager.delegate = self; 
     self.bgLocationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; 
     [bgLocationManager startMonitoringSignificantLocationChanges]; 
    } 
} 

AppDelegate भी शुरू होता है एक स्थान प्रबंधक और खुद को प्रतिनिधि बनाता है।

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 
{ 
    [self updateMyLocationToServer:newLocation]; 
} 


-(void)updateMyLocationToServer:(CLLocation*)myNewLocation 
{ 
    // NSLog(@"Updating Location from the background"); 

    NSString *fbID = [NSString stringWithString:[facebookDetails objectForKey:@"fbID"]]; 
    NSString *firstName = [NSString stringWithString:[facebookDetails objectForKey:@"firstName"]]; 
    NSString *lastName = [NSString stringWithString:[facebookDetails objectForKey:@"lastName"]]; 

    NSString *urlString = [NSString stringWithFormat:@"MY_SERVER_API", fbID, myNewLocation.coordinate.latitude, myNewLocation.coordinate.longitude, firstName, lastName]; 


    NSURL *url = [NSURL URLWithString:urlString]; 

    __block ASIHTTPRequest *newRequest = [ASIHTTPRequest requestWithURL:url]; 

    [newRequest setCompletionBlock:^{ 


    }]; 

    [newRequest setFailedBlock:^{ 

    }]; 

    // [newRequest setDelegate:self]; 
    [newRequest startAsynchronous]; 
} 

मैं अपने एप्लिकेशन वर्णन पृष्ठ में एक अस्वीकरण डाल: फिर, मैं पृष्ठभूमि पर स्थान अद्यतन से निपटने के लिए निम्नलिखित कोड है

जीपीएस की गहन उपयोग पृष्ठभूमि में चल सकते हैं बैटरी जीवन नाटकीय रूप से कम करें। इस कारण से, MY_APP_NAME पृष्ठभूमि में केवल महत्वपूर्ण स्थान परिवर्तनों को सुनकर चलता है।

क्या मैं यहाँ याद कर रहा हूँ है?

+0

एक 'पृष्ठभूमि मोड' कुछ के बाद उपयोगकर्ता ऐप्लिकेशन से बाहर निकल गया है कि अभी भी चल रहा है इसका मतलब यह नहीं है? – cgull

+0

@thephpdeveloper मुझे बताने के लिए धन्यवाद। StackOverflow के लिए बिल्कुल नया होने के नाते, मुझे इस प्रणाली से अवगत नहीं था। – Giovanni

+0

@cgull मुझे यकीन नहीं है। मेरा मतलब है, स्थान अपडेट के लिए पर्याप्त पंजीकरण नहीं कर रहा है? फिर जब कोई नया स्थान होता है, तो मेरा ऐप पृष्ठभूमि सक्रिय स्थिति में जागृत हो जाता है, और उसके बाद मुझे कुछ करने का मौका मिलता है, जैसे कि मेरे सर्वर पर मेरा नया स्थान लॉग इन करें। यही कारण है कि मैं क्या सोचा है ... – Giovanni

उत्तर

4

locationManager में: didUpdateToLocation: fromLocation: या updateMyLocationToServer में: यदि ऐप्लिकेशन जैसे द्वारा पृष्ठभूमि स्थिति में है आप जाँच करनी चाहिए।

[UIApplication sharedApplication].applicationState == UIApplicationStateBackground 

और फिर यदि आपका ऐप पृष्ठभूमि मोड में है तो आपको उदाहरण का उपयोग करना चाहिए।

backgroundTask = [[UIApplication sharedApplication] 
        beginBackgroundTaskWithExpirationHandler: 
        ^{ 
         [[UIApplication sharedApplication] endBackgroundTask:backgroundTask]; 
        }]; 

/*Write Your internet request code here*/ 

if (bgTask != UIBackgroundTaskInvalid) 
{ 
    [[UIApplication sharedApplication] endBackgroundTask:backgroundTask]; 
    bgTask = UIBackgroundTaskInvalid; 
} 

इस तरह आवेदन इस कार्य को पूरी तरह से करना चाहिए।

+6

क्या आपका ऐप इस कोड को जोड़कर स्वीकार कर लिया गया? – theDuncs

+1

समाप्ति हैंडलर के अंदर बैकग्राउंड टास्क को समाप्त करने की कोशिश करने में कोई बात नहीं है, यह पहले से ही समाप्ति के माध्यम से समाप्त हो गया था। – malhal

+1

सुनें @ माधल की टिप्पणी अपने जोखिम पर! ऐप्पल दस्तावेज़ों से: * आपको पृष्ठभूमि कार्य के अंत को साफ करने और चिह्नित करने के लिए इस हैंडलर का उपयोग करना चाहिए। ** कार्य को समाप्त करने में विफलता के परिणामस्वरूप ऐप को समाप्त कर दिया जाएगा। *** https://developer.apple.com/reference/uikit/uiapplication/1623031-beginbackgroundtask – mxcl

7

यह सवाल पुराने और पहले से ही उत्तर है, लेकिन आप UIBackgroundModes कुंजी की आवश्यकता नहीं है अगर आप startMonitoringSignificantLocationChanges एपीआई

+0

मैं के रूप में ऊपर कहा गया है एक ही अस्वीकृति मिल गया लेकिन जब मैं बाहर ले मेरी UIBackground मोड, मेरी startMonitoringSignificantLocationChanges कहा जाता हो जाता है कभी नहीं और मैं देख रहा हूँ प्रणाली बार में नेविगेशन तीर गायब हो जाते हैं। कोई विचार? –

+0

मैं तुम्हें तुम क्या कर रहे के सभी विवरण और कुछ कोड नमूने के साथ एक नया सवाल कर सुझाव देते हैं। 500 वर्ण टिप्पणी के लिए दायरा बहुत व्यापक है। यदि आप यहां एक प्रश्न के रूप में अपना प्रश्न लिंक पोस्ट करते हैं तो मैं इसे देख लूंगा। यह आपके लिए काम करना चाहिए। इससे मेरा काम बनता है। – jackslash

1

startMonitoringSignificantLocationChanges एक पृष्ठभूमि मोड पंजीकरण की आवश्यकता नहीं है का उपयोग करके स्थान एकत्रित करते हैं। केवल निरंतर स्थान परिवर्तन करते हैं।

+0

आपने फिर से वही उत्तर क्यों दिया है (http://stackoverflow.com/questions/12690459/apple-rejection-because-uibackgroundmode-location), कृपया अपने उत्तर का संदर्भ लें न केवल एक प्रतिलिपि करें। और टिप्पणियां दूसरे उत्तर से बनी हुई हैं। यह वास्तव में एक उत्तर का अधिक नहीं है और यह मामला प्रश्न -1 का जवाब भी नहीं देता है – Popeye

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