在iOS 7中,我可以使用Apple推送通知服务让我的应用程序在不通知用户的情况下执行某些操作吗

在iOS 7中,我可以使用Apple推送通知服务让我的应用程序在不通知用户的情况下执行某些操作吗,ios,apple-push-notifications,background-process,Ios,Apple Push Notifications,Background Process,我的算法希望以这种方式工作- 如果在我的服务器上发生了一些期望的事件,那么我希望向我的应用程序的每个用户(前台或后台)发送少量数据。但是,我不希望通知用户,而是希望我的应用程序在数据和服务器上进行一些计算。 请记住,不得通知用户。您可以在iOS 7上执行此操作。请参阅。上的“定期获取少量内容”部分。您可以使用推送通知数据和应用程序中的可用内容键:didReceiveMemotentification:fetchCompletionHandler:。对于您的用例来说,它可能被认为是一种黑客行为,如

我的算法希望以这种方式工作-

如果在我的服务器上发生了一些期望的事件,那么我希望向我的应用程序的每个用户(前台或后台)发送少量数据。但是,我不希望通知用户,而是希望我的应用程序在数据和服务器上进行一些计算。
请记住,不得通知用户。

您可以在iOS 7上执行此操作。请参阅。

上的“定期获取少量内容”部分。您可以使用推送通知数据和
应用程序中的
可用内容
键:didReceiveMemotentification:fetchCompletionHandler:
。对于您的用例来说,它可能被认为是一种黑客行为,如果您尝试过多地使用它,您将受到Apple系统的限制。

您可以发送“空”推送通知(无文本、无声音、无图标)。这类通知 允许并可用于与服务器同步(以避免应用程序端昂贵的重复轮询)

如果你的应用程序没有运行,那么这样的通知将不会出现在springboard通知中

如果它正在运行,那么它将收到通知-您只需确保不显示空的通知(如果您还使用实际内容的通知)。您的iOS代码看起来有点像:

- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo
{
    NSString *message = nil;
    id alert = [userInfo objectForKey:@"aps"];

    if ([alert isKindOfClass:[NSString class]])
    {
        message = alert;
    }
    else if ([alert isKindOfClass:[NSDictionary class]])
    {
        message = [alert objectForKey:@"alert"];
    }

    if (message)
    {
        if (![message isEqualToString:@""])
        {
            UIAlertView *alertView = [[UIAlertView alloc]
                                      initWithTitle: @"notification"
                                      message: message
                                      delegate: nil
                                      cancelButtonTitle:@"OK"
                                      otherButtonTitles:nil];
            [alertView show];
        }
    }
    else
    {
      //this was an empty notification - here you can enqueue
      //your server-synchronization routine - asynchronously if possible
    }
}
如果你不打算使用任何“真正的”通知,你甚至不必费心解码消息

如果使用消息生成代码,代码如下所示:

$message = new ApnsPHP_Message($device_apns_token);
$message->setText('');
$message->setSound('');
$message->setExpiry(3600);
$push->add($message);   

你的回答很好。但是,不幸的是,我的应用程序将无法运行。就我所知,是否仍有可能在没有用户干扰的情况下触发应用程序委托的任何方法。唯一的办法就是按照Arkadiusz的建议,让你的应用程序在后台运行(声明了“后台获取”后台任务)。谢谢你的纠正。我错选了Arkadiusz的答案。实际上这是一个错误的答案。我选错了答案,因为我错了。只有此功能才能将控制权交给应用程序,即使应用程序未在用户未注意的情况下运行\