Я пытаюсь использовать OneSignal IOS Native SDK
для своего приложения.Я включил OSPermissionObserver and OSSubscriptionObserver
в классе.Требуется добавить заглушки протоколов и внутри протоколов, мне нужно вызвать allowNotificationSwitch
в коде.Но я не знаю, как мне это сделать.
Вот так выглядит мой TableViewCell
. В indexPath.row = 0
имеется Switch
объект.Я сделал это программно, так как indexPath.row 0
имеет только объект переключения.Я использовал приведенные ниже коды для создания переключателя внутри cellRowAt
и создал функцию switchChanged
.Проблема в том, как я могу вызвать allowNotificationSwitch
внутри протоколов OSPermissionObserver и OSSubscriptionObserver?Я закомментировал ту часть, где я назову allowNotificationSwitch
.Надеюсь, я собирался объяснить таким образом, чтобы вы могли понять.Надеюсь на вашу помощь.Большое спасибо.
AllowNotificationSwitch
if indexPath.row == 0 {
let allowNotificationSwitch = UISwitch(frame: .zero)
allowNotificationSwitch.setOn(false, animated: true)
allowNotificationSwitch.tag = indexPath.row
allowNotificationSwitch.addTarget(self, action: #selector(self.switchChanged(_:)), for: .valueChanged)
cell.accessoryView = allowNotificationSwitch
}
@objc func switchChanged(_ sender : UISwitch!) {
let status: OSPermissionSubscriptionState = OneSignal.getPermissionSubscriptionState()
let isSubscribed = status.subscriptionStatus.subscribed
if isSubscribed == true {
sender.isOn = true
sender.isUserInteractionEnabled = true
}
OneSignal.add(self as OSPermissionObserver)
OneSignal.add(self as OSSubscriptionObserver)
if !sender.isOn {
OneSignal.setSubscription(false)
} else {
OneSignal.setSubscription(true)
}
print("table row switch change \(sender.tag)")
print("the switch is \(sender.isOn ? "ON" : "OFF")")
}
Протоколы OSPermissionObserver и OSSubscriptionObserver (на основе документации OneSignal)
func onOSPermissionChanged(_ stateChanges: OSPermissionStateChanges!) {
if stateChanges.from.status == OSNotificationPermission.notDetermined {
if stateChanges.to.status == OSNotificationPermission.authorized {
// allowNotificationsSwitch.isUserInteractionEnabled = true
} else if stateChanges.to.status == OSNotificationPermission.denied {
displaySettingsNotification()
}
} else if stateChanges.to.status == OSNotificationPermission.denied { // DENIED = NOT SUBSCRIBED
// allowNotificationsSwitch.isUserInteractionEnabled = false
}
}
func onOSSubscriptionChanged(_ stateChanges: OSSubscriptionStateChanges!) {
if stateChanges.from.subscribed && !stateChanges.to.subscribed { // NOT SUBSCRIBED != DENIED
// allowNotificationsSwitch.isOn = false
} else if !stateChanges.from.subscribed && stateChanges.to.subscribed {
// allowNotificationsSwitch.isOn = true
// allowNotificationsSwitch.isUserInteractionEnabled = true
}
}