簡體   English   中英

如何在 iOS 中獲取 One Signal 用戶的唯一播放器 ID?

[英]How to get One Signal user's unique player id in iOS?

如何在 iOS 中檢索 OneSignal 用戶的唯一播放器 ID? 我只在 OneSignal 官方文檔中找到 iOS SDK 設置。

如果有任何建議,謝謝。

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

我確實需要在我的代碼中某處獲取玩家 ID(或用戶 ID),而且我不想將它保存在任何地方。

我最終使用了這段代碼:

let userId = OneSignal.getPermissionSubscriptionState().subscriptionStatus.userId
    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)")

在 iOS (WKWebView / UIWebView) 上與 OneSignal 結合的基於 WebViewGold 的應用程序,您可能需要一些后端工作才能將其連接到我們的 OneSignal API:您應該將?onesignal_push_id=XYZ 參數保存在數據庫中,並且一旦發送推送通知,就為該特定用戶觸發 OneSignal API ( https://documentation.onesignal.com/docs/onesignal-api )。 這必須由您的后端/網絡服務器完成。 WebViewGold 僅提供內置的 OneSignal API 以及向您的 WebView URL 調用發送 ?onesignal_push_id=XYZ 附件的能力。

因此,激活 Config.swift 中的“kPushEnhanceUrl”選項(通過將值從 false 切換為 true)到 append 個人用戶 ID via?onesignal_push_id=XYZ 到您的 WebView URL。

如果您的 WebView URL 是https://www.example.org ,WebViewGold 將改為調用https://www.example.org?onesignal_push_id=XYZ 只有您的第一個 URL 請求會獲得該 GET 變量,因此將其保存在 session 或 cookie 中以在您的鏈接頁面上訪問它。 另一種或額外的方法是通過 JavaScript 檢索和處理任何頁面上的信息:

<script>

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

alert(onesignalplayerid);

</script>

這對我有用,因為不推薦使用其他解決方案:

let userId = OneSignal.getDeviceState().userId

確保導入 OneSignal:

import OneSignal

您可以在standardUserDefaults 中找到它。 您可以使用以下方法檢索它。 我相信它是在第一次應用程序啟動時設置的,但是,它可能不會在第一次調用application:didFinishLaunchingWithOptions:時設置。

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

您可以通過查看字典表示來查看用戶默認值中存儲的其他內容: UserDefaults.standard.dictionaryRepresentation()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM