Как настроить кросс-платформенный инвентарь
Как это работает
Кросс-платформенный инвентарь позволяет синхронизировать инвентарь пользователя в игре на разных платформах публикации (Steam, EGS, PlayStation, XBox и т. д.), получать данные об инвентаре и балансе пользователя и управлять ими.
Синхронизация обеспечивается выполнением следующих шагов:
- Игрок привязывает свои аккаунты на платформах к единому аккаунту, который обеспечивает идентификацию конкретного игрока на разных платформах.
- Xsolla обеспечивает механизм связывания аккаунтов платформ с единым аккаунтом и объединение инвентаря на платформах.
Компоненты решения включают в себя:
- Клиент игры
- Сервер игры
- Веб-приложение с интерфейсом привязки аккаунтов
- Авторизацию Иксолла (Xsolla Login), обеспечивающую наличие единого аккаунта и механизм связывания аккаунтов
- Инвентарь игрока (Xsolla Player Inventory) для хранения инвентаря игрока
Сценарий пользователя
Для привязки аккаунта онлайн-платформы (Steam, EGS) к единому аккаунту необходимо реализовать идентификацию пользователей в игре, используя учетную запись Авторизации Иксолла, либо использовать алгоритм привязки аккаунта для консольных платформ.
Алгоритм привязки аккаунта консольной платформы к единому аккаунту реализован следующим образом:
- Игрок впервые совершает вход в игру на консольной платформе.
- В интерфейсе игры отображается предложение выполнить привязку аккаунта платформы к единому аккаунту игры.
- Если игрок подтверждает действие:
- Осуществляется переход в стороннее приложение (например, сайт игры или мобильное приложение), где игрок авторизуется в едином аккаунте игры или создает его.
- После авторизации в приложении отображается буквенно-цифровой код привязки.
- Игрок возвращается к консольной версии игры и вводит код.
- Осуществляется привязка аккаунта платформы к единому аккаунту с выводом сообщения на экране консоли.
- Инвентарь игрока на платформе объединяется с инвентарем, привязанным к единому аккаунту.
Для кого подходит
Для разработчиков игр, которые планируют релиз игры на нескольких платформах публикации и хотят повысить лояльность игроков, предоставляя им доступ к единому списку покупок и наград на любой платформе.
Как настроить
Чтобы подключить кросс-платформенный инвентарь:
- Подключите Инвентарь игрока. В части аутентификации необходимо реализовать базовую HTTP-аутентификацию для работы с серверными методами и аутентификацию через Авторизацию Иксолла по протоколу OAuth 2.0 для работы с клиентскими методами. OAuth 2.0 авторизация также необходима для доступа к методам Login API и реализации методов привязки аккаунтов.
- Реализуйте интерфейс для связывания аккаунтов, включая:
- авторизацию и управление инвентарем на сервере игры;
- авторизацию и управление инвентарем на клиенте игры;
- методы привязки аккаунтов.
Интерфейс для связывания аккаунтов
В интерфейсе для связывания аккаунтов должны быть реализованы следующие возможности:
- Предложение связать аккаунт платформы с единым аккаунтом.
- Возможность согласиться или отказаться от привязки.
- Поле для ввода кода привязки, если пользователь согласился на привязку.
- Отображение ссылки на мобильное или веб-приложение, в котором пользователь может осуществить привязку аккаунта платформы к единому аккаунту.
Механизм авторизации пользователей в едином аккаунте реализуется следующим образом:
- Интегрируйте виджет Авторизации Иксолла в приложение.
- При авторизации игрока через виджет, в приложение передается JWT. Реализуйте отправку JWT из приложения в метод получения кода привязки и вывод кода привязки в приложении.
- Реализуйте на стороне сервера игры авторизацию игрока через токен.
- При переходе игрока в консольную версию игры и вводе кода привязки реализуйте передачу токена,
user_id
пользователя на консольной платформе и ID платформы в метод привязки к единому аккаунту.
Авторизация на сервере игры
Чтобы получить доступ к методам Login API для работы с инвентарем игрока на сервере игры, необходимо настроить OAuth 2.0 авторизацию и получить серверный токен доступа.
client_id
и client_secret
, обратитесь к персональному менеджеру проекта или напишите на csm@xsolla.com.Запрос:
- php
<?php
$uri = 'https://login.xsolla.com/api/oauth2/token';
$body = [
'grant_type' => 'client_credentials',
'client_id' => 1,
'client_secret' => 'client_secret'
];
$headers = [
'Content-type: application/x-www-form-urlencoded'
];
$request = curl_init($uri);
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
curl_setopt($request, CURLOPT_POST, true);
curl_setopt($request, CURLOPT_POSTFIELDS, http_build_query($body));
curl_setopt($request, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($request);
print_r($response);
Ответ:
- php
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
"token_type":"bearer",
"expires_in":3600,
"scope": ""
}
Управление инвентарем игрока на сервере игры
Для работы с инвентарем игрока доступны следующие серверные методы:
В указанные методы необходимо передавать user_id
пользователя на платформе и ID платформы.
Авторизация на клиенте игры
Реализуйте вызов метода для получения JWT, который будет использоваться для работы с инвентарем игрока на клиенте игры. В запросе необходимо передать:
server_custom_id
— уникальный ID пользователя в игре.social_profile.user_id
— уникальный ID пользователя на платформе.
Запрос:
- php
<?php
$uri = 'https://login.xsolla.com/api/users/login/server_custom_id';
$queryParams = [
'publisher_project_id' => 44056
];
$queryParamsString = '?' . http_build_query($queryParams);
$body = '
{
"server_custom_id": "1234567890asdfghjkl",
"social_profile": {
"platform": "xbox_live",
"user_id": "4352354"
}
}
';
$headers = [
'Content-type: application/json',
'x-server-authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c'
];
$request = curl_init($uri . $queryParamsString);
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
curl_setopt($request, CURLOPT_POSTFIELDS, $body);
curl_setopt($request, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($request);
Ответ:
- php
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
}
Управление инвентарем игрока на клиенте игры
Для работы с инвентарем игрока доступны следующие клиентские методы:
Для управления инвентарем игрока на консольных платформах:
- Реализуйте передачу ID платформы в клиентские методы для соблюдения требования о хранении баланса премиальной валюты на стороне консольных платформ публикации.
- Реализуйте на сервере игры следующие шаги для работы с инвентарем пользователя на консольном клиенте:
- Игра получает серверный токен доступа для токенизации пользователей.
- Игра получает JWT по
user_id
пользователя на платформе и ID платформы. - Игра передает JWT в указанные клиентские методы.
Методы привязки аккаунтов
Получение кода привязки
Реализуйте вызов метода для получения кода привязки, чтобы передать его пользователю.
Запрос:
- js
var data = null;
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === this.DONE) {
console.log(this.responseText);
}
});
xhr.open("GET", "https://login.xsolla.com/api/users/account/code");
xhr.setRequestHeader("authorization", "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE5NjIyMzQwNDgsImlzcyI6Imh0dHBzOi8vbG9naW4ueHNvbGxhLmNvbSIsImlhdCI6MTU2MjE0NzY0OCwidXNlcm5hbWUiOiJ4c29sbGEiLCJ4c29sbGFfbG9naW5fYWNjZXNzX2tleSI6IjA2SWF2ZHpDeEVHbm5aMTlpLUc5TmMxVWFfTWFZOXhTR3ZEVEY4OFE3RnMiLCJzdWIiOiJkMzQyZGFkMi05ZDU5LTExZTktYTM4NC00MjAxMGFhODAwM2YiLCJlbWFpbCI6InN1cHBvcnRAeHNvbGxhLmNvbSIsInR5cGUiOiJ4c29sbGFfbG9naW4iLCJ4c29sbGFfbG9naW5fcHJvamVjdF9pZCI6ImU2ZGZhYWM2LTc4YTgtMTFlOS05MjQ0LTQyMDEwYWE4MDAwNCIsInB1Ymxpc2hlcl9pZCI6MTU5MjR9.GCrW42OguZbLZTaoixCZgAeNLGH2xCeJHxl8u8Xn2aI");
xhr.send(data);
Ответ:
- js
{
"code": "123456"
}
Привязка к единому аккаунту
Реализуйте вызов метода для привязки аккаунта платформы к единому аккаунту, где:
code
— код привязки;publisher_project_id
— ID проекта из Личного кабинета Xsolla;user_id
— ID пользователя на платформе.
Убедитесь, что перед вызовом метода выполнены следующие шаги:
- Реализован интерфейс отображения кода привязки пользователю и форма для ввода полученного кода.
- Реализован метод получения серверного токена для авторизации.
- Реализован метод получения кода привязки.
Запрос:
- php
<?php
$uri = 'https://login.xsolla.com/api/users/account/link';
$body = '
{
"code": "234155",
"platform": "xbox_live",
"publisher_project_id": "12423354",
"user_id": "4352354"
}
';
$headers = [
'Content-type: application/x-www-form-urlencoded',
'x-server-authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c'
];
$request = curl_init($uri);
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
curl_setopt($request, CURLOPT_POSTFIELDS, $body);
curl_setopt($request, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($request);
Ответ:
- php
204 OK
Список платформ
Платформа | ID платформы | Комментарий |
---|---|---|
PlayStation Network | playstation_network | - |
XBox Live | xbox_live | - |
PC Standalone | pc_standalone | - |
Nintendo eShop | nintendo_shop | - |
Google Play | google_play | - |
Apple Store | app_store_ios | - |
Android (независимая продажа) | android_standalone | Игра публикуется индивидуально вне магазинов. |
IOS (независимая продажа) | ios_standalone | Игра публикуется индивидуально вне магазинов. |
Android (альтернативный магазин) | android_other | Игра публикуется в альтернативном PlayMarket-магазине. |
IOS (альтернативный магазин) | ios_other | Игра публикуется в альтернативном AppStore-магазине. |
PC (альтернативный магазин) | pc_other | - |
Xsolla | xsolla | - |
Была ли статья полезна?
Оценить страницу
В другой раз
Спасибо за обратную связь!
Нашли опечатку или ошибку в тексте? Выделите ее и нажмите Ctrl+Enter.