One Signal - idsAvailable已弃用

iam*_*rak 7 ios swift onesignal

OneSignal的最新版本版本会生成一个警告,例如' idsAvailable '已被弃用.如何使用getPermissionSubscriptionState()代替idsAvailable 获取'playerID',如下所示?

    OneSignal.idsAvailable({ (userId, pushToken) in

        if (pushToken != nil) {

            if let playerID = userId {

                // do something

            }
        }
    })
Run Code Online (Sandbox Code Playgroud)

Jon*_*onF 10

OneSignal保留了非常好的文档.

对于android,您可以使用idsAvailable返回userID和registrationID 的方法获取userID.

userID aka playerID是OneSignal UUID格式的字符串.(每个应用的每个设备唯一)registrationID是Google指定的标识符(每个应用每个设备唯一,重新安装时更改).

对于iOS,您可以以相同的方式获取userID,但在本机iOS SDK的2.5.0+版本中添加了getPermissionSubscriptionState方法和addSubscriptionObserver.

您可以按如下方式获取Swift的OSPermissionSubscriptionState:

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
print("userID = \(userID)")
let pushToken = status.subscriptionStatus.pushToken
print("pushToken = \(pushToken)")
Run Code Online (Sandbox Code Playgroud)

对于Objective-C:

OSPermissionSubscriptionState* status = [OneSignal getPermissionSubscriptionState];
status.permissionStatus.hasPrompted
status.permissionStatus.status

status.subscriptionStatus.subscribed
status.subscriptionStatus.userSubscriptionSetting
status.subscriptionStatus.userId
status.subscriptionStatus.pushToken
Run Code Online (Sandbox Code Playgroud)

所以你的上面的代码现在看起来像这样:

let status: OSPermissionSubscriptionState = OneSignal.getPermissionSubscriptionState()

let userID = status.subscriptionStatus.userId
    print("userID = \(userID)")
let pushToken = status.subscriptionStatus.pushToken
    print("pushToken = \(pushToken)")

if pushToken != nil {
    if let playerID = userID {
        // do something
    }
}
Run Code Online (Sandbox Code Playgroud)