APN后台刷新,设置AppDelegate.m

时间:2015-05-07 14:48:17

标签: ios objective-c apple-push-notifications

我希望在收到推送通知时触发数据提取。我知道这是在向用户显示通知之前发生的。现在我在我的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];

    }


}

这是否适用于在显示推送之前获取数据,然后处理如前所述的推送打开应用程序,还是有两个单独的方法,一个用于后台刷新,另一个用于处理推送的打开方式?任何指针都会非常感激。谢谢!

1 个答案:

答案 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,则通知将不会显示给用户。此参数告诉操作系统您不希望向用户显示新信息,而只是从服务器获取新数据。

如果您不能发送此参数,则操作系统会将其视为常规通知,并且仅在用户点击显示的通知后才会调用上述方法(除非应用处于活动状态,而不是通知不会被显示,并且将立即调用此方法。