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
}

但没什么...

你能帮助我吗?

4

4 回答 4

6

徽章图标编号由作为推送消息接收的有效负载中的徽章属性控制。在应用程序激活之前,应用程序本身对显示的数字没有任何作用。将 'badge' 属性设置为任何整数值(注意:它不应该是字符串,也不应该包含在“”中)可以满足需要。收到通知的操作系统会查找“徽章”的值,并立即将其设置在应用徽章图标上。当应用程序不活动时,这一切都会发生。为确保它根据应用程序中发生的情况增加或减少,应用程序应使用更新的徽章编号向服务器发送消息。

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

注意:“badge”属性包含在有效负载中收到的“aps”字典中。我的有效负载看起来像:aps = { alert = "Push notification!"; 徽章 = 9; 声音=默认;}

于 2012-12-30T12:14:41.620 回答
2

您应该更好地定义您想要做什么,因为我不清楚您是在谈论远程通知还是本地通知,或者您究竟想要获得什么以及您正在获得什么。

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

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

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

在您的 AppDelegate 中,然后您可以使用

application.applicationIconBadgeNumber = badge;
于 2012-05-01T16:09:09.930 回答
0

看看这个,可能是设置问题!: ios5中的应用程序图标徽章编号

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

于 2012-05-01T14:45:41.030 回答
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

希望它可以帮助你。

于 2015-02-17T13:33:39.083 回答