如何在iOS中检索OneSignal用户的唯一播放器ID? 我只发现了OneSignal官方文档中的iOS SDK设置。
如果有任何建议,谢谢。
如何在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 userId = OneSignal.getDeviceState().userId
请确保您已导入OneSignal:
import OneSignal
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)")
<script>
window.location.href = "getonesignalplayerid://";
alert(onesignalplayerid);
</script>
func getOneSignalUserId()-> String {
let playerId : String = OneSignal.User.pushSubscription.id ?? ""
return playerId
}
现在一个更好的解决方案是使用:
OneSignal.appId()
你可以在standardUserDefaults中找到它。你可以使用以下方法检索它。我相信它在第一次应用程序启动时设置,但是在调用application:didFinishLaunchingWithOptions:
时可能没有设置。
UserDefaults.standard.string(forKey: "GT_PLAYER_ID")
您可以通过查看字典表示来了解用户默认设置中存储的其他内容:UserDefaults.standard.dictionaryRepresentation()