[英]iOS Silent Push Notification does not receive when app in killed state
[英]Will iOS awake my app when i receive silent push notification?(When app is not in running state)
更新問題:
要求是; 一旦我收到無提示通知,我想運行一個網絡服務並在通知欄中顯示一個班輪。 如果應用程序也被殺死,它必須工作。 任何解決方法?
我正在嘗試以下方法。
我是 iOS 的新手,我在無聲推送通知方面苦苦掙扎,在谷歌上搜索了很多,但被卡住了。 當應用程序未啟動時(即當應用程序從應用程序切換器中刪除時),當我收到靜默推送通知時,iOS 會喚醒我的應用程序。
我的薪水是
{
aps: {
content-available: 1,
sound: ""
}
}
.
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler{
int CA=[[[userInfo valueForKey:@"aps"] valueForKey:@"content-available"] intValue];
if (CA==1) {
my action...
}
completionHandler(UIBackgroundFetchResultNewData);
}
當應用程序處於前台和后台時調用此方法並正常工作。當應用程序未處於運行狀態時無法喚醒我的應用程序(即應用程序未從應用程序切換器啟動或終止)。
如果應用程序已從App Switcher中刪除,iOS將不會喚醒您的應用程序,因為用戶明確要求關閉您的應用程序。
如果用戶至少打開一次您的應用程序,並且不從App Switcher中刪除它,iOS將喚醒您的應用程序
我們在服務器端處理此問題的方法是:如果用戶的應用程序在我們發送靜默通知后的一分鍾內沒有連接,(您可以根據需要進行設置),我們會發送另一個非靜默推送通知來提醒用戶。 由於App(未被用戶關閉)應該自動獲取數據,因此應該花費不到一分鍾。
但就此而言,您需要一個比簡單發送靜默推送更復雜的服務器代碼。
編輯:(對這個問題進行投票表明我已經過時了)
這個答案不再是真的......你現在可以使用PushKit喚醒你的應用程序做一些小事(比如下載小塊數據來更新內容),即使App已經從App Switcher中刪除了。
請查看以下內容: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplicationDelegate_Protocol/index.html#//apple_ref/occ/intfm/UIApplicationDelegate/application: didReceiveRemoteNotification: fetchCompletionHandler:
使用此方法處理應用程序的傳入遠程通知。 與
application:didReceiveRemoteNotification:
方法不同,只有當您的應用程序在前台運行時才會調用該方法,系統會在您的應用程序在前台或后台運行時調用此方法。 此外, 如果您啟用了遠程通知后台模式,系統將啟動您的應用程序(或將其從暫停狀態喚醒),並在遠程通知到達時將其置於后台狀態。 但是,如果用戶強行退出,系統不會自動啟動您的應用。 在這種情況下,用戶必須重新啟動應用程序或重新啟動設備,然后系統才會再次嘗試自動啟動應用程序。
這清楚地表明,使用新的后台推送功能,只有當您的應用程序被暫停時,您才可以喚醒應用程序。如果用戶強行終止,則不會 。
到目前為止,我已經測試了用戶終止應用程序(從應用程序切換器向上掃描),由於靜音推送標記(內容可用)或后台提取,您將沒有后台執行時間。
這個:
另外請記住,如果你從應用程序切換器中刪除你的應用程序(即向上滑動以殺死應用程序),那么無論推送通知或后台獲取,操作系統都不會重新啟動應用程序。 在這種情況下,用戶必須手動重新啟動應用程序一次,然后從該點開始,將調用后台活動。 -pmarcos(Apple worker)
按照以下步驟。
應用程序被殺后,聽到無聲推送。
當推送到(在didReceiveRemoteNotification中)時,請進行webservice調用
當您從webservice獲取數據時,發送LOCAL PUSH (帶有來自webservice的文本)
希望這是你想要的。
如果您還有其他需要,請告訴我。
您可以獲得PUSH通知並使用它。 我知道一點點做這個...打開AppDelegate.m並找到或放置此方法- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
。 在那之后,像我一樣加入這個方法代碼:
NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if (userInfo) {
NSDictionary *apsInfo = [userInfo objectForKey:@"aps"];
NSString *alertType = [apsInfo objectForKey:@"type"]; //my own param in PUSH-notification
globalPushType = alertType; //global variable for working with it in some ViewControllers after app's load
}
我知道,這對很多人有幫助。 =)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.