One Signal - idsAvailable is deprecated

时光怂恿深爱的人放手 提交于 2019-12-08 18:30:37

问题


OneSignal's latest build version generate a warning like 'idsAvailable' is deprecated. How can I get 'playerID' using getPermissionSubscriptionState() instead idsAvailable as I did below?

    OneSignal.idsAvailable({ (userId, pushToken) in

        if (pushToken != nil) {

            if let playerID = userId {

                // do something

            }
        }
    })

回答1:


OneSignal keeps really good documentation.

For android you can get userIDs by using the idsAvailable method which returns the userID and registrationID.

userID aka playerID is a OneSignal UUID formatted string. (unique per device per app) registrationID is a Google assigned identifier (unique per device per app and changes on reinstalls).

For iOS, you can get the userIDs in the same way but in version 2.5.0+ of the native iOS SDK added getPermissionSubscriptionState method and addSubscriptionObserver.

You can get the OSPermissionSubscriptionState for Swift as follows:

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

For Objective-C:

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

status.subscriptionStatus.subscribed
status.subscriptionStatus.userSubscriptionSetting
status.subscriptionStatus.userId
status.subscriptionStatus.pushToken

So your above code will now look something like this:

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
    }
}



回答2:


I just discovered in the documentation, look like "userID" means "playerID".

https://documentation.onesignal.com/docs/ios-native-sdk#section--getpermissionsubscriptionstate-




回答3:


userId is the same as the playerId, putting it all together in some sample Analytics (singleton) class I use in my Swift 4 app:

class Analytics : NSObject, OSSubscriptionObserver {

    ///the singleton
    static let shared = Analytics()


    func setupOneSignal(launchOptions: [UIApplicationLaunchOptionsKey : Any]?) {
        OneSignal.setLogLevel(.LL_VERBOSE, visualLevel: .LL_NONE)
        OneSignal.add(self as OSSubscriptionObserver)

        let settings : [String : Any] = [kOSSettingsKeyInAppLaunchURL : false]
        OneSignal.initWithLaunchOptions(
            launchOptions,
            appId:Environment.oneSignalAppId,
            handleNotificationReceived: {
                (osnotification) in
               //.....
        },
            handleNotificationAction: {
                (osNotificationOpenedResult) in
               //.....

        },
            settings: settings)
    }

    func onOSSubscriptionChanged(_ stateChanges: OSSubscriptionStateChanges!) {
        if  let state = OneSignal.getPermissionSubscriptionState(),
            let userId = state.subscriptionStatus.userId,
            let pushToken = state.subscriptionStatus.pushToken {
            print("onesignal.userId : \(userId)")
            print("onesignal.pushToken : \(pushToken)")
        }
    }

}


来源:https://stackoverflow.com/questions/43230152/one-signal-idsavailable-is-deprecated

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!