2011-12-30 13 views
103

मेरे पास एक आईओएस एप्लीकेशन है जहां कुछ पुश अधिसूचना भेजी जाती है। मेरी समस्या यह है कि संदेशों के बाद आईओएस में अधिसूचना केंद्र में संदेश/सूचनाएं रहती हैं। अगली बार जब एप्लिकेशन खुलता है तो अधिसूचना केंद्र में मेरे आवेदन के लिए मैं अधिसूचना कैसे हटा सकता हूं?आईओएस एप्लीकेशन: नोटिफिकेशन कैसे साफ़ करें?

मैं उन पदों पर आया जहां लोग अधिसूचनाओं को साफ़ करने के लिए शून्य मूल्य पर setApplicationIconBadgeNumber पर कॉल कर रहे हैं। यह मेरे लिए बहुत अजीब लगता है, तो मुझे विश्वास है कि शायद एक और समाधान मौजूद है?

EDIT1:

मैं सूचनाएं समाशोधन कुछ समस्याएं आ रही हैं। कृपया मेरा कोड यहां देखें:

- (void) clearNotifications { 
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0]; 
    [[UIApplication sharedApplication] cancelAllLocalNotifications]; 
} 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    if (launchOptions != nil) 
    { 
     NSDictionary* dictionary = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; 
     if (dictionary != nil) 
     { 
      NSLog(@"Launched from push notification: %@", dictionary); 

      [self clearNotifications]; 
     } 
    } 

    return YES; 
} 

- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo 
{  
    NSLog(@"Received notification: %@", userInfo); 
    [self clearNotifications]; 
} 

मैं एक्सकोड के माध्यम से ऐप चला रहा हूं। जब ऐप को कम किया जाता है और मैं अधिसूचना केंद्र में अधिसूचना का उपयोग करके ऐप शुरू करता हूं, तो मैं लॉग में देख सकता हूं कि didReceiveRemoteNotification को कॉल किया जा सकता है और ब्रेकपॉइंट्स का उपयोग करके मैं देख सकता हूं कि clearNotifications भाग गया है। लेकिन अभी भी सूचना अधिसूचना केंद्र में लटका है। क्यूं कर?

उत्तर

149

सबसे अधिक संभावना है क्योंकि अधिसूचना केंद्र अपेक्षाकृत नई सुविधा है, ऐप्पल अधिसूचनाओं को समाशोधन के लिए एक नया नया प्रतिमान नहीं करना चाहता था। तो इसके बजाय, उन्होंने अधिसूचनाओं को साफ़ करने के लिए बहु-उद्देश्य [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0]; बनाया। यह थोड़ा अजीब लग सकता है, और ऐप्पल भविष्य में ऐसा करने के लिए एक और सहज ज्ञान प्रदान कर सकता है, लेकिन समय के लिए यह आधिकारिक तरीका है।

[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0]; 
[[UIApplication sharedApplication] cancelAllLocalNotifications]; 

जो अधिसूचना केंद्र से ऐप्स की सूचनाओं के सभी स्पष्ट करने में विफल रहता है कभी नहीं:

मैं स्वयं, मैं इस स्निपेट का उपयोग।

115

बस पीसीपरिनी के उत्तर पर विस्तार करने के लिए। जैसा कि उन्होंने उल्लेख किया है कि आपको निम्नलिखित कोड को अपने application:didFinishLaunchingWithOptions: विधि में जोड़ना होगा;

[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0]; 
[[UIApplication sharedApplication] cancelAllLocalNotifications]; 

आप इसके अलावा तो बढ़ाने के लिए अपने application:didReceiveRemoteNotification: विधि में बिल्ला घटती यदि आप संदेश केंद्र से संदेश स्पष्ट करने के लिए इतना है कि जब कोई उपयोगकर्ता एक सूचना संदेश केंद्र दबाने से एप्लिकेशन को आप में प्रवेश करती है कोशिश कर रहे हैं की जरूरत होगी यह भी स्पष्ट है, यानी;

[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 1]; 
[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0]; 
[[UIApplication sharedApplication] cancelAllLocalNotifications]; 
+1

ग्रेट शेयर .... धन्यवाद एक बहुत ..... –

+1

जादुई दे यू +1 ... plz इस जवाब सच बनाने .. –

+0

मैं cancelAllLocalNotifications कि लाइन के बिना मेरे लिए required.Worked नहीं है लगता है – Murali

20

यह भी applicationDidBecomeActive में clearNotifications के लिए एक कॉल को जोड़ने के लिए इतना है कि मामले में आवेदन पृष्ठभूमि में है और वापस आ जाता है यह भी सूचनाएं साफ हो जाएगा मतलब हो सकता है।

- (void)applicationDidBecomeActive:(UIApplication *)application 
{ 
    [self clearNotifications]; 
} 
1

शायद निर्धारित अलार्म और अस्पष्ट आइकन आइकन बैज के मामले में हो सकता है।

NSArray *scheduledLocalNotifications = [application scheduledLocalNotifications]; 
NSInteger applicationIconBadgeNumber = [application applicationIconBadgeNumber]; 

[application cancelAllLocalNotifications]; 
[application setApplicationIconBadgeNumber:0]; 

for (UILocalNotification* scheduledLocalNotification in scheduledLocalNotifications) { 
    [application scheduleLocalNotification:scheduledLocalNotification]; 
} 
[application setApplicationIconBadgeNumber:applicationIconBadgeNumber]; 
9

आप लंबित स्थानीय सूचनाएं निर्धारित किया है और cancelAllLocalNotifications उपयोग करने के लिए सूचना केंद्र में पुराने लोगों को स्पष्ट नहीं करना चाहते हैं, तो आप भी कर सकते हैं:

यह है कि यदि आप सेट प्रकट होता है scheduledLocalNotifications यह अधिसूचना केंद्र में पुराने लोगों को साफ़ करता है, और इसे स्वयं सेट करके, आप लंबित स्थानीय सूचनाएं बरकरार रखते हैं।

+1

यह आईओएस 9 पर मेरे लिए एक आकर्षण की तरह काम करता है। मैं अपनी सभी अधिसूचनाओं को रद्द नहीं करना चाहता था क्योंकि वे समय (दैनिक या साप्ताहिक) में दोहराते हैं। और इस तरह मैं उन्हें हटाए बिना सभी सामान साफ़ करता हूं। – superpuccio

+1

अब तक का सबसे अच्छा समाधान मैंने देखा है। किसी को पता है कि यह आईओएस 8 पर काम करता है? – duncanc4

+0

@ duncanc4 पिछली बार मैंने आईओएस 8 पर इसका परीक्षण किया था यह काम कर रहा था। – ospr

-1

इसे here से मिला। यह आईओएस 9

UIApplication *app = [UIApplication sharedApplication]; 
NSArray *eventArray = [app scheduledLocalNotifications]; 
for (int i=0; i<[eventArray count]; i++) 
{ 
    UILocalNotification* oneEvent = [eventArray objectAtIndex:i]; 
    //Cancelling local notification 
    [app cancelLocalNotification:oneEvent]; 
} 
+0

वास्तव में –

3

तुम यहाँ आ रहे हैं सोच विपरीत (के रूप में मैं था), this पोस्ट आपके लिए हो सकती के लिए काम करता है।

मुझे पता नहीं चला कि बैज को साफ़ करने पर मेरी सूचनाएं क्यों समाशोधन कर रही थीं ... मैं मैन्युअल रूप से बैज बढ़ाता हूं और फिर उपयोगकर्ता को ऐप में प्रवेश करने पर इसे साफ़ करना चाहता हूं। अधिसूचना केंद्र को साफ़ करने का कोई कारण नहीं है; वे अभी भी उन अधिसूचनाओं को देखना या कार्य करना चाहते हैं।

[UIApplication sharedApplication].applicationIconBadgeNumber = -1; 
+1

काम नहीं करता है क्या यह आपके लिए आईओएस 9 में काम करता है? मैंने 0 या -1 तक बैज सेट करने के साथ कोई अंतर नहीं देखा। यह अभी भी मेरे मामले में सभी रिमोट नोटिफिकेशन साफ़ करता है। – AlexeyVMP

+0

हां, मैंने वास्तव में फिर से अपने ऐप के साथ ध्यान देना शुरू कर दिया; मुझे नहीं पता कि क्या बदल गया। – TahoeWolverine

+0

मैं ऐप्पल के बाद से छोड़ रहा हूं क्योंकि किसी भी बैज नंबर वाले ऐप में कोई सूचना नहीं होनी चाहिए – AlexeyVMP

1

स्विफ्ट में मैं अपने AppDelegate अंदर निम्नलिखित कोड का उपयोग कर रहा:

नकारात्मक 1 चाल, सौभाग्य से करता

func applicationDidBecomeActive(application: UIApplication) { 
    application.applicationIconBadgeNumber = 0 
    application.cancelAllLocalNotifications() 
} 
0

जब आप भविष्य में सूचनाएं दोहराया है, तुम नहीं उन अधिसूचनाओं को रद्द करना चाहते हैं, आप अधिसूचना केंद्र में आइटम को

func clearNotificationCenter() { 
    UIApplication.sharedApplication().applicationIconBadgeNumber = 1 
    UIApplication.sharedApplication().applicationIconBadgeNumber = 0 
} 

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

0

जब आप अपने अनुप्रयोग से लॉग आउट करें, आप अपने लॉगआउट बटन क्लिक विधि पर कोड की एक निम्न पंक्ति का उपयोग करना होगा।

[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0]; 

[[UIApplication sharedApplication] cancelAllLocalNotifications]; 

और यह मेरे ऐप में पूरी तरह से काम करता है। आईओएस 10 (स्विफ्ट 3) के लिए

9

अद्यतन

आदेश सभी स्थानीय सूचनाएं आईओएस 10 क्षुधा में, आप निम्न कोड का उपयोग करना चाहिए स्पष्ट करने में:

import UserNotifications 

... 

if #available(iOS 10.0, *) { 
    let center = UNUserNotificationCenter.current() 
    center.removeAllPendingNotificationRequests() // To remove all pending notifications which are not delivered yet but scheduled. 
    center.removeAllDeliveredNotifications() // To remove all delivered notifications 
} else { 
    UIApplication.shared.cancelAllLocalNotifications() 
} 

इस कोड को संभालती है आईओएस 10.x और आईओएस के सभी पिछले संस्करणों के लिए स्थानीय अधिसूचनाओं की समाशोधन। आईओएस 10.x कोड के लिए आपको import UserNotifications की आवश्यकता होगी।

+0

धन्यवाद आदमी !!!!! –

0

आपको अपने ऐपडिलेगेट applicationDidBecomeActive विधि में कोड नीचे जोड़ने की आवश्यकता है।

[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0]; 
संबंधित मुद्दे