2014-08-30 56 views
-1

我正在將下面的有效內容從PHP服務器傳遞到APNS。點擊圖標後,APNS不會調用didReceiveRemoteNotification

$body['aps'] = array(
     'badge' => 1, 
     'ArmyGroupID' => 12345 
); 

雖然應用程序在前臺,我得到整個字典,這是沒有問題的。

問題:

但是當應用程序在後臺運行,它成功地追加徽章, 可是當我點擊圖標,該消息不會分派到didReceiveRemoteNotification。

我是以正確的方式去做的嗎?

回答

0

這是預期behaviour.See從蘋果文檔下面的代碼片斷:

作爲呈現通知的結果,用戶敲擊警報或抽頭(或點擊)的應用程序圖標的動作按鈕。 如果點擊操作按鈕(在運行iOS的設備上),系統將啓動應用程序,應用程序會調用其代理的應用程序:didFinishLaunchingWithOptions:方法(如果已實施);它傳入通知有效內容(用於遠程通知)或本地通知對象(用於本地通知)。 如果在運行iOS的設備上輕擊應用程序圖標,應用程序將調用相同的方法,但不會提供有關通知的信息。如果在運行OS X的計算機上單擊應用程序圖標,則應用程序會調用代理的applicationDidFinishLaunching:方法,在該方法中代理可以獲取遠程通知有效內容。

作爲一種變通方法,我可以提出一個小小的支票存入didFinishLaunchingWithOptions這樣的:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    // Get user info dict 
    NSDictionary* userInfo = [launchOptions valueForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"]; 
    if([UIApplication sharedApplication].applicationIconBadgeNumber >0 && userInfo == nil){ 
     //Do like you did in didRecieveRemoteNotification method 
    } 
    return YES; 
} 
+0

實際上,你要檢查'用戶信息! = nil'。我還建議使用'UIApplicationLaunchOptionsRemoteNotificationKey'常數而不是容易出錯的靜態字符串。 – keeshux 2014-08-30 09:48:02

+0

我同意恆定,但不同意userInfo check.In問題是說,他點擊了圖標,當點擊圖標userInfo是零時。如果點擊了推送通知的提醒,那麼userInfo不是零。 – Foriger 2014-08-30 10:05:26

+0

不是。他說'didReceiveRemoteNotification'沒有被調用,這就是爲什麼你應該在'didFinishLaunchingWithOptions'中搜索通知的原因,正如你指出的那樣。無論如何你將如何處理零通知? – keeshux 2014-08-30 10:56:20

0

在swift2:

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) { 
 
    }

相關問題