我的算法希望以这种方式工作-
如果在我的服务器上发生了一些期望的事件,那么我希望向我的应用程序(前台或后台)的每个用户发送少量数据。但是,我希望我的应用程序对数据进行一些计算并确认服务器,而不是通知用户。请记住,不得通知用户。
我的算法希望以这种方式工作-
如果在我的服务器上发生了一些期望的事件,那么我希望向我的应用程序(前台或后台)的每个用户发送少量数据。但是,我希望我的应用程序对数据进行一些计算并确认服务器,而不是通知用户。请记住,不得通知用户。
您可以使用content-available
推送通知数据中的密钥和application:didReceiveRemoteNotification:fetchCompletionHandler:
. 对于您的用例,它可能被认为是一种 hack,如果您尝试过多地使用它,您将受到 Apple 系统的限制。
您可以在 iOS 7 上执行此操作。请参阅iOS App Programming Guide中的“定期获取少量内容”部分。
您可以发送“空”推送通知(无文字、无声音、无图标)。这种通知是允许的,并且可以用于与服务器同步(以避免来自应用程序端的昂贵的重复轮询)。
如果您的应用程序未运行,则此类通知将不会显示在跳板通知中。
如果它正在运行,那么它将收到通知 - 您只需确保不显示空的(如果您还使用具有实际内容的通知)。你的 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);