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

时间:2013-10-13 15:56:03

标签: ios apple-push-notifications background-process

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

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

3 个答案:

答案 0 :(得分:3)

您可以在iOS 7上执行此操作。请参阅iOS App Programming Guide上的“定期获取少量内容”部分。

答案 1 :(得分:3)

您可以使用推送通知数据中的content-available键和application:didReceiveRemoteNotification:fetchCompletionHandler:。对于你的用例来说,它可能被认为是一个黑客攻击,如果你试图使用它太多,你将受到苹果系统的限制。

答案 2 :(得分:1)

您可以发送“空”推送通知(没有文字,没有声音,没有图标)。这种通知 允许并且可以用于与服务器同步(以避免从应用程序端进行昂贵的重复轮询)。

如果您的应用未运行,则跳板通知中不会显示此类通知。

如果它正在运行,那么它将收到通知 - 您只需要确保不显示空的通知(如果您还使用具有实际内容的通知)。您的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
    }
}

如果您不打算使用任何“真实”通知,您甚至不必费心解码消息。

如果您使用ApnsPHP,您的邮件生成代码将如下所示:

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