Начисление предметов в инвентарь на базе решения Иксоллы

Иксолла предоставляет решение для реализации инвентаря игрока на базе продукта Внутриигровой магазин (Инвентарь игрока). Это решение позволяет синхронизировать все покупки и премиальные награды пользователя на разных платформах.

Вы можете начислять в Инвентарь игрока предметы, купленные с помощью стороннего платежного интерфейса (например, Google Play In-App Purchase).

Предметы начисляются в инвентарь при вызове серверного метода API Grant items to users. Если для серверной части приложения вы используете Firebase, используйте готовую облачную функцию:

  1. Добавьте облачную функцию в ваш проект Firebase.
  2. Реализуйте логику вызова функции.

Добавление облачной функции в проект Firebase

  1. Инициализируйте свой проект Firebase.
  2. Импортируйте функцию начисления предметов в инвентарь, где:
    • <MerchantID>ID продавца, который можно найти в Личном кабинете в разделе Настройки проекта > Вебхуки.
    • <ProjectID>ID проекта, который можно найти в Личном кабинете в разделе Настройки проекта > ID проекта.
    • <ApiKey>Ключ API, который можно найти в Личном кабинете в разделе Настройки компании > Ключ API.

Код функции начисления предметов в инвентарь:

Copy
Full screen
Small screen
const merchantId = "<MerchantID>";
const projectId = "<ProjectID>";
const apiKey = "<ApiKey>";

exports.redeem = functions.https.onRequest((request, response) => {
  const sku = request.body.sku;
  const quantity = request.body.quantity;
  const userId = request.body.user_id;

  const authHeader = Buffer.from(`${merchantId}:${apiKey}`).toString("base64");

  const postData = JSON.stringify(
      [{
        "comment": "Purchased by Google Pay",
        "platform": "xsolla",
        "user": {
          "id": userId,
        },
        "items": [{
          "sku": sku,
          "quantity": quantity,
        }],
      }]
  );

  const options = {
    hostname: "store.xsolla.com",
    port: 443,
    path: `/api/v2/project/${projectId}/inventory/reward`,
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "Content-Length": postData.length,
      "Authorization": `Basic ${authHeader}`,
    },
  };

  const req = https.request(options, (res) => {
    if (res.statusCode == 200) {
      response.status(200).send();
      return;
    }
    if (res.statusCode == 404) {
      response.status(404).send();
      return;
    }
    if (res.statusCode == 401) {
      response.status(401).send();
      return;
    }
    response.status(400).send();

    res.on("data", (d) => {
      process.stdout.write(d);
    });
  });
  req.on("error", (e) => {
    response.status(500).send(e.message);
  });

  req.write(postData);
  req.end();
});

  1. Запустите функцию в боевой среде в соответствии с примером.

Вызов функции из приложения

Чтобы начислить предметы в инвентарь, добавьте логику для вызова функции из приложения, укажите имя функции — redeem, передайте в нее параметры sku, quantity, user_id.

Для некоторых платежных интерфейсов (например, Google Play In-App Purchase) требуется, чтобы логика начисления предмета в инвентарь инициировалась на клиенте приложения. В этом случае реализуйте клиентский метод вызова функции redeem.

В качестве примера реализации для Android вы можете использовать модуль xsolla-googleplay-sdk, позволяющий начислять в инвентарь покупки из Google Play In-App Purchase.

Чтобы применить пример в своем проекте:

  1. Запустите Android Studio.
  2. В свой проект добавьте модуль xsolla-googleplay-sdk.
  3. Инициализируйте библиотеку. Для этого добавьте следующую строку в ваш исходный код проекта Android, где <your-deployment-host> — хост URL-адреса облачной функции (например, https://us-central1-xsolla-sdk-demo.cloudfunctions.net):

Copy
Full screen
Small screen
InventoryAdmin.init("<your-deployment-host>")

URL-адрес облачной функции выводится в командной строке Firebase после запуска функции в боевой среде. Также URL-адрес функции доступен в консоли Firebase в разделе Functions > Dashboard.

  1. Реализуйте вызов метода InventoryAdmin.grantItemToUser (sku, userId, quantity, callback) согласно логике приложения. Данные об успешности начисления товара в инвентарь возвращает функция обратного вызова.

Была ли статья полезна?
Спасибо!
Что может сделать страницу еще лучше? Сообщение
Жаль, что так произошло
Расскажите, почему статья не была полезна. Сообщение
Спасибо за обратную связь!
Ваши мысли и идеи помогут нам улучшить ваш пользовательский опыт.
Оценить страницу
Оценить страницу
Что может сделать страницу еще лучше?

В другой раз

Спасибо за обратную связь!
Последнее обновление: 18 октября 2021

Нашли опечатку или ошибку в тексте? Выделите ее и нажмите Ctrl+Enter.

Сообщите о проблеме
Мы постоянно улучшаем качество нашей документации. Ваш отзыв поможет нам в этом.
Укажите email-адрес, чтобы мы могли связаться с вами
Спасибо за обратную связь!