【问题标题】:badge doesn't get set in iOS 8徽章未在 iOS 8 中设置
【发布时间】:2015-07-12 18:02:50
【问题描述】:

尝试使用此代码通过远程通知设置徽章编号

UIUserNotificationType types = (UIUserNotificationTypeAlert|
                                    UIUserNotificationTypeSound|
                                    UIUserNotificationTypeBadge);

 UIUserNotificationSettings *settings;
    settings = [UIUserNotificationSettings settingsForTypes:types
                                                 categories:nil];

    [[UIApplication sharedApplication] registerUserNotificationSettings:settings];

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
    [application setApplicationIconBadgeNumber:7];

..
}

但我没有在图标上看到徽章。

是否有我遗漏的配置?

【问题讨论】:

    标签: ios objective-c ios8 apple-push-notifications


    【解决方案1】:

    徽章:显示为应用图标徽章的数字。 如果此属性不存在,则徽章不会更改。要移除徽章,请将此属性的值设置为 0。

    您无需手动设置徽章。正如here 中所引用的,它是根据有效负载中的“徽章”自动管理它的有效负载。在服务器端代码中管理有效负载的是您。

    类似这样的:

         {
        "aps" : {
            "alert" : {
                "title" : "Game Request",
                "body" : "Bob wants to play poker",
                "action-loc-key" : "PLAY"
            },
            "badge" : 5,
        },
        "acme1" : "bar",
        "acme2" : [ "bang",  "whiz" ]
    }
    

    另外,首先您必须在 iOS8 中向用户请求权限,例如您的 -didFinishLaunchingWithOptions 委托方法中的 this

    if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)])
    {
        [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];
    
    }
    else
    {
        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
         (UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert)];
    }
    

    如果您的应用收到通知,然后您的应用将变为活动状态,则您有责任像这样重置徽章编号:

    - (void)applicationDidBecomeActive:(UIApplication *)application {
    
       application.applicationIconBadgeNumber = 0;
    }
    

    这是下面引用的另一个reference

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-25
      • 1970-01-01
      • 1970-01-01
      • 2018-11-17
      相关资源
      最近更新 更多