15

有没有办法在不显示警报或打开应用程序的情况下更新徽章中的数字?

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

我正在为 iOS 5.0+ 开发。

编辑:为了更清楚,我在询问一种在应用程序未运行时执行此操作的方法。我希望服务器在不显示警报的情况下推送新的徽章编号。这可能吗?

4

4 回答 4

27

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

通知负载

每个推送通知都带有一个有效负载。有效负载指定如何提醒用户注意等待下载到客户端应用程序的数据。通知有效负载允许的最大大小为 256 字节;Apple Push Notification Service 拒绝任何超过此限制的通知。请记住,通知的传递是“尽力而为”,不能保证。

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

向用户显示的警报消息

用于标记应用程序图标的数字

播放的声音

请注意,它说one or more of the properties. 警报属​​性是可选的。您甚至可以发送带有空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 本地和推送通知编程指南。

于 2013-03-05T15:31:20.717 回答
2

您应该applicationIconBadgeNumber用于在本地处理您的应用徽章编号

[UIApplication sharedApplication].applicationIconBadgeNumber = number_of_notifications;

从远程通知中添加徽章计数器,我认为没有警报是不可能的。你应该阅读APN Service,在你的情况下你可能会注册UIRemoteNotificationTypeBadge你应该阅读Local & Push Notification Programming guide

于 2013-03-05T14:04:01.740 回答
1

您可以使用

[UIApplication sharedApplication].applicationIconBadgeNumber = aNumber;
于 2013-03-05T14:03:11.787 回答
1
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

{

    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
}

使用这种方法....这将帮助你。

于 2013-03-05T14:06:44.257 回答