Swift OneSignal OSPermissionSubscriptionState setSubscription

问题描述

我更新了我的 cocoapods,但 Onesignal 出现错误

错误

类型“Onesignal”没有成员“setSubscription”

Onesignal.setSubscription(true)

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

let status: OSPermissionSubscriptionState = Onesignal.getPermissionSubscriptionState()

代码在运行更新之前已编译。

我也收到“类型‘Onesignal’没有成员‘setSubscription’

Onesignal.setSubscription(true)

Onesignal.disablePush(false)

func onOSSubscriptionChanged(_ stateChanges: OSSubscriptionStateChanges!) {
        if !stateChanges.from.status && stateChanges.to.subscribed {
            print("Subscribed for Onesignal push notifications!")
            // get player ID
            stateChanges.to.userId
            print(userID)
            print("************************")
        }
        print("SubscriptionStateChange: \n\(stateChanges)")
    }

func onOSPermissionChanged(_ stateChanges: OSPermissionStateChanges!) {
          // Example of detecting answering the permission prompt
          if stateChanges.from.status == OSNotificationPermission.notDetermined {
             if stateChanges.to.status == OSNotificationPermission.authorized {
                let deviceState = Onesignal.getDeviceState()
                let userID = deviceState?.userId
                print(userID)
                print("************************")
                print("Thanks for accepting notifications!")
             } else if stateChanges.to.status == OSNotificationPermission.denied {
                print("Notifications not accepted. You can turn them on later under your iOS settings.")
             }
          }
          // prints out all properties
          print("PermissionStateChanges: \n\(stateChanges)")
       }

您也可以像这样提取用户 Onesignal 信息

 let status: OSPermissionSubscriptionState =        Onesignal.getPermissionSubscriptionState()
  // Push Status Methods
 let hasPrompted = status.permissionStatus.hasPrompted
 print("hasPrompted: ",hasPrompted)
  let userStatus = status.permissionStatus.status
  print("userStatus: ",userStatus)
  let isSubscribed = status.subscriptionStatus.subscribed
  print("isSubscribed: ",isSubscribed)
  let userSubscriptionSetting =                      status.subscriptionStatus.userSubscriptionSetting
  print("userSubscriptionSetting: ",userSubscriptionSetting)
  if let userID = status.subscriptionStatus.userId{
  print("userID: ",userID)
}
   if let pushToken = status.subscriptionStatus.pushToken {
  print("pushToken: ",pushToken)
}
  // Email Status Methods
  if let emailPlayerId = status.emailSubscriptionStatus.emailUserId   {
  print("emailPlayerId: ",emailPlayerId)
}
  if let emailAddress = status.emailSubscriptionStatus.emailAddress   {
  print("emailAddress: ",emailAddress)
} 
 let isEmailSubscribed = status.emailSubscriptionStatus.subscribed
 print("isEmailSubscribed: ",isEmailSubscribed)

Onesignal 错误的文档

// START Onesignal initialization code
      let onesignalInitSettings = [kOSSettingsKeyAutoprompt: false,kOSSettingsKeyInAppLaunchURL: false]
      
      // Replace 'YOUR_OnesIGNAL_APP_ID' with your Onesignal App ID.
      Onesignal.initWithLaunchOptions(launchOptions,appId: "KEY",handleNotificationAction: nil,settings: onesignalInitSettings)

      Onesignal.inFocusdisplayType = OSNotificationdisplayType.notification;
      //END Onesignal initializataion code

解决方法

这可能会帮助您使用新的 OneSignal。我刚刚更新了我的 SDK 到 3.1.0,我不得不改变一些点:

新的初始化:Link1

import UIKit
import OneSignal

@UIApplicationMain
class AppDelegate: UIResponder,UIApplicationDelegate {
  
func application(_ application: UIApplication,didFinishLaunchingWithOptions launchOptions: 
[UIApplication.LaunchOptionsKey: Any]?) -> Bool {
  
  // Remove this method to stop OneSignal Debugging 
  OneSignal.setLogLevel(.LL_VERBOSE,visualLevel: .LL_NONE)

  // OneSignal initialization
  OneSignal.initWithLaunchOptions(launchOptions)
  OneSignal.setAppId("YOUR_ONESIGNAL_APP_ID")

  // promptForPushNotifications will show the native iOS notification permission prompt.
  // We recommend removing the following code and instead using an In-App Message to prompt for notification permission (See step 8)
  OneSignal.promptForPushNotifications(userResponse: { accepted in
    print("User accepted notifications: \(accepted)")
  })

   return true
}
  
// Remaining contents of your AppDelegate Class...
}

在范围内:Link2

if let deviceState = OneSignal.getDeviceState() {
    let userId = deviceState.userId
    let pushToken = deviceState.pushToken
    let subscribed = deviceState.isSubscribed
 }

编辑: 我认为您选择的代码来自此 link 就在楼下,它说新的初始化是:

替换为以下内容

// OneSignal initialization
OneSignal.initWithLaunchOptions(launchOptions)
OneSignal.setAppId("YOUR_ONESIGNAL_APP_ID")