2015-12-04 6 views
14

कुछ मामलों अपने iOS आवेदन है में खोला गया था एक ही समय पर कई UILocalNotification को गति प्रदान करने। मैं यह तय करना चाहता हूं कि उपयोगकर्ता ने UILocalNotification पर क्लिक किया था। जब कोई उपयोगकर्ता UILocalNotification पर क्लिक कर रहा है तो एप्लिकेशन निष्क्रिय था या पृष्ठभूमि में था। समस्या यह है कि विधिका पता लगाने UILocalNotification एक आवेदन

func application(application: UIApplication, didReceiveLocalNotification notification: UILocalNotification) { 

के लिए कहा जाता है प्रत्येक शुरू हो रहा UILocalNotification। तो जब ऐप सक्रिय हो जाता है तो इस विधि को कई बार कहा जाता है क्योंकि मुझे एकाधिक UILocalNotification प्राप्त हुआ है। क्या यह निर्धारित करने का कोई तरीका है कि ऐप खोलने का कारण UILocalNotification था? एप्लिकेशनस्टेट की एक जांच काम नहीं कर रही है क्योंकि सभी निष्क्रिय होने पर या पृष्ठभूमि में सभी UILocalNotification प्राप्त हुए हैं।

बहुत बहुत धन्यवाद!

संपादित करें: एक बहुत दूर उदाहरण के रूप में: जब आप दो अलग-अलग समूहों ए और बी से व्हाट्सएप संदेश प्राप्त करते हैं और समूह ए से पुश अधिसूचना का चयन करते हैं तो यह एप्लिकेशन तुरंत खुलने के बाद प्रदर्शित होगा। व्हाट्सएप और मेरे उपयोग के मामले में अंतर यह है कि मेरे पास स्थानीय सूचनाएं हैं।

+1

मेरे अनुभव में (और मैं सिर्फ एक छोटे से परीक्षण ऐप ने लिखा है कि कार्यक्रम ही fireDate जब एप्लिकेशन को इस परीक्षण करने के लिए बंद कर दिया है के साथ तीन UILocalNotifications), तो उपयोगकर्ता अपने अधिसूचना स्क्रीन में दिए गए अलर्ट पर है, जिससे टैप करता जब ऐप लॉन्च करना, केवल यूआईएलोकल नोटिफिकेशन जो यूआईएप्लिकेशंस के पास किया जाता है, रीसेसिव नोटिफिकेशन विधि वह है जिसे उपयोगकर्ता ने टैप किया था। तो मैं आपके प्रश्न को काफी समझ नहीं रहा हूं। – vaticRite

+0

यह आपके प्रश्न का उत्तर नहीं देता है, लेकिन केवल एक स्थानीय अधिसूचना होने के बारे में क्या है (यानी पिछले लोगों को रद्द करना)। यदि आप ऐसा करते हैं, तो ऐप सक्रिय होने पर आप बाद की खपत के लिए अधिसूचना के उपयोगकर्ता इन्फ्लो डिक्शनरी का ट्रैक रख सकते हैं। यदि आपको अभी भी कई स्थानीय अधिसूचनाओं की आवश्यकता है, तो क्या यह किसी एक तरह से इसे किसी समूह में समूहित करने का विकल्प होगा? यदि हां, तो ऐप सक्रिय होने पर आप इसकी खपत के लिए userInfo शब्दकोशों की सरणी तैयार कर सकते हैं। – atxe

+0

क्या आप उपयोगकर्ता अधिसूचना का उपयोग कर सकते हैं यह पता लगाने के लिए कि कौन सी अधिसूचना खोला गया था और जांच की गई थी कि रेसीवेव लॉकल नॉटिफ़, –

उत्तर

2

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

+0

हाय pbush25, आपको प्रतिक्रिया के लिए धन्यवाद। दुर्भाग्यवश, यह मुझे यह जानने में मदद नहीं करेगा कि उपयोगकर्ता ने कौन से UILocalNotification को एप्लिकेशन के बाद क्लिक किया था: didReceiveLocalNotification को उपयोगकर्ता को एक साथ प्राप्त होने वाले प्रत्येक UILocalNotification के लिए बुलाया जाता है। –

+0

इसके अतिरिक्त लॉन्च विकल्प केवल तब भेजे जाते हैं जब एप्लिकेशन पहली बार लॉन्च होता है जब पृष्ठभूमि से सक्रिय नहीं होता है। –

1

@ pbush25 के लिए बस थोड़ा सा अतिरिक्त, आप इस तरह की संपत्ति notification.userInfo = [:] पर एक शब्दकोश ऑब्जेक्ट असाइन कर सकते हैं, फिर आप इसे इस तरह से प्राप्त कर सकते हैं और उपयोग करते हैं!

8

अधिसूचना शेड्यूल करते समय आप अधिसूचना userinfo के लिए कुछ अद्वितीय आईडी सेट कर सकते हैं।

UILocalNotification *notif = [[UILocalNotification alloc] init]; 
    notif.fireDate = [NSDate dateWithTimeIntervalSinceNow:10]; 
    notif.timeZone = [NSTimeZone defaultTimeZone]; 

// set the your data with unique id 
    NSMutableDictionary *dict=[NSMutableDictionary new]; 
    [dict setObject:Id forKey:@"id"]; 

// assignt the dictionary to user info 
    notif.userInfo=dict; 


    notif.alertBody = @"test Notification"; 
    notif.soundName = UILocalNotificationDefaultSoundName; 


    [[UIApplication sharedApplication] scheduleLocalNotification:notif]; 

आप की तरह didReceiveLocalNotification से UserInfo प्राप्त कर सकते हैं कि

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 
{ 
    if ([[notification.userInfo valueForKey:@"id"] isEqualToString:@"1"]) 
    { 
     NSLog(@"notification id %@",[notification.userInfo valueForKey:@"id"]); 
    } 
    else if ([[notification.userInfo valueForKey:@"id"] isEqualToString:@"2"]) 
    { 
     NSLog(@"notification id %@",[notification.userInfo valueForKey:@"id"]); 
    } 

    ////// or ///// 

    if ([notification.userInfo valueForKey:@"id"]) 
    { 
     NSLog(@"id of notification %@",[notification.userInfo valueForKey:@"id"]); 
    } 

} 
didFinishLaunchingWithOptions से

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    // Override point for customization after application launch. 
    if ([launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey]) 
    { 
     UILocalNotification *notif=[launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey]; 
     NSLog(@"notif.userInfo %@",notif.userInfo); 

//  notif.userInfo { 
//   id = 2; 
//  } 

    } 


     return YES; 
} 
2

जब समय निर्धारण NSDictionary के रूप में आईडी या UILocalNotification userInfo संपत्ति में कुछ की तरह कुछ अद्वितीय जानकारी प्रदान करें अपने अधिसूचना। और जब इसे didFinishLaunchingWithOptions या didReceiveLocalNotification में प्राप्त होता है तो अधिसूचना उदाहरण से user info शब्दकोश निकालें और तदनुसार अपना काम करें।

2

चूंकि आप तेजी से उपयोग करते हैं, मैं समझता हूं कि आपका ऐप शायद आईओएस 8 और बाद में चल रहा है।

यदि आप आईओएस 8 का उपयोग करते हैं, तो आप अपनी अधिसूचना में क्रियाएं प्रदान कर सकते हैं (अधिसूचना पर क्लिक करना एक क्रिया है)।

तो आप इस तरीकों UIApplicationDelegate के माध्यम से शुरू हो रहा होगा:

application(_:handleActionWithIdentifier:forLocalNotification:completionHandler:)

और

application(_:handleActionWithIdentifier:forLocalNotification:withResponseInfo:completionHandler:)

दोनों इस तरीकों आप एक UILocalNotification दे जो contains a userInfo property है कि आप जब आप भर सकते हैं आपको अधिसूचनाएं बनाएं और फिर यह जानने के लिए कि आप कौन सा है, किसी प्रकार का पहचानकर्ता रखें।

0

स्विफ्ट 3.x में निम्नलिखित कोड का उपयोग AppDelegate की didFinishLaunchingWithOptions विधि में करें।

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
     // See if the application was launched from a local notification. 
     if let options = launchOptions { 
      if let notification = options[UIApplicationLaunchOptionsKey.localNotification] as? UILocalNotification { 
       print(notification.userInfo ?? "No info attached.") 
      } 
     } 
     return true 
} 
संबंधित मुद्दे