【问题标题】:PushNotification badge number not showing when my app is not active?当我的应用程序未激活时,PushNotification 徽章编号未显示?
【发布时间】:2014-03-24 05:23:19
【问题描述】:

我在我的应用程序中为 APNS 使用 Urbanairship,一切顺利,但当我的应用程序未运行时,应用程序徽章编号未显示,但是当应用程序处于活动状态并收到推送时,徽章编号显示在应用程序图标上.

我的代码如下:

   - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
     UAConfig *config = [UAConfig defaultConfig];
        [UAirship takeOff:config];
        // Request a custom set of notification types
        [UAPush shared].notificationTypes = (UIRemoteNotificationTypeBadge |
                                             UIRemoteNotificationTypeSound |
                                             UIRemoteNotificationTypeAlert |
                                             UIRemoteNotificationTypeNewsstandContentAvailability);

        return YES;
    }
    - (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err {

        NSString *str = [NSString stringWithFormat: @"Error: %@", err];
        NSLog(@"%@",str);

    }

    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
        NSLog(@"Received notification: %@", userInfo);
        //[self addMessageFromRemoteNotification:userInfo];

        NSString* alertValue = [[userInfo valueForKey:@"aps"] valueForKey:@"badge"];
        NSLog(@"my message-- %@",alertValue);
        int badgeValue= [alertValue intValue];

        [[UIApplication sharedApplication] setApplicationIconBadgeNumber:badgeValue];


    }
- (void)applicationDidBecomeActive:(UIApplication *)application {

    application.applicationIconBadgeNumber = 0;
}

编辑:我也试过 -

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
    NSInteger badgeNumber = [application applicationIconBadgeNumber];
    [application setApplicationIconBadgeNumber:++badgeNumber];
}

但仍然没有运气,我做错了什么?

【问题讨论】:

  • 您检查您的服务器端是否正确设置了徽章值。?什么是日志打印[alertValue intValue]
  • 这是日志 - 收到通知:{ "_" = "eHa-4LMVEeOdIJDiugJkgA"; aps = { alert = "这是来自 MAdept 的测试推送";徽章 = 21; }; } 和 [alertValue intValue] 是 21。
  • 尝试使用 put static number [[UIApplication sharedApplication] setApplicationIconBadgeNumber:1]; 这是怎么回事..?
  • 仍然没有运气,我认为问题不在这里,因为它显示在应用程序运行时收到推送并且我按下主页按钮而不点击推送警报。
  • 除了你的问题,确保当你这样做application.applicationIconBadgeNumber = 0;服务器也会重置计数。

标签: ios iphone objective-c apple-push-notifications urbanairship.com


【解决方案1】:

我遇到了同样的问题,来自this question

如果您还注册了UIRemoteNotificationTypeNewsstandContentAvailability,则将其删除并重试。

【讨论】:

  • 对于 iOS 8 及更高版本,您必须使用 registerUserNotificationSettings 方法 see here
【解决方案2】:

您的 JSON 需要采用以下格式。

您所拥有的内容无法正确转换为 NSDictionary。

{
    "aps" : {
        "alert" : "You got your Notification",
        "badge" : 1,
        "sound" : 'default'
    },
    "acme1" : "bar",
    "acme2" : 42

}

请参考Push Notification Document

【讨论】:

  • 感谢您的回答,但我是从 urbanairship 网站发送此推送,并且 JSON 是有效的。
  • 您也可以参考这里了解如何在后台处理推送通知stackoverflow.com/questions/12116282/…
  • 对不起,这与我的问题无关。
【解决方案3】:

使用此代码可能会对您有所帮助。

UIApplicationState state = [应用程序应用状态];

if (state == UIApplicationStateActive)
{

   NSLog(@"Received notification: %@", userInfo);
    //[self addMessageFromRemoteNotification:userInfo];

    NSString* alertValue = [[userInfo valueForKey:@"aps"] valueForKey:@"badge"];
    NSLog(@"my message-- %@",alertValue);
    int badgeValue= [alertValue intValue];

    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:badgeValue];
}

【讨论】:

  • stackoverflow.com/questions/22248149/… 检查这个并查看操作的答案
  • 我尝试了所有方法,但当应用程序未运行时,徽章不显示。
  • 您在 badgevalue 中获得的价值是多少
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-13
  • 1970-01-01
  • 1970-01-01
  • 2014-07-29
  • 2013-07-31
  • 1970-01-01
相关资源
最近更新 更多