簡體   English   中英

當我收到靜默推送通知時,iOS 會喚醒我的應用程序嗎?(當應用程序未處於運行狀態時)

[英]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)

來自蘋果論壇: https//devforums.apple.com/message/873265#873265

按照以下步驟。

  1. 應用程序被殺后,聽到無聲推送。

  2. 當推送到(在didReceiveRemoteNotification中)時,請進行webservice調用

  3. 當您從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM