Подписки
Обрабатывайте рекуррентные платежи игроков.
Обзор
Сервис позволяет вашим игрокам оформлять подписки. Например, покупать VIP-доступ, требующий ежемесячного продления. Платежи за товары и платежи за подписки различаются периодичностью списания средств со счета пользователя. Разовые платежи списываются один раз за одну покупку, а платежи за подписки — с некоторой периодичностью.
- Подписки лучше всего подойдут для VIP-аккаунтов и продажи бонусов, облегчающих прохождение игры или увеличивающих игровые показатели.
- Подписки можно использовать и для доступа к регулярно обновляющемуся контенту, например к новым уровням или персонажам.
Таким образом, подписка по своей сути является товаром, который имеет такие поля как:
Поле | Тип | Описание | Пример |
---|---|---|---|
isSubscription | boolean | Покупка является подпиской | по умолчанию false |
period | number | Длительность подписки в днях | 7 , 30 , 90 |
trialPeriod | number | Длительность триального периода в днях (за это время пользователь может без списания средств отменить подписку) | 0 , 3 , 7 , 30 |
В SDK вам доступна информация по купленным подпискам игрока, они расширяют стандартную покупку.
Поле | Тип | Описание | Пример |
---|---|---|---|
subscribed | boolean | Проверка активности подписки на покупку | true |
expiredAt | string | Дата завершения подписки, формат ISO 8601 UTC | 2022-12-01T04:52:26+0000 |
Поддерживаемые площадки
Площадки без поддержки
Поддерживаемые площадки (разовые подписки)
Площадки без поддержки
Для проверки поддержки подписок на площадке в SDK используйте свойство isSubscriptionsAvailable
.
- JavaScript
- Unity
// Проверка поддержки подписок на платформе
if (gp.payments.isSubscriptionsAvailable) {
// можно оформлять подписки
}
// Проверка поддержки платежей на платформе
if (GP_Payments.IsSubscriptionsAvailable()) {
// можно оформлять подписки
}
Период подписки и тестовый период
Период указывается в днях. Для тестового периода доступны: 0
, 3
, 7
и 30
дней. Тестовый период - это период, когда с игрока не снимаются деньги и он может безвозмездно отменить подписку. По завершению тестового периода площадка списывает средства.
Срок действия подписки можно указать в 7
, 30
и 90
дней. Подписка автоматически продлится при завершении периода, если она не была отменена пользователем (игроком).
Предложенные периоды в 7
, 30
и 90
дней обусловлены единой реализацией подписок на всех площадках. Некоторые площадки разрешают только такие значения.
Работа с подписками
Подключение подписок на площадках
Настройки площадок описаны в разделе платежей, ничего с технической стороны дополнительно не требуется. Обратите внимание на особенности работы с площадками.
Добавление подписки
Для включения подписки нужно выбрать покупку и перевести ее в статус подписки с помощью тумблера "Включить подписку".
Теперь вы можете оформлять подписку на этот товар.
Если купить подписку через метод покупки purchase
, то она будет оформлена как подписка без автоматического продления и израсходуется через указанный в покупке период
Оформление подписки
+1-3 RequestДля оформления подписки воспользуйтесь методом subscribe
.
- JavaScript
- Unity
// По ID
gp.payments.subscribe({ id: 12 });
// По тегу
gp.payments.subscribe({ tag: 'VIP' });
// По ID
GP_Payments.Subscribe("12");
// По тегу
GP_Payments.Subscribe("VIP");
Результат вызова можно узнать предварительно подписавшись на события subscribe
.
- JavaScript
- Unity
// Игрок оформил подписку
gp.payments.on('subscribe', ({ product, purchase }) => {});
// Подписка не оформлена
gp.payments.on('error:subscribe', (error) => {});
public void Subscribe() => GP_Payments.Subscribe("VIP", OnSubscribeSuccess, OnSubscribeError);
// Игрок оформил подписку
private void OnSubscribeSuccess(string idOrTag) => Debug.Log("SUBSCRIBE: SUCCESS: " + idOrTag);
// Подписка не оформлена
private void OnSubscribeError() => Debug.Log("SUBSCRIBE: ERROR");
При асинхронном использовании:
- JavaScript
- Unity
const result = await gp.payments.subscribe({ id: 17541 });
/**
* Данные продукта
* @type {Product}
*/
result.product;
/**
* Данные покупки
* @type {PlayerPurchase}
*/
result.purchase;
Не реализовано
Отмена подписки
+0-1 RequestУ игрока должна быть возможность отписаться от подписки. Для отмены подписки используйте метод unsubscribe
Отмена подписки не значит удаление покупки игрока. Покупка будет действовать до окончания периода.
- JavaScript
- Unity
// По ID
gp.payments.unsubscribe({ id: 12 });
// По тегу
gp.payments.unsubscribe({ tag: 'VIP' });
// По ID
GP_Payments.Unsubscribe("12");
// По тегу
GP_Payments.Unsubscribe("VIP");
Результат вызова можно узнать предварительно подписавшись на события unsubscribe
- JavaScript
- Unity
// Игрок отменил подписку
gp.payments.on('unsubscribe', ({ product, purchase }) => {});
// Не удалось отменить подписку
gp.payments.on('error:unsubscribe', (error) => {});
public void Unsubscribe() => GP_Payments.Unsubscribe("VIP", OnUnsubscribeSuccess, OnUnsubscribeError);
// Игрок отменил подписку
private void OnUnsubscribeSuccess(string idOrTag) => Debug.Log("UNSUBSCRIBE: SUCCESS: " + idOrTag);
// Не удалось отменить подписку
private void OnUnsubscribeError() => Debug.Log("UNSUBSCRIBE: ERROR");
При асинхронном использовании:
- JavaScript
- Unity
const result = await gp.payments.unsubscribe({ id: 17541 });
/**
* Данные продукта
* @type {Product}
*/
result.product;
/**
* Данные покупки
* @type {PlayerPurchase}
*/
result.purchase;
Не реализовано
Возобновление подписки
+0-3 RequestПосле отмены подписки, пока она еще действует, есть возможность возобновить подписку. Для возобновления подписки вызовите еще раз метод подписки subscribe для того же товара.
Тестирование подписок
Мы подготовили для вас удобный инструмент тестирования подписок без необходимости тестировать на площадках напямую.
Тестовые подписки автоматически продлеваются по истечению срока. Для тестирования истечения подписки вы можете в панели управления выставить дату истечения подписки на прошлый день. Каждые 10 минут мы удаляем просроченные подписки.
После отмены подписка будет еще действовать до истечения срока, затем будет удалена. Вы можете возобновить подписку, пока она еще действует.
Интерфейс изменения время истечения подписки:
Особенности работы с площадками
Разовые подписки
На Яндекс.Играх, VK Play и Kongregate нет функционала подписок, однако мы обеспечили единую логику работы. Можно оформить подписку, которая не будет продлена, а после завершения периода подписки будет удалена. Это будет работать как разовая покупка, но с автоматическим консумированием при истечении.
Одноклассники
Перед тем как использовать подписки необходимо подать заявку в техподдежку с указанием подробной инофорации о товарах, на которые нужно оформить подписку. В идентификаторе товара укажите ID товара в админке GamePush.
Не удаляйте опубликованные подписки и не меняйте в них информацию о периодах. Данные хранятся на стороне Одноклассников. Сначала внесите изменения в Одноклассниках.
Примеры реализации
Проверка товара. Может возникнуть ситуация, когда необходимо проверить факт того, что товар является подпиской. И в зависимости от этой проверки - купить товар, либо оформить на него подписку (если он isSubscription
). Реализация данной проверки показана ниже:
- JavaScript
- Unity
if (product.isSubscription) {
gp.payments.subscribe({ id: product.id });
} else {
gp.payments.purchase({ id: product.id });
}
Не реализовано
Покупка. Пример явной покупки подписки по идентификатору id
:
- JavaScript
- Unity
gp.payments.subscribe({ id: 12 });
GP_Payments.Subscribe("12");
Поля периода подписки. Пример использования полей периода показывает, как можно вывести информацию об остатке триального периода. А также проинформировать игрока об условиях подписки.
$form.setText(`Бесплатно первые ${product.trialPeriod} дней`);
$form.setText(`Затем ${product.price} ${product.currencySymbol} каждые ${product.period} дней`);
Уведомление пользователя. Пример уведомления пользователя о приближении события завершения подписки:
const purchase = gp.payments.getPurchase('VIP');
const timeBetween = new Date(purchase.expiredAt).getTime() - new Date(gs.serverTime).getTime();
const daysBetween = timeBetween / (1000 * 3600 * 24);
if (daysBetween <= 3 && !purchase.subscribed) {
alert('У вас осталось 3 дня подписки, вы ее не возобновили');
}
Оставайтесь на связи
С другими разделами документации вы можете ознакомиться здесь. Для начала работы вы можете ознакомиться с нашими туториалами.
Сообщество GamePush в Telegram
: @gs_community.
Для ваших обращений e-mail
: [email protected]
Желаем вам успехов!