2015-07-19 56 views
0

是否有可能在iOS中從服務器獲取推送,然後運行方法而不顯示通知?例如,檢查現在是否爲配置的時間,以及是否顯示通知,以及是否不向服務器發送不可用的消息。iOS:推送運行方法而不顯示通知

回答

0

是的,這是可能的

  • 實施didReceiveRemoteNotification:fetchCompletionHandler

  • 確保爲遠程註冊通知,請參閱documentation here

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    {  
        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)]; 
    
        return YES; 
    } 
    
  • 還要確保編輯Info.plist並檢查「啓用背景模式」和‘遠程通知’複選框:

    enter image description here

  • 此外,還需要添加"content-available":1到您的推送通知的有效載荷,否則,如果它在後臺應用程序將不會被喚醒(見documentation here) :

    對於推送通知來觸發下載操作時, 通知的有效載荷必須包括其設置爲1 價值的內容可用密鑰。當該密鑰存在時,系統將 背景中的應用程序(或將其啓動到後臺)並調用應用程序 委託人的 應用程序:didReceiveRemoteNotification:fetchCompletionHandler: 方法。你的實現該方法的應該下載 相關內容並將其集成到你的應用程序

    所以有效載荷至少應該是這樣的:

    { 
        "aps" = { 
         "content-available" : 1, 
         "sound" : "" 
        } 
    } 
    

剛剛離開的聲音特性空和忽略警報/ text屬性和通知將沉默

不幸的是,應用程序將不會被喚醒,如果它沒有運行在所有(強制退出),請參閱this answer

1

是的,你要尋找的是silent push notification s其中獲得了introduced in iOS 7。看看docs regarding push notifications哪個狀態:

aps字典也可以包含content-available屬性。 content-available屬性的值爲1可讓遠程通知充當「無聲」通知。當無聲通知到達時,iOS會在後臺喚醒您的應用程序,以便您可以從服務器獲取新數據或進行背景信息處理。用戶不會被告知由靜默通知產生的新信息或更改的信息,但他們可以在下次打開您的應用程序時瞭解它。

content-available - number - 提供值爲1的這個關鍵,以表明有新內容可用。包括這個鍵和值意味着當你的應用程序在後臺啓動或恢復時,調用application:didReceiveRemoteNotification:fetchCompletionHandler:。 (書報亭應用,保證能夠接收至少一個推,每24小時的窗口此鍵。)

然後,您可以反應因此,最終竟引發另一個通知,如果你覺得用戶需要被告知某事(儘管對此不是100%肯定)。

更深入一點的信息和代碼可以找到in this objc.io post

+0

我不能讓它工作,當應用程序處於非活動狀態(未激活),它的工作原理? – RCB

+0

@RCB有你能在'背景Modes'了'背景fetch'和'遠程Notifications'? – luk2302

+0

@RCB [the docs](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplicationDelegate_Protocol/index.html#//apple_ref/occ/intfm/UIApplicationDelegate/application:didReceiveRemoteNotification:fetchCompletionHandler: )提供更多的信息,你需要做什麼以及在什麼情況下工作: – luk2302