2014-02-24 85 views
0

我試圖在我的應用程序中集成推送通知。我已經得到了處理遠程通知,而應用程序正在運行工作正常,但是我想處理它們時,應用程序沒有使用遠程通知有效負載爲空

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: 
(NSDictionary *)launchOptions 

但是當前正在運行,似乎每當我點擊通知和警報它啓動應用程序我的通知有效載荷爲空。

我用NSLog記錄有效負載,並顯示它爲空。

是否有任何理由它是空的?我知道我的通知設置正確,因爲他們在應用程序內工作,但由於某種原因,我無法弄清楚這一點。我還記錄了launchOptions並顯示爲null。

這是我didFinishLaunchingWithOptions方法中:

NSDictionary *notificationPayload = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]; 
NSLog(@"launch options: %@", launchOptions); 
NSLog(@"payload: %@", notificationPayload); 
+1

你是否正在點擊通知提醒或應用圖標?如果是最後一種情況,那麼此方法將不起作用 – nerowolfe

+0

@ nerowolfe點擊警報,而不是應用程序圖標。 –

回答

0

我幾年前寫了一篇關於這方面的博客文章,並且從Xcode中設置它的位置開始改變。

但這裏的博客文章,以防萬一,一些背景信息。 http://runmad.com/blog/2010/06/debugging-executables-for-push-notifcations/

現在,爲了調試推送通知,您需要編輯該方案。

您可以在「管理計劃」改變你的目標的啓動設置,以等待手動啓動。應用程序,它允許您通過application: didFinishLaunchingWithOptions:設置斷點和發送推送通知來觸發啓動您的應用程序的調試。

enter image description here

application:didReceiveRemoteNotification:是當你的應用程序是當前活動或涉及到前臺稱爲委託方法。

徹底測試所有3個這些場景(從啓動,從背景開始,同時激活)非常重要。

在第二種方法中,你可以用

[application applicationState] == UIApplicationStateActive

檢查應用程序的狀態,並與推送通知相應的處理。

+0

好吧謝謝生病給我一個鏡頭 –

+0

謝謝這幫助我弄明白了。 –

0

如果你想看到以下通知委託的負載信息的使用method.And確保你從通知中心啓動您的應用程序時,你得到了通知,然後只有這個方法調用。

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 
{ 
    NSLog(@"userInfo: %@", userInfo); 


    NSDictionary *dict=[userInfo objectForKey:@"aps"]; 
    NSString *strPushMessege=[dict objectForKey:@"alert"]; 
    NSLog(@"strPushMessege %@",strPushMessege); 
} 
+0

只有當應用程序處於前景時,此方法纔會觸發。 – nerowolfe

+0

如果您點擊通知,此方法將始終調用。您可以看到您的所有有效負載信息。 –

+0

從Apple文檔:如果應用程序正在運行並收到遠程通知,則應用程序會調用此方法來處理通知。此方法的實施應使用通知來採取適當的行動。例如,您可以將其用作連接到服務器的信號,並下載等待應用程序的等待數據。 – nerowolfe