29

मुझे पता है कि यह बहुत से स्थानों में शामिल है, लेकिन मैं इसे समझ नहीं सकता। मैं पुश अधिसूचनाओं के लिए शहरी एयरशिप का उपयोग करता हूं। सब कुछ ठीक लगता है सिवाय इसके कि जब मेरा ऐप पृष्ठभूमि में है - didReceiveRemoteNotification कॉल नहीं किया जा रहा है। यह अग्रभूमि में काम करता है - मैं संदेशों को सही तरीके से संसाधित करने में सक्षम हूं। और यदि संदेश अधिसूचना केंद्र से टैप किया गया है, तो मैं लॉन्च विकल्पों से संदेश प्राप्त करने में सक्षम हूं। लेकिन जब पृष्ठभूमि में, यह एक संदेश भेजता है - आईओएस अलर्ट प्रदर्शित करता है - didReceiveRemoteNotification नहीं कहा जाता है। जब मैं अपने एप्लिकेशन आइकन पर टैप करता हूं (अधिसूचना केंद्र से नहीं) ऐप अग्रभूमि में आता है और मुझे नहीं पता कि अधिसूचना मौजूद है। कोई विचार?पृष्ठभूमि में रहते हुए पुश अधिसूचनाएं प्राप्त करना

उत्तर

16

APNS प्रोग्रामिंग गाइड से अग्रभूमि पृष्ठभूमि से खरीदा गया है:

लेट्स संभावित परिदृश्यों की समीक्षा करें जब ऑपरेटिंग स्थानीय अधिसूचना या किसी एप्लिकेशन के लिए दूरस्थ अधिसूचना प्रदान करती है।

अधिसूचना तब वितरित की जाती है जब एप्लिकेशन अग्रभूमि में नहीं चल रहा है। इस मामले में, सिस्टम अधिसूचना प्रस्तुत करता है, एक चेतावनी प्रदर्शित करना, आइकन खराब करना, शायद ध्वनि बजाना।

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

आवेदन आइकन iOS चलाने वाले एक डिवाइस, आवेदन एक ही विधि कॉल, लेकिन अधिसूचना बारे में कोई जानकारी प्रस्तुत पर उपयोग किया जाता है।

मेरा मानना ​​है कि आखिरी वाक्य आपके मामले का वर्णन करती है, और बताती है कि आपके आवेदन को अधिसूचना के बारे में कोई जानकारी क्यों नहीं मिली है।

+2

हाँ - मुझे याद आया। खैर - यह निश्चित रूप से वास्तविक कमी की तरह लगता है। मुझे लगता है कि इसके आसपास के तरीके हैं - लेकिन आईओएस के लिए यह वास्तव में सीधे आगे बढ़ना होगा। अंतर्दृष्टि के लिए धन्यवाद। – Brandon

+1

क्या पुश अधिसूचना के लिए जानकारी लेने का कोई अन्य तरीका है, जब एप्लिकेशन आइकन पर क्लिक करें? मुझे एक मूल्य की आवश्यकता है, जो कि पेलोड में है। – Foriger

+0

@Eran, क्या आपका मतलब है कि ऐप पृष्ठभूमि चल रहा है, फिर अधिसूचना चेतावनी आइटम को टैप करता है, ऐप 'didReceiveRemoteNotification' को कॉल नहीं करेगा? – aircraft

6

didReceiveRemoteNotification बुला रहा है केवल अगर अग्रभूमि में ऐप या ऐप बस शुरू की है या

link in Apple और कुछ question

31

application:didReceiveRemoteNotification: पृष्ठभूमि में फोन करेगा केवल जब आप अधिसूचना पेलोड में मूल्य 1 साथ content-available कुंजी जोड़ लिया है। शहरी एयरशिप के मामले में, आप सेटिंग टैब के तहत टेस्ट पुश भेज सकते हैं। पुश नोटिफिकेशन के लिए नमूना पेलोड:

{ 
    "aps": { 
    "alert": "aaaa", 
    "badge": "+1", 
    "content-available": "1" 
    }, 
    "device_tokens": [ 
    "86BA71E361B849E8312A7B943BA6B26A74AB436381CF3FEE3CD9EB436A12A292" 
    ] 
} 

एप्पल स्पष्ट रूप से अपनी दस्तावेज में उल्लेख किया है ....

एक पुश सूचना के लिए एक डाउनलोड कार्रवाई को गति प्रदान करने, अधिसूचना के पेलोड सामग्री- शामिल करना चाहिए इसके मान के साथ उपलब्ध कुंजी 1 पर सेट है।जब वह कुंजी मौजूद होती है, तो सिस्टम पृष्ठभूमि में (या इसे पृष्ठभूमि में लॉन्च करता है) में ऐप को जगाता है और ऐप प्रतिनिधि का एप्लिकेशन कॉल करता है: didReceiveRemoteNotification: fetchCompletionHandler: विधि। उस विधि के आपके कार्यान्वयन को प्रासंगिक सामग्री डाउनलोड करनी चाहिए और इसे अपने ऐप में एकीकृत करना चाहिए। https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

+5

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

+0

hmhm मैं Google क्लाउड मैसेजिंग का उपयोग करता हूं, वे सामग्री-उपलब्ध भी लागू करते हैं, प्राप्त करने पर (अधिसूचना पर क्लिक करते समय) आउटपुट मुझे बताता है कि सामग्री-उपलब्ध 'aps' ऑब्जेक्ट के बाहर है। और यह मेरे लिए काम नहीं कर रहा है। :(ऐप्पल इतना मुश्किल क्यों है ... – CularBytes

+0

यह उत्तर वास्तव में सही उत्तर के रूप में चिह्नित किया जाना चाहिए। – samthui7

0

विधि didFinishLaunchingWithOptions: (NSDictionary *) launchOptions पैरामीटर launchOptions शब्दकोश कुंजियों में से एक UIApplicationLaunchOptionsRemoteNotificationKey जो दबाया पुश अधिसूचना की जानकारी रखती हैं।

टूर मुख्य रूट नियंत्रक प्रारंभ होने के बाद आप प्राप्त जानकारी को पुश कर सकते हैं। मैं इसे कुछ संपत्ति में सहेजता हूं और फिर इसे देखने के बाद इसे धक्का देता हूं।

if (launchOptions) { 
    if ([launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]) { 
     self.notificationToMakeAction = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; 
    } 
}