2013-10-15 15 views
8

मैं अपने एपीएन प्रदाता के रूप में एक एपएन प्रदाता के रूप में उपयोग कर रहा हूं जो मैं बना रहा हूं। मैंने पुष्टि की है कि पुश अधिसूचनाएं काम कर रही हैं क्योंकि ऐप अग्रभूमि में होने पर मैं सफलतापूर्वक अलर्ट प्राप्त करने में सक्षम हूं। इसके अलावा, मेरे पास remote-notification मूल्य है जो मेरी plist में निर्दिष्ट UIBackgroundModes कुंजी के लिए है।पृष्ठभूमि समस्या में ऐप्पल पुश अधिसूचना

मेरे ऐप में, मैं पुश अधिसूचना प्राप्त होने पर उपयोगकर्ता के वर्तमान स्थान डेटा को अपने ऐप-विशिष्ट parse.com डेटाबेस पर वापस भेजना चाहता हूं। मुझे वास्तव में अधिसूचना पेलोड की परवाह नहीं है, क्योंकि अधिसूचना केवल जानकारी का एक छोटा टुकड़ा प्राप्त करने का साधन है। ऐप लगातार पृष्ठभूमि में डेटा एकत्रित कर रहा है और इसे लगातार NSDictionary में संग्रहीत कर रहा है।

मैंने स्थान application:didReceiveRemoteNotification: विधि में कोड भेज दिया है। यदि मुझे कोई सूचना प्राप्त होने पर मेरा ऐप अग्रभूमि में है, तो विधि को कॉल किया जाता है। अगर मेरा ऐप पृष्ठभूमि में है, तो विधि को नहीं कहा जाता है।

  • क्या मैं कुछ गलत कर रहा हूं?
  • तो यह और भी application:didReceiveRemoteNotification: में एक API अनुरोध को निष्पादित करने जब एप्लिकेशन को पृष्ठभूमि में है और उपयोगकर्ता अधिसूचना के साथ संवाद नहीं है संभव है **

संपादित करें: समस्या बनी रहती है, तब भी जब मैं application:didReceiveRemoteNotification:fetchCompletionHandler: का उपयोग करें।

नोट: स्थान डेटा से भरा मेरा NSDictionary खाली नहीं है। इसके अलावा, मैं पृष्ठभूमि में कोई यूआई मैनिपुलेशन करने का प्रयास नहीं कर रहा हूं - बस एक एपीआई अनुरोध करने की कोशिश कर रहा हूं।

उत्तर

15

चेक निम्नलिखित:

  • अधिसूचना पेलोड "सामग्री-उपलब्ध"
{"alert":"", 
"badge":"0", 
"content-available":"1", 
"sound":""} 
+0

यह काम किया! मेरे पास ऐपडिलेगेट में 'सामग्री-उपलब्ध' ध्वज चालू था, लेकिन मेरे JSON एपीएन में उस ध्वज को धक्का नहीं दे रहा था। धन्यवाद, एलेक्स! यह समस्या को हल करता है। – ArtSabintsev

+0

हां, विषम। यह केवल एक बार काम किया। इसमें देखेंगे और आपको वापस मिलेगा – ArtSabintsev

+0

कभी नहीं, इसे काम कर रहा है! पार्स से डेटा प्राप्त करने में बस देरी हुई थी। – ArtSabintsev

0

documentation for UIApplicationDelegate -application:didReceiveRemoteNotification इस पद्धति पर बहुत स्पष्ट है:

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

आपको अपने ऐप पृष्ठभूमि और अग्रभूमि में प्रतिक्रिया देने में सक्षम होने के लिए दोनों विधियों में अधिसूचनाओं को संभालने की आवश्यकता है।

+0

मुझे लगता है कि मैं समझ गया 'running' नहीं के रूप में पूरी तरह से बंद नहीं' inactive' या 'background' मोड। मैं इसे क्षणिक रूप से आज़माउंगा और अगर मैं इसे काम कर रहा हूं तो अपने उत्तर को सही तरीके से चिह्नित करें। – ArtSabintsev

+0

यह अभी भी काम नहीं कर रहा है। अब मैं दोनों आवेदनों से स्थान डेटा भेजने का प्रयास कर रहा हूं: didFinishLaunchingWithOptions: 'और' application: didReceiveRemoteNotification: '। यदि एप्लिकेशन पृष्ठभूमि में है (उदाहरण के लिए, मैंने होम बटन दबाया), कोई डेटा नहीं भेजा जाता है, जब तक मैं अधिसूचना के साथ बातचीत नहीं करता हूं। अगर मैं उस पर क्लिक करके अधिसूचना के साथ बातचीत करता हूं, तो 'आवेदन: didReceiveRemoteNotification:' विधि दर्ज की गई है। मैं क्या गलत कर रहा हूं? क्या मैं मूल रूप से गलत समझता हूं कि पृष्ठभूमि अधिसूचनाओं को कैसे काम करना चाहिए? – ArtSabintsev

+0

मुझे लगता है कि मेरा ऐप वास्तव में 'निलंबित' राज्य में है, न कि 'पृष्ठभूमि' स्थिति। मुझे लगता है कि इस मुद्दे के कारण क्या हो सकता है। – ArtSabintsev

0

आप के बजाय इस का उपयोग करने की कोशिश कर सकते हैं शामिल हैं

application:didReceiveRemoteNotification 

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

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler 
{ 

    NSLog(@"Remote Notification Received: %@", userInfo); 

    UILocalNotification *notification = [[UILocalNotification alloc] init]; 
    notification.alertBody = @"message to be displayed"; 
    notification.applicationIconBadgeNumber = 1; 


    [[UIApplication sharedApplication] presentLocalNotificationNow:notification]; 
    completionHandler(UIBackgroundFetchResultNewData); 

} 
0

एलेक्स एल के जवाब लगभग मेरे लिए काम किया।

बस सुनिश्चित करें कि मूल्य बनाने की content-available 1 (संख्या) है, न कोई स्ट्रिंग "1":

{ 
    "alert":"", 
    "content-available":1, 
    "sound":"" 
} 

badge पैरामीटर वैकल्पिक है।

(APN के लिए पार्स सर्वर का उपयोग)

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