2

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

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

4

3 回答 3

3

您可以使用content-available推送通知数据中的密钥和application:didReceiveRemoteNotification:fetchCompletionHandler:. 对于您的用例,它可能被认为是一种 hack,如果您尝试过多地使用它,您将受到 Apple 系统的限制。

于 2013-10-13T16:13:09.227 回答
3

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

于 2013-10-13T16:10:13.007 回答
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);   
于 2013-10-13T17:55:37.793 回答