关于推送通知的四个问题。
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
UIApplicationState state = [application applicationState];
if (state == UIApplicationStateActive) {
//app is in foreground I can fetch
} else {
//App is in background, can I still fetch the server? Is there a time limit?
}
}
使用上面的代码,当应用程序在后台时,我还可以获取服务器吗?有时间限制吗?如果答案是:不,我无法在后台获取服务器,有替代方案吗?
除了在应用程序在后台时触发某些方法在30秒内运行时,使用静默通知还有其他好处吗?
如果使用静默通知并且应用程序位于前台,是否仍会调用以下方法?
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
completionHandler(UIBackgroundFetchResultNewData);
}
在有效负载中"content-available" : 1
调用Q3中的方法(上图)?或者还有其他什么可以在Q3中触发该方法?
答案 0 :(得分:0)
是的,当应用程序处于后台时,您仍然可以获取服务器。对于许多应用程序,背景状态只是暂停应用程序暂停的方式。
这不是使用静默通知的主要好处,请参阅此link。
是应用程序:didReceiveRemoteNotification:fetchCompletionHandler:,无论应用程序状态如何都会被调用。如果应用程序暂停或未运行,则系统会唤醒或启动您的应用并将其置于后台在调用方法之前运行状态。 此方法旨在向用户显示更新的内容。调用此方法时,您的应用程序最多有30秒的挂钟时间来执行下载操作并调用指定的完成处理程序块。如果未及时调用处理程序,您的应用程序将被暂停。
是的,它调用应用程序:didReceiveRemoteNotification:fetchCompletionHandler:,如果您希望推送通知在后台唤醒您的应用程序,则需要启用远程通知功能,然后实现代码处理该远程通知(通过在应用程序中检测到它:didFinishLaunchingWithOptions:如果您的应用尚未运行,或者通过在案例中实施应用程序:didReceiveRemoteNotification:fetchCompletionHandler:你的应用已经在运行了)。为了响应远程通知,您将在内部触发提取代码。当然,您还需要注册远程通知并将令牌发送到您的服务器。请参阅此discussion