Data not Saving in Android Using Unity Persistance Saving Training.

Hey guys! I am trying to save some data in my game, but it just isn’t working.
I want it to be stored in the device itself, and not on the sd-card. That is why I use the Internal Only selection, on the Player Settings.

Below is my script. I tried fixing it, looking everywhere, but got no answers. I did choose to use Binary Formatter instead of Player Prefs because I believe it is safer, and easier to use. Perhaps I shouldn’t be using it at all…
In the Editor everything works fine, and data is saved. The problem is building at Android. By the way, I didn’t test yet on iOS, but wouldn’t be surprised if it didn’t work.


using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.Collections.Generic;
using System;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;

public class Datakeeper : MonoBehaviour {
    #region Define Stuff
    [Header("Variables")]
    public static int score;
    public static int highscore;
    public static int money;
    public static DateTime lastTime;
    public static Vector3 cameraPos;
    public static bool gotGift;
    public static bool gotEgg;
    public static bool watchedAd;
    public static bool destroyPlayerOnMenuScene;

    [Header("Player Manager")]
    public static Dictionary<string, bool> birdsKeeper;
    public GameObject[] birdList;
    public static string selectedBird;
    public static float PlayerSliderValue;
    public static Vector3 originalPlayerPos = new Vector3(-2, 0.5f, 5);
    public static Vector3 playerPos = new Vector3(-2, 0.5f, 5);

    [Header("Background Manager")]
    public static Dictionary<string, bool> bgKeeper;
    public GameObject[] bgList;
    public static string selectedBg;
    public static bool backgroundMoving = true;
    public static bool ResetBgPos = false;


    [Header("Save Config")]
    private string fileName = "/info.data";

    public enum Status { SELECTED, SUCCESS, FAILURE};
    #endregion

    #region Starting
    void Start()
    {
        Load();
        if (Application.platform == RuntimePlatform.IPhonePlayer)
        {
            Environment.SetEnvironmentVariable("MONO_REFLECTION_SERIALIZER", "yes");
        }
        DontDestroyOnLoad(gameObject);
        if(birdsKeeper == null)
        {
            InitializeBirdDictionary();
            lastTime = DateTime.UtcNow.AddDays(-2);
        }

        if(bgKeeper == null)
        {
            InitializeBgDictionary();
        }
    }

    void InitializeBirdDictionary()
    {
        birdsKeeper = new Dictionary<string, bool>();
        //Birds should be named: "bird 0", "bird 10", "bird 15", etc.
        //All birds prefabs should be found inside the birdList.
        for (int i = 0; i < birdList.Length; i++) //For each bird add a bird dictionary key named "bird " + "number" like "bird 1"
        {
            if(i == 0)//If it is the default bird make it true
            {
                birdsKeeper.Add("bird " + i.ToString(), true);
            }
            else
            {
                birdsKeeper.Add("bird " + i.ToString(), false);
            }
        }
        if (selectedBird == null || selectedBird == "")
        {
            selectedBird = "bird 0";
        }
    }

    void InitializeBgDictionary()
    {
        bgKeeper = new Dictionary<string, bool>();
        //bgs should be named: "bg 0", "bg 10", "bg 15", etc.
        //All bgs prefabs should be found inside the bgList.
        for (int i = 0; i < bgList.Length; i++) //For each bg add a bg dictionary key named "bg " + "number" like "bg 1"
        {
            if (i == 0)//If it is the default bg make it true
            {
                bgKeeper.Add("bg " + i.ToString(), true);
                if (selectedBg == null || selectedBg == "")
                {
                    selectedBg = "bg 0";
                }
            }
            else
            {
                bgKeeper.Add("bg " + i.ToString(), false);
            }
        }
    }
    #endregion
    #region Load/Save

    void OnLevelWasLoaded()
    {
        Save();
    }

    void OnApplicationQuit()
    {
        Save();
    }

    void OnApplicationPause()
    {
        Save();
    }

    public void Save()
    {
        BinaryFormatter bf = new BinaryFormatter();
        FileStream file = File.Create(Application.persistentDataPath + fileName);

        Data data = new Data();
        //Variables
        data.highscore = highscore;
        data.money = money;
        data.lastTime = lastTime;
        //Player
        data.birdsKeeper = birdsKeeper;
        data.selectedBird = selectedBird;
        data.PlayerSliderValue = PlayerSliderValue;
        //Background
        data.bgKeeper = bgKeeper;
        data.selectedBg = selectedBg;

        bf.Serialize(file, data);
        file.Close();
    }

    public void Load()
    {
        if (File.Exists(Application.dataPath + fileName))
        {
            BinaryFormatter bf = new BinaryFormatter();
            FileStream file = File.Open(Application.persistentDataPath + fileName, FileMode.Open);
            Data data = (Data)bf.Deserialize(file);
            file.Close();
            //Variables
            highscore = data.highscore;
            money = data.money;
            lastTime = data.lastTime;
            //Player
            birdsKeeper = data.birdsKeeper;
            selectedBird = data.selectedBird;
            PlayerSliderValue = data.PlayerSliderValue;
            //Background
            bgKeeper = data.bgKeeper;
            selectedBg = data.selectedBg;
        }
        else
        {
            lastTime = DateTime.UtcNow;
        }
    }
#endregion

#region Invokable Voids
    public static void AddScore(int value)
    {
        score += value;
        if (score > highscore)
        {
            highscore = score;
        }
    }

    public static void AddMoney(int value)
    {
        money += value;
    }

    public void AddMoney_(int value)
    {
        money += value;
    }

    public static Status BuyBird(string birdName, int birdCost)
    {
        if (birdsKeeper[birdName])
        {
            selectedBird = birdName;
            return Status.SELECTED;
        }
        else
        {
            if (money >= birdCost)
            {
                money -= birdCost;
                birdsKeeper[birdName] = true;
                selectedBird = birdName;
                return Status.SUCCESS;
            }
            else
            {
                return Status.FAILURE;
            }
        }
    }

    public static bool HasBird(string birdName)
    {
        if (birdsKeeper[birdName])
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public static Status BuyBg(string bgName, int bgCost)
    {
        if (birdsKeeper[bgName])
        {
            selectedBird = bgName;
            return Status.SUCCESS;
        }
        else
        {
            if (money >= bgCost)
            {
                money -= bgCost;
                bgKeeper[bgName] = true;
                return Status.SUCCESS;
            }
            else
            {
                return Status.FAILURE;
            }
        }
    }

    public static void StartBgMovement()
    {
        backgroundMoving = true;
        ResetBgPos = true;
    }
    public static void StopBgMovement()
    {
        backgroundMoving = false;
    }
#endregion
}

[Serializable]
public class Data
{
    //Variables
    public int highscore;
    public int money;
    public DateTime lastTime;

    //Player Manager
    public Dictionary<string, bool> birdsKeeper;
    public string selectedBird;
    public float PlayerSliderValue;

    //Background Manager
    public Dictionary<string, bool> bgKeeper;
    public string selectedBg;
}

Im currently having the same issue.