应用程序关闭时如何通过推送更改应用程序徽章

时间:2012-05-01 13:25:58

标签: iphone xcode push-notification push badge

我正在尝试更改我正在开发的应用程序的徽章。关闭时,遗憾的是,我只是在不更改徽章的情况下通知了一条消息。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

[application registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeBadge];

NSDictionary* userInfo = [launchOptions valueForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"];
NSDictionary *apsInfo = [userInfo objectForKey:@"aps"];

NSInteger badge = [[apsInfo objectForKey:@"badge"] integerValue];
if( [apsInfo objectForKey:@"alert"] != NULL)
{
    application.applicationIconBadgeNumber = badge;
}

但这并没有改变任何事情。我没有找到任何解决方案。在推送通知到达时调用了什么方法并且应用程序已关闭?我还补充道:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

#if !TARGET_IPHONE_SIMULATOR

NSLog(@"remote notification: %@",[userInfo description]);
NSDictionary *apsInfo = [userInfo objectForKey:@"aps"];

NSString *alert = [apsInfo objectForKey:@"alert"];
NSLog(@"Received Push Alert: %@", alert);

NSString *badge = [apsInfo objectForKey:@"badge"];
NSLog(@"Received Push Badge: %@", badge);
application.applicationIconBadgeNumber = [[apsInfo objectForKey:@"badge"] integerValue];

#endif
}

但没有......

你能帮助我吗?

4 个答案:

答案 0 :(得分:6)

徽章图标编号由作为推送消息接收的有效负载中的徽章属性控制。在应用程序变为活动状态之前,应用程序本身无法播放显示的数字。将'badge'属性设置为任何整数值(注意:它不应该是字符串,不应该包含在“”中)执行所需的操作。接收通知时,操作系统会查找“徽章”的值,并立即将其设置在应用徽章图标上。当应用程序未激活时,会发生这一切。为了确保它根据应用程序中的内容递增或递减,应用程序应使用更新的徽章编号向服务器发送消息。

在活动状态下,应用程序负责处理远程通知并更改徽章图标。

注意:'badge'属性包含在有效内容中收到的'aps'字典中。我的有效载荷如下:      aps = {         alert =“推送通知!”;         badge = 9;         声音=默认;     }

答案 1 :(得分:2)

你应该更好地定义你想要做什么,因为我不清楚你是在谈论远程或本地通知,还是你想要得到什么以及你得到了什么。

无论如何,关于远程通知(APNS),如果您希望在关闭应用程序的情况下设置徽章,请考虑将徽章设置为有效负载的一部分。除非用户手动打开应用程序(从NotificationCenter或Dock中),否则不会调用您的应用程序。

另一方面,当您运行该应用程序时,您将收到对

的调用
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
在AppDelegate中

,然后您可以使用

设置徽章
application.applicationIconBadgeNumber = badge;

答案 2 :(得分:0)

看看这个,也许是设置问题!: application Icon Badge Number in ios5

还要尝试为applicationIconBadgeNumber提供一个int值,而不是NSInteger。

答案 3 :(得分:0)

行。现在我的报告关于奇怪的事情。 我知道了!它现在很好用。

问题是: 我用推送通知创建了我的应用程序一切都很简单整数(1,8,99)然后我注意到PHP变量 $ price 中的整数 35.06 没有即使(int)$ price 也不会成功识别它。我认为这个数字太长了(但实际上4位数很受欢迎)。我决定使用

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

但正如提到的那样,当应用程序未启动时它根本不起作用。没有机会。它永远不会更新徽章。我花了很多时间思考可能出现的问题,突然之间出现了一些问题。

在有效载荷中我刚刚做了这个

'badge' => $price*100

当然它对我有用=) 我不知道是什么问题,为什么没有工作(int)$ price (它实际上是整数)但是现在还可以。 我的徽章现在显示为 3.506 ,当然您可以在步骤中移动点,然后您的 35.06

希望它可以帮到你。