swift 如何在iOS中获取One Signal用户的唯一玩家ID?

4ioopgfo  于 2022-10-31  发布在  Swift
关注(0)|答案(5)|浏览(161)

如何在iOS中检索OneSignal用户的唯一播放器ID?我只在OneSignal官方文档中找到了iOS SDK安装程序。
如果有任何建议,谢谢。

yvgpqqbh

yvgpqqbh1#

您需要使用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的文档

zqdjd7g9

zqdjd7g92#

我确实需要在我的代码中的某个地方获得玩家ID(或用户ID),我不想在任何地方保存它。
我最终使用了以下代码:

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

fhg3lkii3#

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)")
slwdgvem

slwdgvem4#

在iOS(WKWebView / UIWebView)上基于WebViewGold的应用程序与OneSignal结合使用时,您可能需要进行一些后端工作来将其连接到我们的OneSignal API:您应该将?onesignal_push_id=XYZ参数保存在数据库中,并在发送推送通知时立即为该特定用户启动OneSignal API(https://documentation.onesignal.com/docs/onesignal-api).这必须由后端/Web服务器完成. WebViewGold仅提供内置OneSignal API,并能够将?onesignal_push_id=XYZ附录传送到WebView URL调用.
因此,激活Config.swift中的kPushEnhanceUrl”选项(通过将值从false切换为true),以通过?onesignal_push_id=XYZ将单个用户ID附加到您的WebView URL。
如果您的WebView URL是https://www.example.org,WebViewGold将调用https://www.example.org?onesignal_push_id=XYZ。只有您的第一个URL请求才会获得GET变量,所以请将其保存在会话或cookie中,以便在链接的页面上访问它。另一种或附加的方法是通过JavaScript检索和处理任何页面上的信息:

<script>

window.location.href = "getonesignalplayerid://";

alert(onesignalplayerid);

</script>
voj3qocg

voj3qocg5#

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

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

您可以通过查看字典表示形式来了解用户默认值中还存储了哪些内容:UserDefaults.standard.dictionaryRepresentation()

相关问题