对我来说,@Ajay的答案不正确(抱歉)。
使用推送通知,您可以在以下三个用户选项之间进行选择:文本消息(警报),声音和徽章。每个推送通知可以包含其中一个或多个选项,因此您可以发送带有声音和徽章的通知,但没有消息,在这种情况下,不会显示任何警报。
请注意,您甚至可以将隐藏选项传递到私有字典中的应用程序中。
使用content-available属性:
aps字典还可以包含content-available属性。将值设置为1的content-available属性使远程通知作为“静默”通知。当静默通知到达时,iOS会在后台唤醒您的应用程序,以便您可以从服务器获取新数据或进行后台信息处理。用户不会被告知由静默通知导致的新的或更改的信息,但他们可以在下一次打开您的应用程序时发现它。
为什么不呢!
您可以发送一个隐藏的推送通知,而不会有任何警报、横幅或声音。
没有文本:
$payload['aps'] = array('badge'=> 0, 'sound' => 'default');
没有文字和声音
$payload['aps'] = array('badge'=> 0);
在您的iOS端,您可以设置此条件:
//Receiving a Push Notification
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
NSMutableDictionary *pushNotiFicationDict = [userInfo objectForKey:@"aps"];
NSLog(@":%@", pushNotiFicationDict);
if([pushNotiFicationDict objectForKey:@"alert"])
{
// when push notification has text
UIAlertView * alert = [[UIAlertView alloc] initWithTitle:[NSString stringWithFormat:@"MESSAGE" message:[pushNotiFicationDict objectForKey:@"alert"]
delegate:nil
cancelButtonTitle:@"ok"
otherButtonTitles:nil];
[alert show];
}
else
{
// when push notification does not have text
}
}
我同意@MacTeo的观点。您可以通过包含一个属性(声音、警报(或消息)和徽章)的有效负载来传递推送通知。
根据您的要求,在用户打开和关闭应用程序(前台和后台)时在服务器上跟踪其设备。如果发生了什么,那么您可以检查设备在服务器上的状态。然后,您可以根据设备的最后报告状态决定如何构建通知(如果需要的话)。
只是随便想想:
如果您愿意(但这不是APNs设计的目的),您可以传递一个仅带有徽章计数= 0的推送通知,并传递一些额外的字典数据。这不会提醒用户,如果应用程序在前台,则可以在应用程序中处理它。
你可以在应用程序中处理通知并将数据存储在数据库中,或者在应用程序未运行时显示消息,但不能处理。