首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >斯威夫特OneSignal OSPermissionSubscriptionState setSubscription

斯威夫特OneSignal OSPermissionSubscriptionState setSubscription
EN

Stack Overflow用户
提问于 2021-01-02 13:15:00
回答 2查看 1.8K关注 0票数 5

我更新了我的cocoapods,并在OneSignal中发现了错误。

错误的

类型'OneSignal‘没有成员'setSubscription’

代码语言:javascript
复制
OneSignal.setSubscription(true)

无法在作用域中找到'OSPermissionSubscriptionState‘类型

代码语言:javascript
复制
let status: OSPermissionSubscriptionState = OneSignal.getPermissionSubscriptionState()

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

我还得到了“OneSignal类型”没有成员“setSubscription”

年长的

代码语言:javascript
复制
OneSignal.setSubscription(true)

新的

代码语言:javascript
复制
OneSignal.disablePush(false)

年长的

代码语言:javascript
复制
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)")
    }

新的

代码语言:javascript
复制
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信息

代码语言:javascript
复制
 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错误文档

代码语言:javascript
复制
// 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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-05 19:38:16

也许这将帮助您获得新的OneSignal使用。我刚刚将我的SDK更新为3.1.0,我不得不更改一些要点:

新初始化:Link1

代码语言:javascript
复制
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

代码语言:javascript
复制
if let deviceState = OneSignal.getDeviceState() {
    let userId = deviceState.userId
    let pushToken = deviceState.pushToken
    let subscribed = deviceState.isSubscribed
 }

编辑:我认为你收集到的代码是从这个链接和楼下,它说,新的弱化是:

将以下内容替换为

代码语言:javascript
复制
// OneSignal initialization
OneSignal.initWithLaunchOptions(launchOptions)
OneSignal.setAppId("YOUR_ONESIGNAL_APP_ID")
票数 5
EN

Stack Overflow用户

发布于 2022-09-16 11:39:16

使用这段代码,您可以在一个信号中获得userId。

代码语言:javascript
复制
   if let deviceState = OneSignal.getDeviceState() {
        // Get the OneSignal Push Player Id
        let userId = deviceState.userId
        print("OneSignal Push Player ID: ", userId ?? "called too early, not set yet")

    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65539474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档