IOS 11 पर साइलेंट पुश ऐप को डिलीवर नहीं किया गया


168

मैंने देखा कि 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

1
अभी भी बीटा 8 में तय नहीं है, जब मैं कंसोल में देखता हूं तो मुझे निम्न त्रुटि दिखाई देती है: <NSXPCConnection: 0x123f43620> pid 58 से कनेक्शन: प्राप्त संदेश के डिकोडिंग के दौरान पकड़ा गया अपवाद, आने वाले संदेश को छोड़ देता है। अपवाद: तर्क को डिकोड करते समय अपवाद 0 (मंगलाचरण का # 2): अपवाद: कुंजी 'NS.objects' का मान अप्रत्याशित वर्ग 'NSNull' का था। अनुमत कक्षाएं '{(NWParameters, NWEndpoint, NSArray, NSData, NSString, NSNumber, NSDictionary, NSUUID, _DASActivity, NSSet, _SASFileProtection, NSDate)}' 'हैं।
थॉमस आइंवलर

2
मुझे आईओएस 11 के साथ एक ही परिणाम मिल रहा है (पहले नहीं), अगर मैं पुश के साथ भेजता हूं "content-available": 1, और ऐप अग्रभूमि में है, तो कॉलबैक को निकाल नहीं दिया जाएगा।
GoRoS

4
नए iOS11.1 बीटा 1 के साथ परीक्षण करने के बाद ऐसा प्रतीत होता है कि यह अब ठीक कर लिया गया है और जैसा कि iOS 10 पर पहले हुआ था
ली

3
व्हाट्सएप लगता है कि एक समान मुद्दा whatsappen.com/news/5465/… उपयोगकर्ताओं के बारे में कुछ ऐसा है जो "आदतन अपने ऐप को बंद कर देते हैं" जो कि अधिकांश डेवलपर्स हैं ...
टोक्सैक

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

जवाबों:


31

तो iOS 11.1 बीटा 1 के रिलीज नोट्स कहते हैं

iOS 11.1 बीटा 1 को अभी जारी किया गया था और वे उल्लेख करते हैं: "अधिसूचनाएँ हल की गई समस्याएं • मूक धक्का सूचनाएं अधिक बार संसाधित होती हैं। (33278611)

मैंने कुछ परीक्षण किए और यह वास्तव में तय हो गया है:

निलंबित राज्य

जब मैं एप्लिकेशन को एक निलंबित मोड में लॉन्च करता हूं और एक मूक धक्का भेजता हूं, तो ऐप को पृष्ठभूमि में लाया जाता है और didReceiveRemoteNotification:fetchCompletionHandlerप्रतिनिधि को बुलाया जाता है।

अग्रभूमि राज्य

उसी तरह, जब एप्लिकेशन अग्रभूमि में होता है और एक मूक धक्का भेजा जाता है, तो प्रतिनिधि को अपेक्षित रूप से बुलाया जाता है। यह बेतरतीब ढंग से पिछले iOS 11 संस्करणों में काम नहीं कर रहा था इसलिए मैं अधिक परीक्षण के बाद इसकी पुष्टि करूंगा।


3
मेरे प्रारंभिक परीक्षण पर मुझे लगा कि यह तय हो गया है। इसने कुछ समय तक काम किया। लेकिन कुछ भारी परीक्षण के बाद, चीजें एक हिस्सा गिरने लगीं। अचानक यह हर मूक पुश के लिए प्रतिनिधि को फोन करना बंद कर देता है, यहां तक ​​कि अग्रभूमि में ऐप के साथ भी। जाहिर है, यह नया "युगल" सिस्टम "एनर्जीबुड" की कमी के कारण बुलाया जाने के लिए मेरे ऐप के प्रतिनिधि को अवरुद्ध कर रहा है। इसलिए, दुर्भाग्य से, अभी भी तय नहीं है।
अब्रास

अविश्वसनीय :(
थॉमस आइंवलर

मेरा अनुभव ऊपर के अब्रास जैसा ही है। थोड़ी देर के लिए काम किया और अलग हो गया और हैंडलर को अब नहीं बुलाया गया - यह बेकार है,
ली

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

मेरे लिए यह सब तब भी अच्छी तरह से काम कर रहा है जब एक बिजली से जुड़े बिना सेलुलर कनेक्शन पर। केवल जब मैं डिवाइस को पावर सेविंग मोड में सेट करता हूं तो मुझे अग्रभूमि में होने पर भी पुश नहीं मिलता है। लेकिन मुझे कुछ समझ में आता है
Jan

18

मैं यहाँ अपने 2 सेंट जोड़ना चाहता था क्योंकि मैं इस मुद्दे से भी टकरा गया हूँ और मैंने देखा है कि Apple ने इस मुद्दे पर कई रडार बंद कर दिए हैं और कहा है कि वे पुन: पेश नहीं कर सकते। एक दिलचस्प बात यह है कि अगर यह डिबगर से जुड़ा हुआ है तो ऐप को बैकग्राउंड करने पर पुश मिलेगा।

अगर मैं डिबगर को मारता हूं, तो अपना फोन अनप्लग करें, ऐप लॉन्च करें, और साइलेंट पुश पेलोड भेजें। मुझे लगता है कि ऐप को रोका नहीं जा रहा है। मैं कंसोल लॉग में देखता हूं कि सिस्टम मेरे ऐप पर पेलोड की डिलीवरी रद्द करता है।

मैंने एक छोटा सा नमूना एप्लिकेशन के साथ एक रडार प्रस्तुत किया है जो समस्या को पुन: पेश करता है। मैंने राडार में भी स्पष्ट रूप से उल्लेख किया है कि मेरे टिकट पर काम करने वाले व्यक्ति को समस्या को पुन: उत्पन्न करने के लिए डिबगर से जुड़े ऐप को नहीं चलाना चाहिए। यहाँ लिंक है: https://bugreport.apple.com/web/?problemID=34461063

उम्मीद है कि इससे इस मुद्दे पर कुछ प्रगति होगी।


2
रिपोर्ट के लिए धन्यवाद। Btw, Apple बग को जोड़ने से यहाँ मदद नहीं मिलेगी क्योंकि वे निजी हैं और केवल रिपोर्टर और Apple उन्हें देख सकते हैं
Jan

मैं अधिक लोगों को Openradar.appspot.com का उपयोग करते हुए देखना चाहूंगा ताकि हम अन्य लोगों के राडार पर नज़र रख सकें
थॉमस एनीवॉल्वर

क्या आपके बग रिपोर्ट में कोई अद्यतन नहीं है Apple @bill
MagicFlow

मैंने Apple से अपने रडार पर कोई अपडेट नहीं लिया है, लेकिन हमने iOS 11.1 का बीटा इंस्टॉल कर दिया है और ऐसा प्रतीत होता है कि यह समस्या ठीक हो गई है।
बिल ड्यूने

हां, हम iOS 11.2.6 में भी इसी मुद्दे का सामना कर रहे हैं, कोई समाधान या अपडेट?
गोपीक

14

IOS 11 के नए व्यवहार की तरह दिखता है iOS 11 बीटा 10 इस मुद्दे के बारे में कुछ वर्णनात्मक लॉग प्रदान करता है:

default 23:18:51.806011 +0200   dasd    com.apple.pushLaunch.com.acme.Acme:F7E7D0:[
    {name: ApplicationPolicy, policyWeight: 50.000, response: {Decision: Can Proceed, Score: 0.50}}
    {name: BatteryLevelPolicy, policyWeight: 1.000, response: {Decision: Can Proceed, Score: 0.87, Rationale: [{batteryLevel == 62}]}}
    {name: DeviceActivityPolicy, policyWeight: 5.000, response: {Decision: Can Proceed, Score: 0.20}}
 ] sumScores:52.279483, denominator:81.410000, FinalDecision: Can Proceed FinalScore: 0.642175}
default 23:18:51.806386 +0200   dasd    'com.apple.pushLaunch.com.acme.Acme:F7E7D0' has compatibility score of 1.000000 with 'com.apple.CFNetwork-cc-111-79:E7272D'. Relaxing scores.
default 23:18:51.806855 +0200   dasd    'com.apple.pushLaunch.com.acme.Acme:F7E7D0' CurrentScore: 0.642175, ThresholdScore: 0.738454 DecisionToRun:0

ऐसा लगता है कि हर साइलेंट पुश को iOS पर डिलीवर किया जाता है, लेकिन ddd डेमॉन कुछ नीतियों का उपयोग करके यह तय करता है कि क्या साइलेंट पुश ऐप (जैसे बैटरी स्तर) पर दिया जाना चाहिए। मैं कल रात एक मूक धक्का प्राप्त करने में कामयाब रहा, लेकिन मेरा iPhone उस समय चार्जर से जुड़ा था - शायद BatteryLevelPolicy स्कोर उस मूक धक्का को प्राप्त करने के लिए पर्याप्त था।

Apple इस iOS-साइड व्यवहार के बारे में कोई आधिकारिक जानकारी नहीं देता है, केवल सर्वर-साइड थ्रॉटलिंग के बारे में जानकारी है:

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

मैं अपनी उँगलियों को पार करता हूँ, उन्होंने उस व्यवहार को बदल दिया है, क्योंकि यह मेरे ऐप को ठीक कर देगा :) दूसरी ओर, यह परिवर्तन अच्छा है - एक तो iPhone बैटरी बनाने वाली कई चीजों में से एक है जो एंड्रॉइड फोन को लंबे समय तक चलाती है।


1
हां पुश डिवाइस को दिए जाते हैं लेकिन ऐप को नहीं। यही मैंने अपने मूल पोस्ट में लिखा है। "मौन सूचनाओं को पृष्ठभूमि में अपने ऐप को जागृत रखने के तरीके के रूप में नहीं है" यह ठीक है जब तक वे "कभी-कभी" वितरित नहीं होते हैं। बड़ी समस्या यह है कि जब यह पृष्ठभूमि में होता है तो iOS 11 में साइलेंट नोटिफिकेशन कभी भी ऐप पर डिलीवर नहीं किया जाता है। यह डेटा पुश के पूरे उद्देश्य को पूरी तरह से हरा देता है।
Jan

हां, आपने पहले ही लिखा था कि, मैं सिर्फ इन नई पुश नीतियों के बारे में पूर्ण विवरण प्रदान करना चाहता था। मैंने Apple डॉक्स को यह दिखाने के लिए उद्धृत किया कि उन्होंने पहले ही पुश-डिलीवरी अनिश्चितता के बारे में चेतावनी दी थी। जैसा कि मैंने लिखा था: "मैं कल रात एक मौन धक्का प्राप्त करने में कामयाब रहा" (ऐप में मेरा मतलब था), और ऐप पृष्ठभूमि में था। लेकिन दिन में - मेरे ऐप को कोई पुश नहीं मिलता है :( मेरी राय में, Apple इन पुश-पॉलिसियों को RC वर्जन में ढीला कर देगा। दूसरी तरफ, वे मूल पुश व्यवहार को पुनर्स्थापित कर सकते थे - वे पहले से ही प्रदान की गई सुविधाओं से छुटकारा पाने के लिए उपयोग करते थे। बीटा संस्करण (जैसे 10.3 किचेन ऑटोडेलेट)।
kam800

जब धक्का मिलता है तो मैं समान लॉग देखता हूं और ऐप निलंबित हो जाता है। dasd प्रक्रिया तो लॉग default 10:17:42.994236 +0200 dasd DuetActivitySchedulerDaemon Advancing start date for <private> by 6.3 minutes to Wed Sep 13 10:24:03 2017। उस समय मूक धक्का दिया गया लगता है।
Jan

पहले से ही आईओएस 11 जीएम के साथ परीक्षण करना शुरू कर दिया, अभी भी अजीब व्यवहार देख रहा है, जैसे लॉग com.apple.fetch.com.troii.timriphone:F613DA:[ {name: ApplicationPolicy, policyWeight: 50.000, response: {Decision: Must Not Proceed, Score: 0.00}} ], FinalDecision: Must Not Proceed}
थॉमस एनेवलर

1
इसके अलावा - मैं कुछ ठूंठ अधिसूचना के साथ गैर-मूक धक्का भेजकर और अधिसूचना सेवा विस्तार का उपयोग करके सही सामग्री के साथ अधिसूचना भरकर अपने ऐप को हल करने में कामयाब रहा।
kam800

9

iOS 11.1 बीटा रिलीज़ नोटों में शामिल हैं: अधिसूचनाएँ हल किए गए मुद्दे मौन पुश सूचनाएँ अधिक बार संसाधित की जाती हैं। (33278611)


7

iOS 11.1 बीटा 2 में भी शामिल है

Notifications
Resolved Issues
 Silent push notifications are processed more frequently. (33278611)

रिलीज़ नोट्स में - अब इसका परीक्षण करेंगे।

अद्यतन - 11.10.2017 - iOS 11.1 बीटा 2

"वास्तविक दुनिया के परिदृश्यों" में 2 दिनों के लिए हमारे ऐप का उपयोग करने के बाद ऐसा लगता है कि आईओएस के इस संस्करण में एक वास्तविक सुधार है। मुझे विश्वास है कि यह तय हो गया है।


1
मैंने विभिन्न परिदृश्यों का परीक्षण किया: यह अग्रभूमि और पृष्ठभूमि की स्थिति में काम कर रहा था। दुर्भाग्य से यह काम नहीं करता है, अगर उपयोगकर्ता द्वारा ऐप को समाप्त कर दिया गया था। डिवाइस को समाप्त करने के बाद किसी भी मूक पुश को प्राप्त नहीं होता है, जब तक कि उपयोगकर्ता द्वारा ऐप को फिर से सक्रिय रूप से लॉन्च नहीं किया जाता है। क्या आपको भी ऐसा ही अनुभव हुआ?
एलेक्स्वो89

अब यह काम करता है ... लगभग 'डाउनटाइम' के बाद। 5 से 10 मिनट की मूक सूचनाएं उम्मीद के मुताबिक काम कर रही हैं ... मेरे प्रचलित के लिए क्षमा करें। टिप्पणी :)
एलेक्सवू ०

1
उपयोगकर्ता द्वारा ऐप को समाप्त करने पर मूक पुशिंग्स ने कभी काम नहीं किया - डेवलपर देखें ।apple.com/documentation/uikit/uiapplicationdelegate/… "हालांकि, उपयोगकर्ता द्वारा बल-त्यागने पर सिस्टम आपके ऐप को स्वचालित रूप से लॉन्च नहीं करता है।"
थॉमस आइंवलर

1
मैं देख रहा हूं कि iOS11.1 बीटा 3 iOS10 की तरह काम कर रहा था और iOS11.1 बीटा 2 की तुलना में बहुत बेहतर था।
ली

1
मेरे लिए @Olecramoak iOS11.1 बीटा 4 iOS 10 की तरह काम कर रहा है
एलेक्सवेउ89

7

Apple डेवलपर संबंधों ने मेरे रडार पर एक टिप्पणी जोड़ी:

हमारा मानना ​​है कि यह समस्या नवीनतम iOS 11.2 बीटा में हल हो गई है।

कृपया नवीनतम iOS बीटा के साथ परीक्षण करें। यदि आपके पास अभी भी समस्याएं हैं, तो कृपया अपनी बग रिपोर्ट को किसी भी प्रासंगिक लॉग या जानकारी के साथ अपडेट करें जो हमें जांच में मदद कर सके।

https://developer.apple.com/download/

वर्तमान में iOS 11.2 बीटा स्थापित कर रहा है - मूक पुश व्यवहार का परीक्षण करेगा


तो क्या इसका मतलब यह है कि iOS 11.1 GM समस्या को ठीक नहीं करेगा? :(
ओलेक्रोमैक

सुनने में अच्छा लगता है, जब हम वास्तव में iOS11.1 की आधिकारिक रिलीज की उम्मीद कर सकते हैं?
एलेक्सवेउ89

हमें तैनात रखें, वर्तमान में मेरा ऐप इंस्टॉल नहीं कर सकते क्योंकि 11.2 के लिए कोई Xcode उपलब्ध नहीं है। (और मैंने अपने डिवाइस से ऐप हटा दिया)
रुल पैप

3

मेरे ऐप के साथ भी ऐसा ही मुद्दा था, iOS 10 तक मुझे पुश नोटिफिकेशन application:didReceiveRemoteNotification:fetchCompletionHandlerमिल रहे थे और सही ढंग से कॉल किए जा रहे थे। लेकिन जब iOS 11 पुश नोटिफिकेशन पर काम किया गया तो अपडेट किया गया।

मेरे कोड के साथ मुद्दा यह था कि भले ही मैं सामग्री-उपलब्ध का उपयोग कर रहा था: 1 और म्यूट-कंटेंट: 1 पुश नोटिफिकेशन पेलोड में, बैकग्राउंड फ़ॉच का विकल्प चालू नहीं था। लेकिन यह iOS 10 तक पूरी तरह से काम कर रहा था।

सुनिश्चित करें कि आपने इन दोनों क्षमताओं को चालू किया है।

टर्निंग बैकग्राउंड फ़ेच क्षमता के बाद यह अब काम कर रहा है


नहीं, यह iOS11 के लिए काम नहीं करता है - बस एक बार अपने ऐप को समाप्त करें, फिर यह आपके ऐप को जागना बंद कर देता है। बस इस विषय में जवाब और टिप्पणियाँ पढ़ें
एलेक्सवॉए

2
टर्मिनेटेड ऐप के लिए, किसी भी पुश नोटिफिकेशन (sielent या सामान्य पुश) के लिए ऐप डेलिगेट में फायर डेलिगेट विधि नहीं होगी। डिफ़ॉल्ट व्यवहार करता है। IOS 11.0 के लिए कोई विशेष मामला नहीं है।
सुदीप जॉर्ज

3

iOS 11.4.1, स्विफ्ट 4

मैं (बादलों से) नहीं आने के मूक धक्का के साथ मुद्दों था और मैं सब कुछ यहाँ उल्लेख किया है की कोशिश की। तब मैंने alertBodyअपनी CKNotificationInfo()वस्तुओं को इस तरह खाली करने की कोशिश करने का फैसला किया :

let info = CKNotificationInfo()
info.shouldSendContentAvailable = true
info.alertBody = ""

इसने पुश को उच्च प्राथमिकता पर भेजा (लेकिन वे अभी भी चुप थे) और मुझे अब अपने डिवाइस लॉग में त्रुटि नहीं मिली कि पुश को अनदेखा किया जा रहा था।

मुझे उम्मीद है कि किसी की मदद करता है। :)


CloudKit के साथ भी मेरे लिए काम करता है। अलर्टबॉडी के बिना, आपको रिमोटनोटिफिकेशन प्राप्त करने के लिए डिवाइस में प्लग करना होगा। बहुत ही अजीब व्यवहार ...
पॉवरटॉल्ड

2

तो यह वास्तव में आईओएस 11 में एक बग है और इसे अब iOS 11 बीटा 3 में तय किया गया application:didReceiveRemoteNotification:fetchCompletionHandlerहै। अब इसे सही ढंग से कहा जाता है जब एक मूक धक्का दोनों अग्रभूमि या पृष्ठभूमि में प्राप्त होता है।

अपडेट करें

नहीं यह तय नहीं है और अभी भी आईओएस बीटा 3 और 4 में हो रहा है


1
वास्तव में यह नहीं है :( यह अभी भी iOS 11 बीटा 3 में हो रहा है
Jan

1
Apple ने बग रिपोर्ट को फिर से खोल दिया। मैं आपको
Jan

1
मैं iOS 11 बीटा में साइलेंट पुश नहीं प्राप्त कर रहा हूं। 4. अधिक विषय में, यदि ऐप अग्रभूमि में नहीं है तो वे कभी-कभी नियमित सूचनाओं के रूप में दिखाई देते हैं। निश्चित रूप से कुछ ऊपर!
बेन डोडसन

1
इसलिए मैंने अभी iOS 11 बीटा 5 को स्थापित किया है और यह बेहतर दिखता है और मौन सूचनाओं को तब वितरित किया जाता है जब ऐप कुछ समय के लिए doReceiveRemoteNotification डेलीगेट के माध्यम से अग्रभूमि या पृष्ठभूमि में होता है, फिर यह फिर से काम करना बंद कर देता है, चाहे मैं कुछ भी करूं: एक ही व्यवहार?
जन

1
यह अच्छा होगा यदि आप परीक्षण करें और साथ ही यह मुझे सिरदर्द दे रहा है। डिवाइस को पुनरारंभ करने के बाद मूक पुश बेतरतीब ढंग से काम करता है या नहीं करता है। मैंने अपनी मूल पोस्ट को एक नमूना परियोजना के साथ अद्यतन किया ताकि हम सभी एक ही उपयोग करें
Jan

2

वर्कअराउंड के रूप में हम मूल्य के रूप में खाली स्ट्रिंग के साथ एक "सूचना" कुंजी और "शीर्षक" के अंदर जोड़ रहे हैं। यह appDelegate में didReceive कॉलबैक को जगा रहा है।


1
यह मेरे लिए काम करने के साथ-साथ DuetActivitySchedulerDaemon पाने के लिए एक वर्कअराउंड प्रतीत होता था कि ऐप को बग को ठीक करने तक अधिसूचना को ऐप को जगाने की अनुमति दी जाए।
जो बेंटन

एक खाली शीर्षक वाले JSON को धक्का देने पर, मुझे अभी भी कंसोल पर संदेश मिलता है "बिना किसी चेतावनी, ध्वनि या बैज के साथ अधिसूचना को अनदेखा करना ..." {"aps": {"सतर्क": {"शीर्षक": ""}, "सामग्री-उपलब्ध": "1"}, "gcm.message_id": "0 ... bb"} क्या यह JSON संरचना आपके लिए काम कर रही है?
ओलेक्रोमैक

क्या आपको उद्धरण के बिना 1 (उपलब्ध सामग्री के लिए मूल्य) नहीं भेजना चाहिए?
एल्कॉर्ब

इस तरह से Google फायरबेस ने Json ("1") को प्रारूपित किया और यह हमेशा काम किया। बस iOS 11 dasd बकवास के साथ एक मुद्दा बना रहा है। क्या आप कृपया एक Json का उदाहरण पोस्ट कर सकते हैं जो आपके लिए काम कर रहा है?
ओलेकरामोआक

इसलिए जो मैं iOS 11.1 पर देख रहा हूं वह यह है कि अगर डिवाइस बैटरी (चार्जिंग नहीं) पर चल रहा है और बैटरी का स्तर 20% से कम है, तब भी साइलेंट पुश नहीं दिया जाता है, जबकि कम ऊर्जा मोड सक्रिय नहीं है। ये गलत है। IOS 11 पर साइलेंट पुश बिल्कुल भी बेकार नहीं है।
ओलेक्रोमैक

1

इस उत्तर को लिखते समय मुझे बिल ड्यूने के उत्तर के समान ही समस्या का सामना करना पड़ रहा है ।

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

{
    "aps" : {
        "badge" : 0,
        "sound" : ""
    },
    "mydata": {  
        "foo": "bar"  
    }  
}

कृपया ध्यान दें कि मैं जानबूझकर "सामग्री-उपलब्ध" का उपयोग नहीं कर रहा हूं। सूचना के वितरण में देरी / रद्द करने में iOS अनुकूलन तर्क को किक करने का कारण बनता है।


1

मुझे कुछ सूचनाओं के लिए एक ही मुद्दा मिल रहा है (जरूरी नहीं कि चुप)।

सभी अपडेट और उत्तरों की समीक्षा करने के बाद मैं दो अपडेट जोड़ने में सक्षम हूं जो मदद कर सकते हैं:

  • मैंने पाया कि UIApplication.shared.isRegisteredForRemoteNotificationsसूचना प्राप्त करते समय एक्सेस करने की विधि Xcode पर कुछ भी रिपोर्ट किए बिना एप्लिकेशन को स्टाल कर देती है। जाँच करें कि क्या आप विधि प्राप्त करने के बाद सूचना प्राप्त करने के बाद कुछ कोड चला रहे हैं। ( isRegisteredForRemoteNotifications UI को लॉक करने के लिए semaphore_wait_trap के साथ )।

    • मुझे पता चला कि मुझे "title-loc-args" : [3333]3333 के शाब्दिक रूप से स्वीकार नहीं करने पर एक स्ट्रिंग के रूप में स्वीकार करने के कारण कंसोल पर एक धक्का अधिसूचना पार्सिंग त्रुटि थी "title-loc-args" : ["3333"]। मैंने ऊपर दिए गए तरीके का उपयोग करने के बाद अपना संपूर्ण इंटरफ़ेस स्टाल बनाया, केवल iOS 11 पर, यह iOS 12 पर काम करता है।
  • मुझे यह भी पता चला कि, ठीक उसी कोड के साथ, यह iOS 12.0 (16A5366a) पर किसी भी मुद्दे के बिना काम करता है । लेकिन iOS 11 पर ऐसा हो रहा है।


1

मेरे मामले में सर्वर साइट पर नौकरी करने के बाद ui को अपडेट करने के लिए साइलेंट नोटिफिकेशन का उपयोग किया गया था, इसलिए ऐप में गैर-प्रासंगिक सामग्री होने के लिए गधे में दर्द था। क्योंकि मूक नोटिफिकेशन के लिए हमारे पेलोड में शीर्षक और बॉडी शामिल है, मैं इन तरीकों को सक्रिय / निष्क्रिय ऐप में काम करने की सूचनाएं प्राप्त करने के लिए लागू करता हूं, चार्जिंग के साथ नहीं और बैकग्राउंड ऐप के साथ रीफ़्रेश बंद हो गया और यहां तक ​​कि लो पावर स्टेट में भी।

इस कार्य को करने के लिए मैं डेलिगेट जोड़ता हूं और UNUserNotificationCenterDelegateप्रोटोकॉल और willPresent notification(iOS 10+) विधि के साथ एक्सटेंशन बनाता हूं , जो हर बार सही पेलोड के साथ ट्रिगर होता है। एप्लिकेशन सक्रिय होने पर अधिसूचना न दिखाने के लिए सिर्फ बैज या ध्वनि के साथ कॉल पूरा करें। मैं कुछ इस तरह से समाप्त हुआ

    import UserNotifications

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?

    // MARK: - Lifecycle
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        UNUserNotificationCenter.current().delegate = self
        return true
    }

    //this was only method to handle notifications before
    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any],
                     fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
        //process silent notification
        completionHandler(UIBackgroundFetchResult.newData)
    }
}

extension AppDelegate : UNUserNotificationCenterDelegate {
    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        //proces notification when app is active with `notification.request.content.userInfo`
        if UIApplication.shared.applicationState == .active {
            completionHandler(.badge)
        }else {
            completionHandler(.alert)
        }
    }
}

और इन राज्यों में काम करने के लिए जब ऐप पृष्ठभूमि में हो और मौन अधिसूचना मेरे तरीकों को कॉल न करें तो मुझे सीधे अधिसूचना केंद्र से सूचनाएं मिलती हैं applicationDidBecomeActive:

UNUserNotificationCenter.current().getDeliveredNotifications { (notifications) in
            debugLog(message: "unprocessed notification count: \(notifications.count)")
            if notifications.count > 0 {
                notifications.forEach({ (notification) in
                    DispatchQueue.main.async {
                        //handle `notification.request.content.userInfo`
                    }
                })
            }
        }

0

मेरे मामले में, "बैकग्राउंड ऐप रिफ्रेश" को iPhone सेटिंग्स में बंद कर दिया गया था। इस वजह से पुश नोटिफिकेशन डिवाइस पर दिया गया था, लेकिन ऐप पर नहीं। बैकग्राउंड ऐप को चालू करने से ऐप में साइलेंट पुश प्राप्त होता है।

यह इस सवाल का वास्तविक जवाब नहीं हो सकता है, बस अगर किसी को जांचने की आवश्यकता हो तो।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.