且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Apple 的静默推送通知可以在后台启动我的应用程序吗?

更新时间:2022-10-26 21:24:03

当设备收到设置了 content-available 的推送消息时,Apple 在后台启动您的应用.用户不会意识到这一点.来自文档:>

content-available:为该键提供值 1 以指示新内容可用.包含这个键和值意味着当你的应用在后台启动或恢复时,-application:didReceiveRemoteNotification:fetchCompletionHandler:被调用.

同样来自文档

didReceiveRemoteNotification:但是,如果用户已经强行退出了.在这种情况下,用户必须重新启动您的应用或在系统尝试启动您的应用程序之前重新启动设备再次自动.

According to Apple's documentation I can register for silent notification by adding "content-available" = 1 key-value in aps payload dictionary. I want my app to wake up in background when a silent notification arrives. I set App downloads content in response to push notifications value to Required background modes in my info.plist

This is my payload dictionary

{"aps":
      {
       "alert":"Notification alert","badge":1,"sound":"default","content-available":1
      }
}

I am getting callbacks in -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler while my app is in background. But my question is can we get callback to this or any other method when our application is in killed state?

I don't want my app user to see the notification but I want my app to perform certain task by waking it up in background through silent notifications.

Any suggestions would be appreciated.

When the device receives a push message with content-available set, your app gets launched in the background by Apple. Users won't be aware of it. From the docs:

content-available: Provide this key with a value of 1 to indicate that new content is available. Including this key and value means that when your app is launched in the background or resumed, -application:didReceiveRemoteNotification:fetchCompletionHandler: is called.

Also from docs

didReceiveRemoteNotification: However, the system does not automatically launch your app if the user has force-quit it. In that situation, the user must relaunch your app or restart the device before the system attempts to launch your app automatically again.