2011-07-18 13 views
7

जब रिमोट पुश अधिसूचना प्राप्त होती है क्योंकि एप्लिकेशन पृष्ठभूमि में होता है, तो ऐप एप्लिकेशनडिडबैकएक्टिव में प्रवेश करता है। वहां से, मैं अधिसूचना से डेटा के NSDictionary तक कैसे पहुंच सकता हूं?मैं एप्लिकेशनडिडबैकएक्टिव पर रिमोट पुश अधिसूचना डेटा कैसे प्राप्त करूं?

उत्तर

14

अधिसूचना डेटा आपके ऐप पर application:didReceiveRemoteNotification: में दिया गया है। यदि आप applicationDidBecomeActive: में इसे संसाधित करना चाहते हैं तो आपको इसे application:didReceiveRemoteNotification: में संग्रहीत करना चाहिए और इसे applicationDidBecomeActive में फिर से पढ़ना चाहिए।

+0

क्षमा करें यह पुनर्जीवित करने के लिए है, लेकिन जब आप आवेदन पर सूचना प्राप्त क्या होता है: didReceiveRemoteNotification और आपके आवेदन अग्रभूमि, जो applicationDidBecomeActive नहीं कहा जा होगा इसका मतलब है। –

+3

'आवेदन में: didReceiveRemoteNotification: 'यह पता लगाने के लिए कि आपका ऐप पहले से ही अग्रभूमि में है, आप पूछ सकते हैं' - [UIAplication applicationState] '। यदि यह है तो तुरंत अधिसूचना को संसाधित करें। –

0

यदि आपका ऐप background स्थिति में है जब धक्का अधिसूचना प्राप्त होती है और टैप किया जाता है, तो ऐप application:didFinishLaunchingWithOptions: और application:didReceiveRemoteNotification: के साथ नहीं आ जाएगा।

पुश अधिसूचना पेलोड application:didFinishLaunchingWithOptions:launchOptions शब्दकोश से एक्सेस किया जा सकता है।

+0

यह सही एप्लीकेशन नहीं है: didFinishLaunchingWithOptions: ऐप पृष्ठभूमि में होने पर नहीं कहा जाता है, यह केवल तब शुरू होता है जब एप्लिकेशन प्रारंभ होता है। आप जो कह रहे हैं वह पूरी तरह से oposite है, पहले इसे आवेदन कहा जाएगा: didReceiveRemoteNotification: और उसके बाद अनुप्रयोग DidBecomeActive: –

1

मैं धक्का प्रबंधन करने के लिए इस कोड का उपयोग:

AppDelegate

@implementation AppDelegate{ 
    NSDictionary *dUserInfo; //To storage the push data 
} 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    //Check for options 
    if (launchOptions != nil) 
    { 
     //Store the data from the push. 
     dUserInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; 
     if (dUserInfo != nil) 
     { 
      //Do whatever you need 
     } 
    } 

    return YES; 
} 

- (void)applicationDidBecomeActive:(UIApplication *)application 
{ 
    //Data from the push. 
    if (dUserInfo != nil) 
    { 
     //Do whatever you need 
    } 
} 

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 
{ 
    //Store the data from the push. 
    if (userInfo != nil) 
    { 
     dUserInfo = userInfo; 
    } 
} 

में मुझे आशा है कि यह किसी के लिए उपयोगी होगा।

हैप्पी कोडिंग।

2

स्विफ्ट संस्करण:

var dUserInfo: [NSObject : AnyObject]? 

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

// code... 

if let info = launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] as? [NSObject : AnyObject] { 
     dUserInfo = info 
    } 

    return true 
} 

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) { 
    dUserInfo = userInfo 
} 

func applicationDidBecomeActive(application: UIApplication) { 
    // code... 

    self.yourAction(dUserInfo) 
} 

func yourAction(userInfo: [NSObject : AnyObject]?) { 
    if let info = userInfo?["aps"] as? Dictionary<String, AnyObject> { 
    } 
} 
संबंधित मुद्दे