2011-07-18 15 views

Odpowiedz

14

Dane powiadomienia są dostarczane do Twojej aplikacji pod numerem application:didReceiveRemoteNotification:. Jeśli chcesz przetworzyć go w applicationDidBecomeActive:, powinieneś go zapisać w application:didReceiveRemoteNotification: i przeczytać ponownie w applicationDidBecomeActive.

+0

Niestety ożywić to, ale co się stanie, gdy pojawi się powiadomienie w aplikacji: didReceiveRemoteNotification i aplikacja jest na pierwszym planie, co oznacza applicationDidBecomeActive nie zostanie wywołana. –

+3

W 'application: didReceiveRemoteNotification:' możesz zapytać '- [UIApplication applicationState]', aby dowiedzieć się, czy twoja aplikacja jest już na pierwszym planie. Jeśli jest to po prostu przetwarzaj powiadomienia od razu. –

0

Jeśli aplikacja jest w stanie background, gdy powiadomienie push jest odbierane i stukane, aplikacja zostanie wywołana za pomocą application:didFinishLaunchingWithOptions:, a nie application:didReceiveRemoteNotification:.

Nośnik powiadomienia push jest dostępny w słowniku application:didFinishLaunchingWithOptions: ze słownika .

+0

To nie jest poprawna aplikacja: didFinishLaunchingWithOptions: nie jest wywoływana, gdy aplikacja działa w tle, jest ona wywoływana tylko podczas uruchamiania aplikacji. to, co mówisz, jest całkowicie przeciwne, najpierw będzie nazywane aplikacją: didReceiveRemoteNotification: a następnie applicationDidBecomeActive: –

1

używam tego kodu do zarządzania push:

W 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; 
    } 
} 

Mam nadzieję, że będzie to przydatne dla kogoś.

Szczęśliwe kodowanie.

2

wersja Swift:

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> { 
    } 
} 
Powiązane problemy