我希望在收到推送通知时触发数据提取。我知道这是在向用户显示通知之前发生的。现在我在我的AppDelegate.m中有这个:
NativeApplication.nativeApplication.exit();
这可以控制应用程序执行的操作,具体取决于应用程序在前台打开时是否收到通知,或者应用程序是否通过推送通知打开。要添加对后台刷新的支持,我只需将此方法更改为?:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
if ( application.applicationState == UIApplicationStateInactive || application.applicationState == UIApplicationStateBackground )
{
//restore push
[[NSNotificationCenter defaultCenter] postNotificationName:@"appRestorePush" object:nil];
}
else {
//push for when the app is open
self.pushString = [[userInfo objectForKey:@"aps"] objectForKey:@"alert"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"appOpenPush" object:nil];
}
}
这是否适用于在显示推送之前获取数据,然后处理如前所述的推送打开应用程序,还是有两个单独的方法,一个用于后台刷新,另一个用于处理推送的打开方式?任何指针都会非常感激。谢谢!
答案 0 :(得分:2)
首先,你的第二个代码块是swift-Objective-C混合。所以我假设您使用Objective-C开发。
因此,相关方法如下:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler {
if (application.applicationState == UIApplicationStateInactive) {
// Application is inactive, fetch new data and call the completion handler.
completionHandler(UIBackgroundFetchResultNewData);
} else if (application.applicationState == UIApplicationStateBackground) {
// Application is in background, fetch new data and call the completion handler.
completionHandler(UIBackgroundFetchResultNewData);
} else {
// Application is active, so to what you need
completionHandler(UIBackgroundFetchResultNewData);
}
}
如果您在通知对象(content-available
对象内)中发送aps
= 1,则通知将不会显示给用户。此参数告诉操作系统您不希望向用户显示新信息,而只是从服务器获取新数据。
如果您不能发送此参数,则操作系统会将其视为常规通知,并且仅在用户点击显示的通知后才会调用上述方法(除非应用处于活动状态,而不是通知不会被显示,并且将立即调用此方法。