2012-05-01 27 views
1

我正在尝试更改正在开发的应用程序的徽章。关闭时,不幸的是,我只收到一条消息而没有更改徽章。如何在应用程序关闭时通过推送更改应用程序徽章

- (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 
} 

但没有......

你能帮助我吗?

回答

2

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

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

在另一方面,当你正在运行的应用程序,您将收到呼叫

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

在AppDelegate中,然后可以使用

application.applicationIconBadgeNumber = badge; 
+0

我想知道错误的位置有效负载生成一个通知给我但徽章不会改变必须手动更改吗?到应用程序关闭,这是我的问题。关闭时,消息到达,但徽章保持不变。 – user1319267

+0

我解决了它。APNs当它被发运的徽章数没有被铸造为int。现在一切正常。 – user1319267

0

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

尝试也给applicationIconBadgeNumber一个int值,而不是NSInteger的。

+0

设置是否正确:( – user1319267

+0

在服务器上结束标志应该是Integer的类型 –

6

的设置徽章徽章图标号由作为推送消息接收的有效载荷中的徽章属性进行管理。该应用程序本身没有扮演什么角色,直到应用程序变为活动状态。将'badge'属性设置为任何整数值(注意:它不应该是字符串,不应该包含在“”中)。接收到通知的操作系统查找“徽章”的值,并立即将其设置在应用徽章图标上。所有这些都发生在应用程序不活动时。为了确保它基于应用程序中发生的事情增加或减少,应用程序应该使用更新的徽章号码向服务器发送消息。

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

注意:'badge'属性包含在有效载荷内收到的'aps'字典中。我的有效负载看起来像: aps = { alert =“推送通知!”; badge = 9; sound = default; }

0

OK。现在我的报道关于奇怪的事情。 我明白了!它现在很好用。

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

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

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

在有效载荷我只是做这个

'badge' => $price*100 

的过程中它的工作对我好=) 我不知道是什么问题,为什么没有工作(INT)$价格

(它实际上是整数),但现在可以。 现在我的徽章显示这样的事情3.506,当然你可以移动的步点,你有你35.06

希望它可以帮助你。

相关问题