Ios APN后台刷新,设置AppDelegate.m

Ios APN后台刷新,设置AppDelegate.m,ios,objective-c,apple-push-notifications,Ios,Objective C,Apple Push Notifications,我想在收到推送通知时触发数据提取。我知道这是在向用户显示通知之前发生的。现在我的AppDelegate中有这个。m: - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { if ( application.applicationState == UIApplicationStateInactive || application.ap

我想在收到推送通知时触发数据提取。我知道这是在向用户显示通知之前发生的。现在我的AppDelegate中有这个。m:

- (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];

    }


}
这将根据应用程序在前台打开时是否收到通知或应用程序是否从推送通知打开来控制应用程序的操作。要添加对后台刷新的支持,是否将此方法更改为?:

void didReceiveRemoteNotification (UIApplication application, NSDictionary userInfo, Action<UIBackgroundFetchResult> completionHandler)
{
  if([content-available]) {
    // fetch content methods here
    completionHandler (UIBackgroundFetchResult.NewData);
  }

 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];

        }
}
void didReceiveMemoteNotification(UIApplication应用程序、NSDictionary用户信息、Action completionHandler)
{
如果([内容可用]){
//在此处获取内容方法
completionHandler(UIBackgroundFetchResult.NewData);
}
if(application.applicationState==UIApplicationStateInactive | | application.applicationState==UIApplicationStateBackground)
{
//恢复推送
[[NSNotificationCenter defaultCenter]postNotificationName:@“ApprestorUsh”对象:nil];
}
否则{
//当应用程序打开时推送
self.pushString=[[userInfo objectForKey:@“aps”]objectForKey:@“alert”];
[[NSNotificationCenter defaultCenter]postNotificationName:@“appOpenPush”对象:nil];
}
}

这是否适用于在显示推送之前获取数据,然后处理从推送打开应用程序的操作,就像之前一样,还是有两种不同的方法,一种用于后台刷新,另一种用于处理如何打开推送?任何指点都将不胜感激。谢谢

首先,您的第二个代码块是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);

    }
}
如果要在通知对象(在
aps
对象内)中发送
可用内容
=1,则通知将不会显示给用户。此参数告诉操作系统,您不想向用户显示新信息,而只想从服务器获取新数据


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

您可以在APN中添加推送消息,不是吗?i、 e您可以让content available=1,并在提取后向手机发送消息“you got a push”?后台刷新后,我如何让它发布我的一个通知,即[NSNotificationCenter defaultCenter]postNotificationName:@“appRestorePush”对象:nil];?当然但如果“可用内容”设置为1,并且您的应用程序处于后台/未运行,则您将无法执行任何UI工作,但您可以(未测试)显示本地通知。