[英]iOS Silent Push Notification does not receive when app in killed state
[英]iOS doesn't receive Push notification when the app is being killed
我在堆棧溢出中發現了類似的問題,但是沒有一個問題可以解決。
我正在使用Firebase Cloud Messaging在我的應用程序中發送推送通知。 我將收到的消息存儲在本地數據庫中。 當我的應用處於活動狀態或在后台時,我的應用能夠接收通知(調用正確的代理方法),但是如果應用被強制退出或不在內存中,則設備也將接收通知並坐在通知中心但是當圖標啟動應用程序時,不會調用任何委托方法。 如果用戶在通知中心中單擊“消息”,則將啟動該應用程序,但只會接收到所單擊的消息,而不會接收到所有消息(在收到多個通知的情況下)。 根據Apple的說法- 如果用戶強制退出應用程序,則系統不會自動啟動您的應用程序。 在這種情況下,用戶必須重新啟動您的應用程序或重新啟動設備,然后系統才會嘗試再次自動啟動您的應用程序 。
但是,即使用戶啟動了該應用程序,它仍然不會收到已接收並位於通知中心的通知。
以下是該應用程序遵循的要點:
{
aps = {
alert = {
body = "Push Notification Test Message";
title = Push Notification;
};
badge = 1;
"content-available" = 1;
sound = default;
};
"gcm.message_id" = "0:1499340350307980%361a2e5b361a2e5b";
m = "Push Notification Test Message";
tag = m;
}
如果該應用被強制退出或未在內存中,則您的應用將不會收到靜默通知(即Content-available設置為1)。 在上述條件下僅接收推送通知。
如果用戶在通知中心中單擊“消息”,則會啟動應用程序,並且只有單擊該消息的消息才會在委托方法中接收。您無法訪問通知托盤中的所有消息。
您的應用不應依賴於推送通知的傳遞。 正如您所發現的,不能保證推送通知的傳遞。
即使您的應用沒有終止,您也可能不會收到所有通知; 例如,如果設備處於飛行模式,並且發送了多個通知,則當設備重新聯機時,只會傳遞最后一個通知。
您的應用在啟動或收到通知時應與服務器核對是否有新消息,以“趕上”。
您還可以考慮在靜默通知中包括消息有效負載。 如果您的應用程序終止以提示他們打開您的應用程序,它將顯示給用戶。
如果應用未運行,則無法獲取該應用的推送通知。 這是限制。 您只能獲取和清除本地通知。 因此,解決問題的另一種方法是在發送通知時將其保存在后端。 然后啟動應用程序后,您可以從服務器獲取通知列表,並將其與id匹配。 您可以在通知播放負載中發送所需的任何參數。
當您通過點擊任何通知打開應用程序時,您需要處理用於推送通知的方法。 一旦您點擊通知應用程序,它將喚醒並午餐。
在didFinishLaunchingWithOptions中,您需要輸入以下條件:
if (launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]) {
NSMutableDictionary *dic = [[NSMutableDictionary alloc] initWithDictionary:[launchOptions valueForKey:UIApplicationLaunchOptionsRemoteNotificationKey]];
}
當點擊通知時,它也調用以下方法:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler
{
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.