मैंने देखा कि iOS 11 बीटा 2 पर, मौन सूचनाओं को application:didReceiveRemoteNotification:fetchCompletionHandler
ऐप की पृष्ठभूमि (पृष्ठभूमि / अग्रभूमि) की परवाह किए बिना वितरित नहीं किया जाता है ।
मैंने UIApplicationDelegete
विधि को लागू किया application:didReceiveRemoteNotification:fetchCompletionHandler
और मैं निम्नलिखित मौन धक्का भेजता हूं
{
"aps": {
"content-available": 1
},
"mydata": {
"foo": "bar"
}
}
लेकिन iOS 11 में प्रतिनिधि पद्धति को नहीं बुलाया गया है।
यह iOS के अन्य संस्करणों पर ठीक काम करता है और डॉक्यूमेंट सेक्शन को साइलेंट नोटिफिकेशन को कॉन्फ़िगर करने से यह उल्लेख नहीं होता है कि कुछ और किया जाना चाहिए।
क्या यह iOS 11 में बग है या IOS 11 में कुछ नया याद नहीं है?
कृपया ध्यान दें कि मैं उस UserNotification
रूपरेखा के बारे में बात नहीं कर रहा हूं या उसका उपयोग नहीं कर रहा हूं, जिसे मूक धक्का भेजने के लिए आवश्यक नहीं होना चाहिए।
यहाँ एक नमूना परियोजना है जो इस मुद्दे को दर्शाती है (आपको अपनी स्वयं की बंडल आईडी सेट करनी होगी)
जब आप सैंपल प्रोजेक्ट को लंच करते हैं और ऐप में उपरोक्त पेलोड भेजते हैं, तो आप मैकओएस कंसोल का उपयोग करके देख सकते हैं कि पुश डिवाइस पर सही तरीके से दिया गया है लेकिन ऐप पर नहीं।
अद्यतन 10.08
ऐसा प्रतीत होता है कि व्यवहार यादृच्छिक है। कभी-कभी डिवाइस को पुनरारंभ करने के बाद, पेलोड को सही तरीके से वितरित किया जाता है लेकिन यह थोड़ी देर बाद काम करना बंद कर देता है।
जैसा कि आप निम्न स्क्रीनशॉट पर देख सकते हैं, 1 के रूप में चिह्नित पुश केवल डिवाइस पर वितरित होता है और पुश 2 (डिवाइस पुनरारंभ होने के बाद) भी ऐप को दिया जाता है।
अद्यतन 14.08 - iOS 11 बीटा 6
अभी भी वही व्यवहार। एक और चीज़ जो काम करने वाली है लेकिन वह निम्नलिखित नहीं है। जब एप्लिकेशन की योजना "लॉन्च होने के लिए निष्पादन योग्य होने की प्रतीक्षा करें" पर सेट होती है, तो ऐप को जगाने और इसे पृष्ठभूमि में शुरू करने के लिए एक मूक धक्का माना जाता है।
अद्यतन 21.08 - iOS 11 बीटा 7
अभी भी वही व्यवहार और बग रिपोर्ट में Apple से अपडेट नहीं।
अद्यतन 29.08 - iOS 11 बीटा 8
अभी भी वही समस्या है। मेरे द्वारा अब उपयोग किए जाने वाले कदम निम्नलिखित हैं:
- Xcode प्रोजेक्ट स्कीम में, "लॉन्च होने के लिए निष्पादन योग्य प्रतीक्षा करें" चुनें
- में एक ब्रेकप्वाइंट जोड़ें
didReceiveRemoteNotification: fetchCompletionHandler
- डिवाइस पर एप्लिकेशन प्रारंभ करें
- उपरोक्त मौन धक्का भेजें
अपेक्षित : ऐप को निलंबित स्थिति से पृष्ठभूमि पर लाया didReceiveRemoteNotification: fetchCompletionHandler
जाता है और इसे कॉल किया जाता है
वास्तविक : कुछ नहीं होता है
अद्यतन 06.09 - iOS 11 बीटा 10
मैं अभी भी एक ही छोटी गाड़ी व्यवहार कर रहा हूँ। Apple के टिकट को निम्नलिखित उत्तर के साथ अपडेट किया गया था:
Apple डेवलपर संबंध 6 सितंबर 2017, 10:42 PM इंजीनियरिंग ने इस मुद्दे के बारे में निम्नलिखित प्रतिक्रिया प्रदान की है:
हम नमूना एप्लिकेशन को चलाने और व्यवहार का परीक्षण करने में सक्षम थे। जब हमने इसे वर्णित किया तो हमने कोई समस्या नहीं देखी।
जब यह बैकग्राउंड में चल रहा होता है, तो पुश को ऐप तक पहुंचने की गारंटी नहीं दी जाती है, और यहां लॉग्स हमें संकेत देते हैं कि हमें विश्वास नहीं है कि ऐप को लॉन्च करने के लिए पर्याप्त उपयोग किया जा रहा है।
हम देखते हैं कि जब स्थिति अच्छी होती है तो हम समय-समय पर धक्का देते हैं।
हमारा मानना है कि यह सही व्यवहार कर रहा है।
अपडेट 11.09
मेरी Apple बग रिपोर्ट को बंद कर दिया गया था और डुप्लिकेट के रूप में चिह्नित किया गया था, 33278611
जो खुला रहता है
अद्यतन 13.09 - आईओएस 11 जीएम
Kam800 की टिप्पणियों के लिए धन्यवाद (नीचे देखें) मैंने अधिक परीक्षण किया और उन टिप्पणियों के साथ आया:
IOS 11 में एक नया डेमॉन प्रतीत होता है dasd DuetActivitySchedulerDaemon
जो या तो डेटा पुश को पूरी तरह से बंद कर देता है या डेटा पुश डिलीवरी में देरी करता है:
डिलीवरी स्थगित
कंसोल लॉग्स
default 13:11:47.177547 +0200 dasd DuetActivitySchedulerDaemon CANCELED: com.apple.pushLaunch.net.tequilaapps.daylight:C03A65 <private>! lifecycle com.apple.duetactivityscheduler
default 13:11:47.178186 +0200 dasd DuetActivitySchedulerDaemon Removing a launch request for application <private> by activity <private> default com.apple.duetactivityscheduler
default 12:49:04.426256 +0200 dasd DuetActivitySchedulerDaemon Advancing start date for <private> by 6.5 minutes to Wed Sep 13 12:55:31 2017 default com.apple.duetactivityscheduler
default 13:21:40.593012 +0200 dasd DuetActivitySchedulerDaemon Activity <private>: Optimal Score 0.6144 at <private> (Valid Until: <private>) scoring com.apple.duetactivityscheduler
default 13:21:40.594528 +0200 dasd DuetActivitySchedulerDaemon Setting timer (isWaking=1, activityRequiresWaking=0) between <private> and <private> for <private> default com.apple.duetactivityscheduler
वितरण समस्याओं को स्थगित कर दिया
- जब डेटा पुश डिलीवरी को स्थगित कर दिया जाता है और ऐप लॉन्च किया जाता है, तो डेटा पुश तभी दिया जाता है जब डिलीवरी की तारीख पूरी हो जाती है , जो भविष्य में कई मिनट हो सकता है । यह नए ऐप की सामग्री को अगले लॉन्च के लिए तैयार रखने के लिए डेटा पुश का उपयोग करने के उद्देश्य को पूरी तरह से हरा देता है। मैं यहाँ एक बार फिर से Apple का प्रलेखन उद्धृत करता हूँ:
"साइलेंट सूचनाएं आपके ऐप को अप-टू-डेट रखने में मदद करके उपयोगकर्ता के अनुभव को बेहतर बनाती हैं, भले ही वह चालू न हो।"
- जब दो डेटा पुश एक निलंबित ऐप पर भेजे जाते हैं तो उन्हें सीधे ऐप को जागने के बजाय iOS 11 द्वारा स्थगित कर दिया जाता है। जब डिलीवरी का समय पूरा हो जाता है, तो केवल अंतिम डेटा पुश दिया जाता है! पिछले पुश खो जाते हैं और प्रतिनिधि विधि के माध्यम से वितरित नहीं किए जाते हैं जिसके परिणामस्वरूप डेटा हानि होती है।
डिलीवरी रद्द
कंसोल लॉग्स
default 13:35:05.347078 +0200 dasd DuetActivitySchedulerDaemon com.apple.pushLaunch.net.tequilaapps.daylight:C03A65:[
{name: ApplicationPolicy, policyWeight: 50.000, response: {Decision: Must Not Proceed, Score: 0.00}}
], FinalDecision: Must Not Proceed} scoring com.apple.duetactivityscheduler
वितरण समस्याओं को रद्द कर दिया
वैसे इस मामले में, डेटा पुश पूरी तरह से खो गया है और iOS 11 पर कभी डिलीवर नहीं हुआ जबकि iOS 10 पर इसे सही तरीके से डिलीवर किया गया।
अद्यतन 19.09 - आईओएस 11 जीएम
मैंने यह भी देखा कि जब एप्लिकेशन अग्रभूमि में है और अधिसूचना एप्लिकेशन को वितरित नहीं की जाती है, तो मैं कंसोल में निम्नलिखित लॉग देखता हूं:
default 08:28:49.354824 +0200 apsd apsd <private>: Received message for enabled topic '<private>' onInterface: NonCellular with payload '<private>' with priority 10 for device token: NO courier-oversized com.apple.apsd
fault 08:33:18.128209 +0200 dasd Foundation <NSXPCConnection: 0x151eee460> connection from pid 55: Exception caught during decoding of received message, dropping incoming message.
Exception: Exception while decoding argument 0 (#2 of invocation):
Exception: value for key 'NS.objects' was of unexpected class 'NSNull'. Allowed classes are '{(
NSArray,
NSData,
NSString,
NSNumber,
NSDictionary,
NSUUID,
_DASActivity,
NSSet,
_DASFileProtection,
NSDate,
NWParameters,
NWEndpoint
)}'. general com.apple.foundation.xpc
"content-available": 1
, और ऐप अग्रभूमि में है, तो कॉलबैक को निकाल नहीं दिया जाएगा।