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

Ran*_*han 14 iphone push-notification apple-push-notifications ipad ios

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

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

我正在为iOS 5.0+开发.

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

Era*_*ran 25

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

通知有效负载

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

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

要显示给用户的警报消息

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

一个声音播放

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

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

{

    "aps" : {

    },

    "acme2" : [ 5,  8 ]

}
Run Code Online (Sandbox Code Playgroud)

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

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

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);

}
Run Code Online (Sandbox Code Playgroud)

所有引用均来自Apple Local and Push notifications编程指南.