2012-05-17 75 views
9

我看到一個特殊的行爲與我的推送通知,並想知道如果任何人有任何建議我做錯了什麼或應該做什麼。得到PN但是應用程序:應用程序didReceiveRemoteNotification:當選擇應用程序圖標時沒有觸發

我有我的application:(UIApplication*)application didReceiveRemoteNotification:寫成如下:

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

正如你所看到的,我不擔心應用程序的狀態。我只是想在收到PN時記錄消息。

我的設置是根據蘋果的文檔,我可以收到推送通知。

以下是預期的行爲時,PN進來:

  • 應用程序在後臺,我點擊通知:我可以看到在通知中心的通知。點擊通知,應用程序進入前臺,我可以看到上述方法被調用。
  • 應用程序處於活動狀態並已在前臺:我可以看到上述方法被調用。

現在,以下是奇特的行爲,我看到:

  • PN進來看到它的通知,請參閱應用程序圖標徽章。我點擊應用程序圖標 - 不是通知:在這種情況下,我發現上述方法是而不是調用。我期待它被稱爲...

有沒有人見過這種行爲之前?這是應該發生的?我在蘋果文檔中看不到任何關於這個......另外,是否有解決方法?

回答

2

如果應用程序在後臺沒有運行,但最初從推送通知啓動,你有didFinishLaunchingWithOptions:實現,你需要有實現代碼:

- (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

沒有 - 我有同樣的問題,當應用程序處於後臺並且推送通知到達並且您返回到應用程序點擊其圖標時,也不會調用任何選項或接受重新引用。 – jab11

2

我也有同樣的行爲。它讓我瘋狂,但我認爲這就是iOS的工作方式。

下面摘自蘋果文檔。這是關於應用程序:didFinishLaunchingWithOptions當應用程序不運行。它看起來應用程序在後臺/ didReceiveRemoteNotification時是一樣的。 「如果操作按鈕被輕敲(在運行iOS的設備上),系統啓動應用程序,應用程序調用其代理的應用程序:didFinishLaunchingWithOptions:方法(如果已實現);它傳入通知負載(用於遠程通知)或本地通知對象(用於本地通知)

如果在運行iOS的設備上輕敲應用程序圖標,應用程序將調用相同的方法,但不提供有關通知的信息。「 來源: http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/IPhoneOSClientImp/IPhoneOSClientImp.html#//apple_ref/doc/uid/TP40008194-CH103-SW1

0

MRJ的是不是在我的情況下工作,所以我嘗試下列選項

如果應用程序沒有在後臺,你應該使用下面的代碼

//-------------- 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 


} 
相關問題