2012-05-17 5 views
9

Widzę dziwne zachowanie z powiadomieniem push i zastanawiałem się, czy ktoś ma jakieś porady na temat tego, co zrobiłem źle lub powinienem zrobić.Mam jednak aplikację: application didReceiveRemoteNotification: nie jest uruchamiany po wybraniu ikony aplikacji

Mam application:(UIApplication*)application didReceiveRemoteNotification: zapisać następująco:

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

Jak widać, nie jestem zaniepokojony stanem aplikacji. Chcę tylko zarejestrować wiadomość, gdy tylko otrzymam PN.

Moja konfiguracja jest zgodna z dokumentacją Apple i mogę otrzymywać powiadomienia push.

Poniżej przedstawiono oczekiwane zachowania, gdy przychodzi PN:

  • aplikacja jest w tle i klikam na zgłoszenia: widzę zgłoszenie w centrum powiadomień. Kliknij powiadomienie, aplikacja pojawi się na pierwszym planie i widzę, że powyższa metoda jest wywoływana.
  • Aplikacja jest aktywna i już na pierwszym planie: Widzę, że powyższa metoda jest wywoływana.

Teraz, po to osobliwe zachowanie widzę.

  • PN przychodzi Zobacz w powiadomieniach, zobacz odznaki na ikonę aplikacji. Klikam ikonę aplikacji - nie powiadomienie: W tym przypadku stwierdziłem, że powyższa metoda to , a nie. Oczekiwano, że będzie on nazywał się ...

Czy ktoś widział to zachowanie wcześniej? Czy to powinno się stać? W dokumentacji Apple nie widziałem niczego na ten temat ... Czy byłby to sposób obejścia tego?

Odpowiedz

2

Jeśli aplikacja nie działa w tle, ale początkowo rozpoczęła od powiadomienia Push i masz didFinishLaunchingWithOptions: wdrożone, trzeba wdrożyć tam swój kod:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions { 
    if (launchOptions != nil) { 
     NSDictionary* userInfo = [launchOptions valueForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"]; 
     if (userInfo != nil) { 
      NSDictionary* apsInfo = [userInfo objectForKey:@"aps"]; 
      NSString* custom = [userInfo objectForKey:@"yourCustomPushData"]; 
      // do something with it 
     } 
    } 
    //... 
} 
+0

nie - mam ten sam problem , ani nie wyskoczyło z opcji, ani nie odebrałaśotototacji, gdy aplikacja jest w tle i przychodzi powiadomienie push, a ty wracasz do aplikacji dotykając jej ikony – jab11

2

mam ten sam problem. To mnie napędza, ale myślę, że tak działa iOS.

Poniżej fragment z dokumentacji jabłek. Dotyczy to aplikacji: didFinishLaunchingWithOptions, gdy aplikacja nie jest uruchomiona. Wygląda na to, że jest taki sam, gdy aplikacja działa w tle/didReceiveRemoteNotification.

"Jeśli zostanie naciśnięty przycisk akcji (na urządzeniu z systemem iOS), system uruchomi aplikację, a aplikacja wywoła aplikację swojej delegaty: didFinishLaunchingWithOptions: method (jeśli zaimplementowano), przekazuje w treści powiadomienia (dla zdalnych powiadomień) lub lokalny obiekt powiadomień (dla powiadomień lokalnych)

Jeśli ikona aplikacji zostanie dotknięta na urządzeniu z systemem iOS, aplikacja wywoła tę samą metodę, ale nie dostarczy informacji o powiadomieniu." Od: http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/IPhoneOSClientImp/IPhoneOSClientImp.html#//apple_ref/doc/uid/TP40008194-CH103-SW1

0

MrJ nie działa w moim przypadku tak próbowałem następujących opcji

Jeśli aplikacja nie jest w tle należy użyć następującego kodu

//-------------- check notification when app is come to foreground after apllication get terminated ----------------// 

UILocalNotification *localNotif = 

[launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; 

if (localNotif) { 

    [self handleRemotNotification:[launchOptions valueForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"]]; // private method 


}