gpt4 book ai didi

ios - 当应用程序处于后台或应用程序已被杀死时,在带有推送通知的应用程序图标上设置角标(Badge)

转载 作者:可可西里 更新时间:2023-11-01 05:40:34 32 4
gpt4 key购买 nike

在完成了几乎所有的教程之后,我仍然无法正确设置我的角标(Badge)。情况就是这样——当我的应用程序在后台时,我希望我的角标(Badge)增加 1。所以我使用下面的代码行

NSLog(@"In didReceiveRemoteNotification badge number is %ld",(long)[UIApplication sharedApplication].applicationIconBadgeNumber);
[UIApplication sharedApplication].applicationIconBadgeNumber += [[[userInfo objectForKey:@"aps"] objectForKey:@"badge"] integerValue];
NSLog(@"In didReceiveRemoteNotification badge number is %ld",(long)[UIApplication sharedApplication].applicationIconBadgeNumber);

这两个 NSLog 分别给我值 1 和 2。甚至在设置 applicationIconBadgeNumber 之前它如何获得 1?因此它在收到单个通知时显示 2 作为角标(Badge)。

为了让我的问题更清楚,我发布了在 - didReceiveRemoteNotification 中完成的整个代码

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler{

if ((application.applicationState == UIApplicationStateBackground)) {

NSLog(@"===========================");
NSLog(@"App was in BACKGROUND...");

NSLog(@"In didReceiveRemoteNotification badge number is %ld",(long)[UIApplication sharedApplication].applicationIconBadgeNumber);
[UIApplication sharedApplication].applicationIconBadgeNumber += [[[userInfo objectForKey:@"aps"] objectForKey:@"badge"] integerValue];
NSLog(@"In didReceiveRemoteNotification badge number is %ld",(long)[UIApplication sharedApplication].applicationIconBadgeNumber);
[[UIApplication sharedApplication] presentLocalNotificationNow:localNotif];

[[NSNotificationCenter defaultCenter] postNotificationName:@"pushNotification" object:nil userInfo:userInfo];}
if (application.applicationState == UIApplicationStateActive) {
NSLog(@"===========================");
NSLog(@"App was ACTIVE");

NSString *str = [[userInfo objectForKey:@"aps"] objectForKey:@"alert"];
UIAlertView *alertview = [[UIAlertView alloc] initWithTitle:@"Notification Received" message:str delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
alertview.tag = 600;
[alertview show];
}

NSLog(@"%@",userInfo);
handler(UIBackgroundFetchResultNewData);}

我的第二个问题是当我的应用程序被杀死时,我会在 didFinishLaunchingWithOptions 中寻找以下代码:

UILocalNotification *localNotif = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if (localNotif) {
[UIApplication sharedApplication].applicationIconBadgeNumber = [UIApplication sharedApplication].applicationIconBadgeNumber + [[[localNotif valueForKey:@"aps"] valueForKey:@"badge"] integerValue];}

起初它根本不起作用,但在 Stackoverflow 上阅读了一个答案后,我删除了 UIRemoteNotificationTypeNewsstandContentAvailability 并且它开始出现。但仍然没有显示增量。角标(Badge)值保持为 1。

如有任何帮助,我们将不胜感激。

最佳答案

您不需要在收到远程通知后手动设置角标(Badge),因为 iOS 会使用 aps -> 角标(Badge)中的值自动为您设置角标(Badge)。无论您的应用处于事件状态、非事件状态、后台运行还是未运行(已终止),这都将开箱即用。

但是 iOS 不使用该值来增加角标(Badge),而是设置它。所以如果你的 badge 值在推送通知中是 n,不管你的应用程序当前的 badge 值是多少,iOS 都会将它设置为 n(不是 current + n)。角标(Badge)在收到通知时明显增加的所有应用程序实际上管理其服务器上的角标(Badge)计数并在通知中发送适当的增量值。

如果那是您想要的行为,那么这就是您应该做的。通常,您有一个与服务器上的每个设备相关联的 badgeCount 属性,并且每次发送推送时都会增加它。然后,当用户打开您的应用时,您会向您的服务器发送重置调用,将此值重置为 0,后续通知将从 1 开始。

关于ios - 当应用程序处于后台或应用程序已被杀死时,在带有推送通知的应用程序图标上设置角标(Badge),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32583955/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com