Файлы
Обзор
Вы и ваши игроки можете загружать файлы в облако. Глобальный CDN, сжатие gzip, brotli и кеширование позволят быстро получать файлы. По умолчанию загрузка файлов игроками запрещена. Вы можете включить её с помощью переключателя Разрешать игрокам загружать файлы:
Имейте ввиду, что загрузка файлов дает возможность недобросовестным игрокам загружать запрещенные материалы. Вы всегда можете удалить эти материалы через панель GamePush и в любой момент отключить эту опцию.
Загрузить файл
+1 RequestДля загрузки файла вам нужно вызвать метод с нужным файлом:
- JavaScript
- Unity
/**
* @type {File} file - desired file
*/
gp.files.upload({ file: myFile });
Не реализовано
Если не передать файл - откроется окно выбора файла с нужным типом файлов, по умолчанию *.
Затем файл будет загружен на сервер.
- JavaScript
- Unity
// Выбирать файлы любого типа
gp.files.upload();
// Выбирать файлы только .txt или .json
gp.files.upload({ accept: '.txt, .json' });
Не реализовано
При загрузке вы можете разметить файл тегами. Дополнительно файлу присваивается тег UGC
.
- JavaScript
- Unity
gp.files.upload({
tags: [
'replay',
'level7',
'valentinesday',
]
});
GP_Files.Upload('replay,level7,valentinesday');
События загрузки
- JavaScript
- Unity
// файл успешно загружен
gp.files.on('upload', (image) => {});
/**
* Во время загрузки произошла ошибка
* @type {
* 'player_not_found' - аккаунт игрока еще не был создан
* 'project_not_found' - не совпал ID игры или игра не существует
* 'origin_not_allowed' - запрещенный сайт
* 'not_permitted' - запрещено загружать файлы
* 'internal_error' - что-то пошло не так
* другое - любая ошибка не связанная с сервисом
* }
*/
gp.files.on('error:upload', (error) => {});
//Подписка на события
private void OnEnable()
{
GP_Files.OnUploadSuccess += OnUploadSuccess;
GP_Files.OnUploadError += OnUploadError;
}
//Отписка от событий
private void OnDisable()
{
GP_Files.OnUploadSuccess -= OnUploadSuccess;
GP_Files.OnUploadError -= OnUploadError;
}
//Во время загрузки произошла ошибка
private void OnUploadError() => Debug.Log("ON UPLOAD: ERROR");
//Файл успешно загружен
private void OnUploadSuccess(FileData data)
{
Debug.Log("ON UPLOAD: SUCCESS");
Debug.Log("UPLOAD FILE: ID: " + data.id);
Debug.Log("UPLOAD FILE: NAME: " + data.name);
Debug.Log("UPLOAD FILE: PLAYER ID: " + data.playerId);
Debug.Log("UPLOAD FILE: SIZE: " + data.size);
Debug.Log("UPLOAD FILE: SRC: " + data.src);
for (int i = 0; i < data.tags.Length; i++)
{
Debug.Log("UPLOAD FILE: TAGS: " + data.tags[i]);
}
}
Загрузить по URL
+1 RequestМетод аналогичный предыдущему, только вместо файла используется URL. Для загрузки файла вам нужно вызвать метод с нужным URL файла:
- JavaScript
- Unity
/**
* @type {string} url - нужный URL файла
*/
gp.files.uploadUrl({ url: 'https://mygame.com/myfile.txt' });
GP_Files.UploadUrl('https://mygame.com/myfile.txt');
Метод по большей части нужен для загрузки файлов через blob.
Игровые движки позволяют сохранять скриншот холста (canvas) и возвращать ссылку на blob или Data URI. Вы можете вставить их в поле URL и загрузить файл на сервер.
- JavaScript
- Unity
// загрузка blob
gp.files.uploadUrl({ url: 'blob:https://example.com/123e4567-e89b-12d3-a456-426614174000' });
// загрузка base64 data URI
gp.files.uploadUrl({ url: 'data:file/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4...' });
// загрузка blob
GP_Files.UploadUrl('blob:https://example.com/123e4567-e89b-12d3-a456-426614174000');
// загрузка base64 data URI
GP_Files.UploadUrl('data:file/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4...');
При загрузке вы можете разметить файл тегами. Дополнительно файлу присваивается тег UGC
.
- JavaScript
- Unity
gp.files.uploadUrl({
url: 'https://mygame.com/myfile.txt',
tags: [
'replay',
'level7',
'valentinesday',
]
});
GP_Files.UploadUrl('https://mygame.com/myfile.txt', tags = 'replay,level7,valentinesday');
События загрузки
- JavaScript
- Unity
// файл успешно загружен
gp.files.on('upload', (image) => {});
/**
* Во время загрузки произошла ошибка
* @type {
* 'empty_url' - не указан URL файла
* 'player_not_found' - аккаунт игрока еще не был создан
* 'project_not_found' - не совпал ID игры или игра не существует
* 'origin_not_allowed' - запрещенный сайт
* 'not_permitted' - запрещено загружать файлы
* 'internal_error' - что-то пошло не так
* другое - любая ошибка не связанная с сервисом
* }
*/
gp.files.on('error:upload', (error) => {});
//Подписка на события
private void OnEnable()
{
GP_Files.OnUploadUrlError += OnUploadUrlError;
GP_Files.OnUploadUrlSuccess += OnUploadUrlSuccess;
}
//Отписка от событий
private void OnDisable()
{
GP_Files.OnUploadUrlError -= OnUploadUrlError;
GP_Files.OnUploadUrlSuccess -= OnUploadUrlSuccess;
}
//Во время загрузки произошла ошибка
private void OnUploadUrlError() => Debug.Log("ON UPLOAD URL: ERROR");
//Файл успешно загружен
private void OnUploadUrlSuccess(FileData data)
{
Debug.Log("ON UPLOAD URL: SUCCESS");
Debug.Log("UPLOAD URL: FILE: ID: " + data.id);
Debug.Log("UPLOAD URL: FILE: NAME: " + data.name);
Debug.Log("UPLOAD URL: FILE: PLAYER ID: " + data.playerId);
Debug.Log("UPLOAD URL: FILE: SIZE: " + data.size);
Debug.Log("UPLOAD URL: FILE: SRC: " + data.src);
for (int i = 0; i < data.tags.Length; i++)
{
Debug.Log("UPLOAD URL: FILE: TAGS: " + data.tags[i]);
}
}
Загрузить контент
+1 RequestМетод аналогичный предыдущим, только вместо файла или URL используется содержимое. Для загрузки файла вам нужно вызвать метод с нужным содержимым файла и названием файла:
- JavaScript
- Unity
/**
* @type {string} filename - название файла
* @type {string} content - содержимое файла
*/
gp.files.uploadContent({
filename: 'mysave.txt',
content: 'Hello world!'
});
//content - содержимое файла
//filename - название файла
GP_Files.UploadContent(content = 'Hello world!', filename = 'mysave.txt');
Метод по большей части нужен для загрузки сохранений, реплеев или других данных в формате .txt
или .json
.
- JavaScript
- Unity
// загрузка json
gp.files.uploadContent({
filename: 'replay-1771.json',
content: JSON.stringify({
teams: [...],
timeline: [...]
}),
});
// загрузка сохранения с любым именем файла
gp.files.uploadContent({
filename: 'mysave.mygmsv',
content: mygame.save(),
});
// загрузка json
GP_Files.UploadContent(
JSON.stringify({
teams: [...],
timeline: [...]
}),
filename = 'mysave.json');
При загрузке вы можете разметить файл тегами. Дополнительно файлу присваивается тег UGC
.
- JavaScript
- Unity
gp.files.uploadContent({
url: 'https://mygame.com/myfile.txt',
tags: [
'replay',
'level7',
'valentinesday',
]
});
GP_Files.UploadContent(content = 'Hello world!', filename = 'mysave.txt', tags = 'replay,level7,valentinesday');
События загрузки
- JavaScript
- Unity
// файл успешно загружен
gp.files.on('upload', (image) => {});
/**
* Во время загрузки произошла ошибка
* @type {
* 'empty_filename' - не указано имя файла
* 'empty_content' - не указан контент файла
* 'player_not_found' - аккаунт игрока еще не был создан
* 'project_not_found' - не совпал ID игры или игра не существует
* 'origin_not_allowed' - запрещенный сайт
* 'not_permitted' - запрещено загружать файлы
* 'internal_error' - что-то пошло не так
* другое - любая ошибка не связанная с сервисом
* }
*/
gp.files.on('error:upload', (error) => {});
//Подписка на события
private void OnEnable()
{
GP_Files.OnUploadContentError += OnUploadContentError;
GP_Files.OnUploadContentSuccess += OnUploadContentSuccess;
}
//Отписка от событий
private void OnDisable()
{
GP_Files.OnUploadContentError -= OnUploadContentError;
GP_Files.OnUploadContentSuccess -= OnUploadContentSuccess;
}
//Во время загрузки произошла ошибка
private void OnUploadContentError() => Debug.Log("ON UPLOAD CONTENT: ERROR");
//Контент успешно загружен
private void OnUploadContentSuccess(FileData data)
{
Debug.Log("ON UPLOAD CONTENT: SUCCESS");
Debug.Log("UPLOAD CONTENT: FILE: ID: " + data.id);
Debug.Log("UPLOAD CONTENT: FILE: NAME: " + data.name);
Debug.Log("UPLOAD CONTENT: FILE: PLAYER ID: " + data.playerId);
Debug.Log("UPLOAD CONTENT: FILE: SIZE: " + data.size);
Debug.Log("UPLOAD CONTENT: FILE: SRC: " + data.src);
for (int i = 0; i < data.tags.Length; i++)
{
Debug.Log("UPLOAD CONTENT: FILE: TAGS: " + data.tags[i]);
}
}
Получить контент
FREEВы можете скачать контент любого файла по ссылке в текстовом формате:
- JavaScript
- Unity
const content = await gp.files.loadContent('https://mygame.com/myfile.json');
GP_Files.LoadContent('https://mygame.com/myfile.json');
События получения
- JavaScript
- Unity
// контент успешно получен
gp.files.on('loadContent', (text) => {});
// Во время получения произошла ошибка
// @type {любая ошибка не связанная с сервисом}
gp.files.on('error:loadContent', (error) => {});
//Подписка на события
private void OnEnable()
{
GP_Files.OnLoadContent += OnLoadContent;
GP_Files.OnLoadContentError += OnLoadContentError;
}
//Отписка от событий
private void OnDisable()
{
GP_Files.OnLoadContent -= OnLoadContent;
GP_Files.OnLoadContentError -= OnLoadContentError;
}
// контент успешно получен
private void OnLoadContent(string text) => Debug.Log("ON LOAD CONTENT: " + text);
// Во время получения произошла ошибка
private void OnLoadContentError() => Debug.Log("ON LOAD CONTENT: ERROR");
Выбрать файл
FREEВы можете предолжить игроку выбрать файл без загрузки на сервер. Например для открыть локальное сохранение, загрузить контент файла или другие механики. Метод вернет файл и временную blob-ссылку на него.
- JavaScript
- Unity
gp.files.chooseFile();
// с определенным типом
const result = await gp.files.chooseFile('.txt, .mp4');
const {
/**
* Файл
* @type {File}
*/
file,
/**
* Временная ссылка на файл
* (доступна только с текущего браузера)
* @type {string}
*/
tempUrl
} = result;
//Выбрать с определенным типом
GP_Files.ChooseFile('.txt, .mp4');
В последствии вы можете загрузить эту ссылку или файл на сервер:
const { file, tempUrl } = await gp.files.chooseFile();
// файл
gp.files.upload({ file });
// временная ссылка
gp.files.uploadUrl({ url: tempUrl });
События выбора файла:
- JavaScript
- Unity
// Файл выбран
gp.files.on('choose', (result) => {});
/**
* Во время выбора возникла ошибка
* @type {
* 'cancelled' - окно выбора было закрыто
* другое - любая ошибка не связанная с сервисом
* }
*/
gp.files.on('error:choose', (error) => {});
//Подписка на события
private void OnEnable()
{
GP_Files.OnChooseFile += OnChooseFile;
GP_Files.OnChooseFileError += OnChooseFileError;
}
//Отписка от событий
private void OnDisable()
{
GP_Files.OnChooseFile -= OnChooseFile;
GP_Files.OnChooseFileError -= OnChooseFileError;
}
//Во время выбора возникла ошибка
private void OnChooseFileError() => Debug.Log("ON CHOOSE FILE: ERROR");
// Файл выбран
private void OnChooseFile(string tempUrl) => Debug.Log("ON CHOOSE FILE: " + tempUrl);
Получение файлов
+1 RequestПолучить файлы отсортированные по новизне:
- JavaScript
- Unity
const result = await gp.files.fetch();
const {
/**
* Массив файлов
* @type {FileInfo[]}
*/
items,
/**
* Проверка на возможность подгрузить еще
* @type {boolean}
*/
canLoadMore
} = result;
GP_Files.Fetch();
Получить файлы из специальной коллекции по тегу. Набор тегов ищет через AND
: если указать теги replay
и valentinesday
- будут найдены файлы у которых есть оба этих тега:
- JavaScript
- Unity
gp.files.fetch({
tags: ['replay', 'valentinesday']
});
public void FetchWithTags(string tags)
{
FilesFetchFilter filter = new FilesFetchFilter();
filter.tags = tags.Split(",");
GP_Files.Fetch(filter);
}
Получить файлы созданные определенным игроком:
- JavaScript
- Unity
// собственные файлы
gp.files.fetch({ playerId: gp.player.id });
// другой игрок
gp.files.fetch({ playerId: 16977410 });
// Файлы определенного игрока
public void FetchPlayerFiles(int playerId)
{
FilesFetchFilter filter = new FilesFetchFilter();
filter.playerId = playerId;
GP_Files.Fetch(filter);
}
Получить определенное количество файлов за раз с нужным смещением:
- JavaScript
- Unity
// Первые 100 файлов
gp.files.fetch({
limit: 100,
offset: 0,
});
// Файлы со 101 по 200
gp.files.fetch({
limit: 100,
offset: 100,
});
public void FetchWithLimit()
{
FilesFetchFilter filter = new FilesFetchFilter();
filter.limit = 100;
filter.offset = 0;
GP_Files.Fetch(filter);
}
События получения файлов
- JavaScript
- Unity
// Успешное получение
gp.files.on('fetch', (result) => {});
/**
* Ошибка при получении
* @type {
* 'player_not_found' - аккаунт игрока еще не был создан
* 'project_not_found' - не совпал ID игры или игра не существует
* 'origin_not_allowed' - запрещенный сайт
* 'internal_error' - что-то пошло не так
* другое - любая ошибка не связанная с сервисом
* }
*/
gp.files.on('error:fetch', (error) => {});
//Подписка на события
private void OnEnable()
{
GP_Files.OnFetchError += OnFetchError;
GP_Files.OnFetchSuccess += OnFetchSuccess;
}
//Отписка от событий
private void OnDisable()
{
GP_Files.OnFetchMoreError += OnFetchMoreError;
GP_Files.OnFetchMoreSuccess += OnFetchMoreSuccess;
}
//Ошибка при получении
private void OnFetchError() => Debug.Log("FETCH FILE: ERROR");
// Успешное получение
private void OnFetchSuccess(List<FileData> data, bool canLoadMore)
{
Debug.Log("FETCH FILE: CAN LOAD MORE: " + canLoadMore);
for (int i = 0; i < data.Count; i++)
{
Debug.Log("FETCH FILE: ID: " + data[i].id);
Debug.Log("FETCH FILE: NAME: " + data[i].name);
Debug.Log("FETCH FILE: PLAYER ID: " + data[i].playerId);
Debug.Log("FETCH FILE: SIZE: " + data[i].size);
Debug.Log("FETCH FILE: SRC: " + data[i].src);
for (int x = 0; x < data[i].tags.Length; x++)
{
Debug.Log("FETCH FILE: TAGS: " + data[i].tags[x]);
}
}
}
Подгрузить еще
+1 RequestЗагрузить следующую партию файлов с нужными настройками:
- JavaScript
- Unity
// поведение по умолчанию
const result = await gp.files.fetchMore();
const {
/**
* Массив файлов
* @type {FileInfo[]}
*/
items,
/**
* Проверка на возможность подгрузить еще
* @type {boolean}
*/
canLoadMore
} = result;
// следующая партия с тегом replay,
// только загруженных моим игроком,
// загружать по 10 штук
gp.files.fetchMore({
tags: ['replay'],
playerId: gp.player.id,
limit: 10
});
// поведение по умолчанию
public void FetchMore() => GP_Files.FetchMore();
// с настройками
public void FetchMoreWithFilter()
{
FilesFetchFilter filter = new FilesFetchFilter();
filter.tags = ['replay'],
filter.playerId = gp.player.id,
filter.limit = 10
GP_Files.FetchMore(filter);
}
События подгрузки
- JavaScript
- Unity
// Успешная подгрузка
gp.files.on('fetchMore', (result) => {});
/**
* Ошибка при подгрузке
* @type {
* 'player_not_found' - аккаунт игрока еще не был создан
* 'project_not_found' - не совпал ID игры или игра не существует
* 'origin_not_allowed' - запрещенный сайт
* 'internal_error' - что-то пошло не так
* другое - любая ошибка не связанная с сервисом
* }
*/
gp.files.on('error:fetchMore', (error) => {});
//Подписка на события
private void OnEnable()
{
GP_Files.OnFetchMoreError += OnFetchMoreError;
GP_Files.OnFetchMoreSuccess += OnFetchMoreSuccess;
}
//Отписка от событий
private void OnDisable()
{
GP_Files.OnFetchMoreError -= OnFetchMoreError;
GP_Files.OnFetchMoreSuccess -= OnFetchMoreSuccess;
}
//Ошибка при подгрузке
private void OnFetchMoreError() => Debug.Log("FETCH MORE FILE: ERROR");
// Успешная подгрузка
private void OnFetchMoreSuccess(List<FileData> data, bool canLoadMore)
{
Debug.Log("FETCH MORE FILE: CAN LOAD MORE: " + canLoadMore);
for (int i = 0; i < data.Count; i++)
{
Debug.Log("FETCH MORE FILE: ID: " + data[i].id);
Debug.Log("FETCH MORE FILE: NAME: " + data[i].name);
Debug.Log("FETCH MORE FILE: PLAYER ID: " + data[i].playerId);
Debug.Log("FETCH MORE FILE: SIZE: " + data[i].size);
Debug.Log("FETCH MORE FILE: SRC: " + data[i].src);
for (int x = 0; x < data[i].tags.Length; x++)
{
Debug.Log("FETCH MORE FILE: TAGS: " + data[i].tags[x]);
}
}
}
Поля файла
- JavaScript
- Unity
/**
* ID файла
* @type {string}
*/
file.id
/**
* ID Игрока, опубликовавшего файл или 0
* @type {number}
*/
file.playerId
/**
* Имя файла с расширением
* @type {string}
*/
file.name
/**
* Ссылка
* @type {string}
*/
file.src
/**
* Размер файла, Байт
* @type {number}
*/
file.size
/**
* Массив тегов
* @type {string[]}
*/
file.tags
public class FileData
{
//ID файла
public string id;
//ID Игрока, опубликовавшего файл или 0
public int playerId;
//Имя файла с расширением
public string name;
//Ссылка
public string src;
//Размер файла, Байт
public float size;
//Массив тегов
public string[] tags;
}
Оставайтесь на связи
С другими разделами документации вы можете ознакомиться здесь. Для начала работы вы можете ознакомиться с нашими туториалами.
Сообщество GamePush в Telegram
: @gs_community.
Для ваших обращений e-mail
: [email protected]
Желаем вам успехов!