【问题标题】:How to get One Signal user's unique player id in iOS?如何在 iOS 中获取 One Signal 用户的唯一玩家 ID?
【发布时间】:2017-11-09 17:42:55
【问题描述】:

如何在 iOS 中检索 OneSignal 用户的唯一玩家 ID? 我只在 OneSignal 官方文档中找到了 iOS SDK 设置。

如果有任何建议,谢谢。

【问题讨论】:

    标签: ios swift push-notification onesignal


    【解决方案1】:
        let status: OSPermissionSubscriptionState = OneSignal.getPermissionSubscriptionState()
    
        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)")
        let userID = status.subscriptionStatus.userId // This one
        print("userID = \(userID)")
        let pushToken = status.subscriptionStatus.pushToken
        print("pushToken = \(pushToken)")
    

    【讨论】:

      【解决方案2】:

      我确实需要在我的代码中的某个地方获取 Player Id(或 UserId),我不想将它保存在任何地方。

      我最终使用了这段代码:

      let userId = OneSignal.getPermissionSubscriptionState().subscriptionStatus.userId
      

      【讨论】:

      • 嗨@MBH,当我使用你的代码 let userId = OneSignal.getPermissionSubscriptionState().subscriptionStatus.userId 时,我收到以下错误“必须提供有效的回调”
      【解决方案3】:

      您可以在standardUserDefaults 中找到它。您可以使用以下方法检索它。我相信它是在第一次应用启动时设置的,但是,它可能不会在第一次调用 application:didFinishLaunchingWithOptions: 时设置。

      UserDefaults.standard.string(forKey: "GT_PLAYER_ID")
      

      您可以通过查看字典表示来查看用户默认值中存储的其他内容:UserDefaults.standard.dictionaryRepresentation()

      【讨论】:

      • Nice Answer 实际上 OneSignal 存储播放器 ID 默认为 sharePrefrence (Android) 和 UserDefaults (ioS)
      【解决方案4】:

      您需要使用 OneSignal 的观察者,例如 OSSubscriptionObserver

      // Add OSSubscriptionObserver after UIApplicationDelegate
      class AppDelegate: UIResponder, UIApplicationDelegate, OSSubscriptionObserver {
      
         func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
            // Add your AppDelegate as an subscription observer
            OneSignal.add(self as OSSubscriptionObserver)
         }
      
         // After you add the observer on didFinishLaunching, this method will be called when the notification subscription property changes. 
         func onOSSubscriptionChanged(_ stateChanges: OSSubscriptionStateChanges!) {
            if !stateChanges.from.subscribed && stateChanges.to.subscribed {
               print("Subscribed for OneSignal push notifications!")
            }
            print("SubscriptionStateChange: \n\(stateChanges)")
      
            //The player id is inside stateChanges. But be careful, this value can be nil if the user has not granted you permission to send notifications. 
            if let playerId = stateChanges.to.userId {
               print("Current playerId \(playerId)")
            }
         }
      }
      

      为了更好的解释,这里是addSubscriptionObserver的文档

      【讨论】:

      • 我认为这样的事情很难。 OneSignal 应该在日志中打印玩家 ID。
      • onOSSubscriptionChanged 未调用。
      • 在我的情况下 ononOSSubscriptionChanged 没有被调用。请提出为什么它不被调用仍然 objserver 被添加到 didFinishLaunching 方法中。
      猜你喜欢
      • 2016-07-22
      • 1970-01-01
      • 1970-01-01
      • 2017-01-08
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 2020-03-28
      • 1970-01-01
      相关资源
      最近更新 更多