在范围内找不到类型“OSHandleNotificationActionBlock”

时间:2021-07-12 08:39:48

标签: android ios swift flutter onesignal

我正在使用带有颤振的 onesignal,并且我实现了 onesignal 通知服务。现在我想在不打开应用程序的情况下处理通知操作按钮,所以我在 notificationService didReceive 函数中添加了这些行。

let notificationOpenedBlock: OSHandleNotificationActionBlock = { result in
          if let actionID = result?.action.actionID {
            print("actionID =", actionID)
          }
        }

但我收到此错误。

Cannot find type 'OSHandleNotificationActionBlock' in scope

我不确定我做错了什么,我不应该在这个类中使用这段代码吗?还是我错过了导入包之类的东西?

1 个答案:

答案 0 :(得分:0)

iOS 要求在 didFinishLaunchingWithOptions 中设置 iOS API 回调。否则,如果您点击导致应用冷启动的通知,SDK 将错过该事件。我不确定 Capacitor 如何与此挂钩,但由于它是 iOS API 限制,因此您需要以相同的方式处理此问题

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    
    
        let notificationOpenedBlock: OSHandleNotificationActionBlock = { result in
           // This block gets called when the user reacts to a notification received
           let payload: OSNotificationPayload = result!.notification.payload

           var fullMessage = payload.body

            let nc = NotificationCenter.default
                nc.post(name: Notification.Name("TestingEvents"), object: nil)
            
           if payload.additionalData != nil {
              if payload.title != nil {
                 let messageTitle = payload.title
                    print("Message Title = \(messageTitle!)")
              }

              let additionalData = payload.additionalData
              if additionalData?["actionSelected"] != nil {
                 fullMessage = fullMessage! + "\nPressed ButtonID: \(additionalData!["actionSelected"])"
              }
           }
        }
        ....
    //START OneSignal initialization code
    let onesignalInitSettings = [kOSSettingsKeyAutoPrompt: false]

    // Replace 'YOUR_APP_ID' with your OneSignal App ID.
    OneSignal.initWithLaunchOptions(
      launchOptions,
      appId: "xxxxxxx",
      handleNotificationAction: notificationOpenedBlock,
      settings: onesignalInitSettings
    )
....
    return true
  }