iOS推送通知 – 在没有提醒的情况下更新徽章?

有没有办法更新徽章中的号码而不显示提醒或打开应用程序?

我正在编写一个应该始终在图标徽章中显示当前未读邮件数的应用程序,但我希望这样做而不向用户显示任何警报。

我正在为iOS 5.0+开发。

编辑:更清楚的是, 当应用程序未运行时 ,我正在询问一种方法。 我希望服务器在没有显示警报的情况下推送新的徽章编号..这可能吗?

你能行的。 可以在没有警报的情况下发送推送通知。 您甚至可以将您的应用程序注册到徽章通知,在这种情况下,提供商服务器甚至无法发送警报或声音。

通知有效负载

每个推送通知都带有一个有效载荷。 有效负载指定如何警告用户等待下载到客户端应用程序的数据。 通知有效负载允许的最大大小为256字节; Apple推送通知服务拒绝任何超出此限制的通知。 请记住,通知的发送是“尽力而为”,并不能保证。

对于每个通知,提供者必须编写严格遵守RFC 4627的JSON字典对象。此字典必须包含由密钥aps标识的另一个字典。 aps字典包含一个或多个指定以下操作的属性:

要显示给用户的警报消息

用于标记应用程序图标的编号

一个声音播放

请注意,它表示one or more of the properties 。 alert属性是可选的。 您甚至可以使用空的aps字典发送通知(即仅发送自定义属性)。

示例5.以下示例显示了一个空的aps字典; 因为缺少徽章属性,将删除应用程序图标上显示的任何当前徽章编号。 acme2定制属性是一个包含两个整数的数组。

 { "aps" : { }, "acme2" : [ 5, 8 ] } 

唯一警告用户将看到警告,询问他/她是否允许推送通知。 该警报仅在安装后第一次启动应用程序时显示。

在此示例中,您注册到非警报通知(仅限徽章和声音):

 Listing 2-3 Registering for remote notifications - (void)applicationDidFinishLaunching:(UIApplication *)app { // other setup tasks here.... [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)]; } // Delegation methods - (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken { const void *devTokenBytes = [devToken bytes]; self.registered = YES; [self sendProviderDeviceToken:devTokenBytes]; // custom method } - (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err { NSLog(@"Error in registration. Error: %@", err); } 

所有引用均来自Apple Local和Push通知编程指南。

您可以使用

 [UIApplication sharedApplication].applicationIconBadgeNumber = aNumber; 
 -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0]; } 

使用这种方法….这将有助于你。

您应该使用applicationIconBadgeNumber来本地处理您的应用程序徽章编号

 [UIApplication sharedApplication].applicationIconBadgeNumber = number_of_notifications; 

就远程通知添加徽章计数器而言,我认为没有警报是可能的。 您应该阅读有关APN服务的信息 ,在您的情况下,您可以注册UIRemoteNotificationTypeBadge您应该阅读本地和推送通知编程指南