'One Signal - idsAvailable is deprecated

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

            }
        }
    })


Solution 1:[1]

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

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

Solution 2:[2]

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

}

Solution 3:[3]

Use this code

public class MainActivity extends Activity implements OSSubscriptionObserver {
  protected void onCreate(Bundle savedInstanceState) {
    OneSignal.addSubscriptionObserver(this);
  }
  
  public void onOSSubscriptionChanged(OSSubscriptionStateChanges stateChanges) {
    if (!stateChanges.getFrom().getSubscribed() &&
        stateChanges.getTo().getSubscribed()) {
         new AlertDialog.Builder(this)
             .setMessage("You've successfully subscribed to push notifications!")
             .show();
        // get player ID
        stateChanges.getTo().getUserId();
      }
   
      Log.i("Debug", "onOSSubscriptionChanged: " + stateChanges);
  }
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 iamburak
Solution 2 HixField
Solution 3 Ankit Panwar