2017-03-01 125 views
0

當發送後臺推送與"content-available": "1",到應用程序被用戶殺害,應用程序未啓動到後臺模式和application:didReceiveRemoteNotification:fetchCompletionHandler:不被稱爲Apple doc say當應用程序死亡時收到的iOS無聲通知

使用此方法處理傳入的應用程序的遠程通知。 [...]另外,如果啓用了遠程通知後臺模式,系統將啓動您的應用程序(或將其從暫停狀態喚醒),並在遠程通知到達時將其置於後臺狀態。 但是,如果用戶強制退出,系統不會自動啓動您的應用程序。

我的問題是:是否有任何方式的下一次用戶啓動應用程序訪問此無聲推送有效載荷?

我嘗試使用didFinishLaunchingWithOptions方法的launchOptions,但它們不包含推送有效負載。

NSDictionary *userInfo = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]; 

我使用的情況是,我只依靠推式信道接收數據的應用程序,但應用程序不能他們。

+0

依靠推送可能是一個壞主意,如果用戶拒絕推送通知的權限會怎麼樣?或隨後關閉它們? –

+0

用戶權限不會影響靜默推送。即使用戶關閉此推送**通知**,該應用程序仍然可以接收無聲有效載荷 – Jan

+0

啊。然後我今天學到了一些新東西! –

回答

-1

望着文檔,好像你應該實現此方法:

可選FUNC應用(_應用:UIApplication的, didReceiveRemoteNotification用戶信息:AnyHashable:任何], fetchCompletionHandler completionHandler:@escaping(UIBackgroundFetchResult) - > Void)

在該方法中,編寫代碼以存儲有效內容(userInfo)。也許暫時將其存儲在userDefaults中。然後,當應用程序啓動時,檢查有效負載是否可用。

+0

我確實實現了這個方法,但在應用程序被終止時不會調用它。我引用的文檔是文檔(如果此方法爲 – Jan

+0

)而且您已啓用「推送通知」選項,並在選擇Xcode項目時選擇了位於「功能」選項卡中的「背景獲取」和「遠程通知」複選框? –

+0

是的,我做到了。 「正常」背景無聲通知正常工作。我只是問是否有辦法在下次應用程序啓動時獲取有效載荷,以防用戶殺死該應用程序 – Jan

0

您可以使用VoIP Push消息,在這裏看到:

Voice Over IP (VoIP) Best Practices

有許多優點,使用PushKit接收VoIP的推動:

  • [...]
  • 如果收到VoIP推送時沒有運行,您的應用會自動重新啓動。
  • [...]

要知道,你的應用程序必須啓用具有VoIP功能的背景模式,如果使用不當,這可能是應用程序商店審批的問題。

+0

是的,我正在研究這種VoIP推送。這不僅僅適用於真正使用VoIP的應用嗎? – Jan

+0

我相信我不能使用PushKit,如果我的應用根本不提供VoIP功能,我可以嗎? – Jan

相關問題