Не работает Google Cloud Saving Unity
Пытаюсь сделать авторизацию и облачное сохранение через Google,с авторизацией всё уладил,а вот сохранения не работают, брал чужой код, брал код из github самого api,ничего.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using GooglePlayGames;
using GooglePlayGames.BasicApi;
using GooglePlayGames.BasicApi.SavedGame;
using TMPro;
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
public class PlayGamesServices : MonoBehaviour
{
public TextMeshProUGUI debugText;
public TextMeshProUGUI scoreText;
public TextMeshProUGUI authText;
public string fileName;
public static PlayGamesPlatform platform;
private static ISavedGameClient savedGameClient;
private static ISavedGameMetadata currentMetadata;
public const string DEFAULT_SAVE_NAME = "Save";
private Save sv = new Save();
private string path;
private string saveString = "";
public void Start()
{
#if UNITY_ANDROID && !UNITY_EDITOR
path = Path.Combine(Application.persistentDataPath,"Save.json");
#else
path = Path.Combine(Application.dataPath, "Save.json");
#endif
Debug.Log(path);
if (File.Exists(path))
{
sv = JsonUtility.FromJson<Save>(File.ReadAllText(path));
Debug.Log("Последний уровень: " + sv.lastLevel + "\n Очки: " + sv.score);
}
PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder().EnableSavedGames().Build();
PlayGamesPlatform.InitializeInstance(config);
PlayGamesPlatform.DebugLogEnabled = true;
platform = PlayGamesPlatform.Activate();
scoreText.text = "0";
}
public static bool IsAuthenticated
{
get
{
if (PlayGamesPlatform.Instance != null) return PlayGamesPlatform.Instance.IsAuthenticated();
return false;
}
}
public void PlatformLogin()
{
Social.Active.localUser.Authenticate(success =>
{
if (success)
{
debugText.text = "Hello " + Social.Active.localUser.userName;
}
else
{
debugText.text = "failed to login";
}
});
}
#region Arrays
public byte[] GetByteArray()
{
string json = JsonUtility.ToJson(sv);
byte[] barray = Encoding.UTF8.GetBytes(json);
for (int i = 0; i < barray.Length; i++)
{
Debug.Log(barray[i]);
}
return barray;
}
public void ReadByteArray(byte[] data)
{
string json = Encoding.UTF8.GetString(data, 0, data.Length);
sv = JsonUtility.FromJson<Save>(json);
//SaveData();
//LoadData();
sv.score += 0;
scoreText.text = sv.score.ToString();
}
#endregion
#region GoogleSaving
private void OpenSaveData(string fileName, Action<SavedGameRequestStatus, ISavedGameMetadata> onDataOpen)
{
if (!IsAuthenticated)
{
onDataOpen(SavedGameRequestStatus.AuthenticationError, null);
return;
}
savedGameClient.OpenWithAutomaticConflictResolution(fileName, DataSource.ReadCacheOrNetwork, ConflictResolutionStrategy.UseLongestPlaytime, onDataOpen);
}
public void ReadSaveData(string fileName, Action<SavedGameRequestStatus, byte[]> onDataRead)
{
if (!IsAuthenticated)
{
debugText.text += "\nReadSaveData - not auth";
onDataRead(SavedGameRequestStatus.AuthenticationError, null);
return;
}
OpenSaveData(fileName, (status, metadata) =>
{
if (status == SavedGameRequestStatus.Success)
{
savedGameClient.ReadBinaryData(metadata, onDataRead);
currentMetadata = metadata;
}
debugText.text += "\nOpenSaveData " + status;
});
}
public void WriteSaveData(byte[] data)
{
if (data == null || data.Length == 0)
{
return;
}
Action onDataWrite = () =>
{
SavedGameMetadataUpdate.Builder builder = new SavedGameMetadataUpdate.Builder().WithUpdatedDescription("Saved game at " + DateTime.Now);
SavedGameMetadataUpdate updatedMetadata = builder.Build();
savedGameClient.CommitUpdate(currentMetadata, updatedMetadata, data, (status, metadata) => currentMetadata = metadata);
};
if (currentMetadata == null)
{
OpenSaveData(DEFAULT_SAVE_NAME, (status, metadata) =>
{
Debug.Log("Cloud data write status: " + status.ToString());
if (status == SavedGameRequestStatus.Success)
{
currentMetadata = metadata;
onDataWrite();
}
});
}
onDataWrite();
}
#endregion
#region Buttons
public void LoadData()
{
debugText.text += "\nTryToLoadData";
ReadSaveData(DEFAULT_SAVE_NAME, (status, data) =>
{
debugText.text += "\nLoadData " + status;
if (status == SavedGameRequestStatus.Success && data.Length > 0)
{
ReadByteArray(data);
}
});
}
#endregion
public void SaveData()
{
File.WriteAllText(path, JsonUtility.ToJson(sv));
WriteSaveData(GetByteArray());
}
public void SetValues()
{
sv.score += 200;
scoreText.text = sv.score.ToString();
}
private void Update()
{
authText.text = IsAuthenticated.ToString();
}
public class Save
{
public int lastLevel;
public int score;
}
}
Коротко о коде: Управление идет через UI кнопки. Initialize авторизует пользователя, затем при нажатии кнопки Load вызывается метод LoadData(),и ничего не происходит. Если пробовать нажать на Load в редакторе, без авторизации, то выводит текст что не удается загрузить, если в приложении на телефоне - ни ошибочное, ни утвердительное сообщение не выводится.