public static void _showCoreInstallerWindow()
    {
        if (!SessionState.GetBool(_shouldShowWindowKey, false))
        {
            return;
        }

        SessionState.EraseBool(_shouldShowWindowKey);
        OneSignalSetupWindow.ShowWindow();
    }
    private static void _showOpenSetupDialog()
    {
        var dialogResult = EditorUtility.DisplayDialog(
            "OneSignal",
            "The project contains an outdated version of OneSignal SDK! We recommend running the OneSignal SDK Setup.",
            "Open SDK Setup",
            "Cancel"
            );

        if (dialogResult)
        {
            OneSignalSetupWindow.ShowWindow();
        }
    }
    protected override void _runStep()
    {
        var manifest = new Manifest();

        manifest.Fetch();

        manifest.AddScopeRegistry(_scopeRegistry);

        var scopeRegistry = manifest.GetScopeRegistry(_registryUrl);

        scopeRegistry.AddScope(_packagesScope);

#if UNITY_2017_3_OR_NEWER
        manifest.ApplyChanges();

        var addRequest = UnityEditor.PackageManager.Client.Add(_coreVersion);
        while (!addRequest.IsCompleted)
        {
        }

        addRequest = UnityEditor.PackageManager.Client.Add(_androidVersion);
        while (!addRequest.IsCompleted)
        {
        }

        addRequest = UnityEditor.PackageManager.Client.Add(_iosVersion);
        while (!addRequest.IsCompleted)
        {
        }
#else
        manifest.AddDependency(_corePackageName, _coreVersion);
        manifest.AddDependency(_androidPackageName, _androidVersion);
        manifest.AddDependency(_iosPackageName, _iosVersion);

        manifest.ApplyChanges();
        AssetDatabase.Refresh();
#endif
        OneSignalSetupWindow.CloseWindow();
        SessionState.SetBool(_shouldShowWindowKey, true);
    }