使用OneSignal

时间:2017-04-17 23:02:28

标签: ios push-notification badge onesignal

每当用户(设备到设备)之间发送消息时,如果应用程序未处于焦点,则接收用户会收到通知。除了通知之外,该选项卡的徽章值应该增加1.为了尝试这样做,我创建了一个在OneSignal的 handleNotificationReceived 块中启动的NotificationCenter操作(在 initLaunchWithOptions中) )喜欢这样:

handleNotificationReceived: { (notification) in
            //Notification
            NotificationCenter.default.post(name: MESSAGE_NOTIFICATION, object: nil)
            print("Received Notification - \(notification?.payload.notificationID ?? "")")
    }, 

并且观察者位于Messaging选项卡中,其中包含增加标签栏徽章的功能:

NotificationCenter.default.addObserver(self, selector: #selector(addBadge), name: MESSAGE_NOTIFICATION, object: nil)

//Adds a badge to the messages bar
func addBadge(){
    self.navigationController?.tabBarController?.tabBar.items?[3].badgeValue = "1"
    if #available(iOS 10.0, *) {
        self.navigationController?.tabBarController?.tabBar.items?[3].badgeColor = ChatMessageCell.indexedColor
    } else {
        // Fallback on earlier versions
    }
}

但是,我仍然无法获得用户出现的徽章价值

1 个答案:

答案 0 :(得分:1)

这取决于您的视图控制器层次结构的设置方式。您尝试访问badgeValue的方式,可能是因为其中一个可选属性返回nil而未设置。在该行上设置断点并检查它们的值以了解哪一个。

如果您的视图控制器嵌入在导航控制器中,并且该导航控制器是选项卡层次结构中的第一个子控件,例如

UITabBarController - > UINavigationController - >的UIViewController

然后从UIViewController你可以获得像navigationController?.tabBarItem.badgeValue这样的徽章价值。

navigationController将返回最近的祖先,即UINavigationController。如果这是选项卡层次结构中的第一个子控制器,则其tabBarItem属性将返回选项卡的UITabBarItem,您可以在那里更新徽章值。

//Adds a badge to the messages bar
func addBadge(){
    if let currentValue = navigationController?.tabBarItem.badgeValue {
        let newValue = Int(currentValue)! + 1
        navigationController?.tabBarItem.badgeValue = "\(newValue)"
    } else {
        navigationController?.tabBarItem.badgeValue = "1"
    }

    if #available(iOS 10.0, *) {
        navigationController?.tabBarItem.badgeColor = ChatMessageCell.indexedColor
    } else {
        // Fallback on earlier versions
    }
}