Внутрипрограммные покупки IOS InApp Purchase – популярный способ монетизации приложений. Особенно активно он используется в приложениях под IOS, где сравнительно простой механизм реализации, продуманная система покупок от Apple и платежеспособные пользователи.
В качестве основы можно использовать родной фреймворк Apple StoreKit, но как это часто бывает, при всей его гибкости, для полноценной реализации приходится писать много кода. Поэтому чаще всего используется опенсорсный фреймворк надстройка MKStoreKit. MKStoreKit очень распространенный и популярный фреймворк, имеет большое комьнити и постоянно обновляется. Это плюс, при этом он также реализует несколько различных схем покупок, в том числе с использованием своего сервера. Часто можно встретить критику фреймворка связанную с его относительной сложностью кода и тем что его реализация по сути инкапсулирована от программиста, а многим из них всегда нужно изобрести велосипед и сосбствено это и является обьектом критики.
MKStoreKit – выполнен в виде синглтона и дополнительных обьектов реализующих полноценную подсистему внутриигровых покупок. Далее мы посмотрим как это работает.
Для общей информации (c хабра)
In-App Purchases бывает трех типов:
• Consumables• Non-Consumables • Subscriptions
Consumable — потребляемый тип. Purchase такого типа может покупаться несколько раз. Например, игрок покупает себе энергию, которая со временем растрачивается и приходится покупать ее заново, либо ждать три часа, пока энергия восстановится.
Non-Consumable — непотребляемый тип. Purchase покупается только один раз. Его обычно используют для разблокировки новых тем, дополнительных уровней и т.п.Subscription — подписка на что-либо. Например, Вы можете написать iPhone-приложение для Web-сервиса, в котором есть Premium аккаунт, открывающий дополнительные возможности. С помощью Subscription Вы сможете аккаунт активировать, скажем, на месяц или на год.
Реализовать In-App Purchases можно с помощью двух моделей:
- Встроенная модель
- Серверная модель
Встроенная модель позволяет разблокировать фичи. Как правило, использование данной модели побуждает разработчиков встраивать их в приложение зарание. При такой реализации, StoreKit отвечает только за оплату фичи. В общем случае, с помощью StoreKit мы можем узнать прошла ли покупка или не прошла.Серверная модель является более гибкой. В модели принимают участие три сущности: iPhone-приложение, сервер Apple и наш сервер. Все новые фичи хранятся на нашем сервере, поэтому нет необходимости обновлять приложение при добавлении новых фич или продуктов. Работает модель следующим образом:
1. iPhone-приложениез апрашивает список продуктов у своего сервера,
2. iPhone-приложение отображает новые продукты пользователю,
3. Пользователь покупает(или не покупае т:))
4. iPhone-приложение запрашивает покупку у сервера Apple через StoreKit,5. StoreKit возвращает ответ,
6. iPhone-приложение отсылает ответ на свой сервер
7. Еще раз проверяется ответ(обязательно проверяется, что ответ пришел от Apple)8. После этого iPhone-приложение скачивает со своего сервера новый продукт.
Для начала нам нужно приложение с созданным bundle id и профилем в iTunes Connect. В iTunes Connect создаем тестового пользователя под которым будут тестироваться покупки. В приложении нажимаем кнопочку Manage In-‐App Purchases.
Создаем необходимое количество продуктов необходимого нам типа и назначаем им ID. Рекомендуется создавать его из bundle id + текст описание. Например bundleid.Feature1 или bundleid.100coins
MKStoreKit качается отсюда: https://github.com/MugunthKumar/MKStoreKit
В файле MKStoreKitConfigs.plist формируем наши продукты для продажи, выбираем тип продажи и добавляем необходимое количество продуктов. Соответственно Value этих строк должно соответствовать id продуктов из iTunes Connect
#import «MKStoreManager.h»
Также нам нужно инициализировать синглтон фреймворка.
[MKStoreManager sharedManager] ;
Я обычно делаю это там где у меня начинают подгружаться ресурсы. Например при запуске приложения. В этот момент просто произойдет инициализация объекта. В отладочной консоли при этом выведется список продуктов соответствующих нашему приложению. Это указывает на корректность работы фреймворка.
Далее все очень просто. В том месте где нам нужно совершить покупку, например при нажатии на кнопку использует такой код
[[MKStoreManager sharedManager] buyFeature:@»id вашего инаппа» onComplete:^(NSString* purchasedFeature, NSData*purchasedReceipt, NSArray* availableDownloads)
{
NSLog(@»Purchased: %@», purchasedFeature);
// необходимые действия по факту покупки (убрать баннер например)} {
} ];
По ходу логики программы можно использовать проверки на покупку
if([MKStoreManager isFeaturePurchased:@» id вашего инаппа «])
{
_banner.hidden=YES;
}
onCancelled:^ NSLog(@»User Cancelled Transaction»);
Для тестирования нужно выйти из магазина AppStore через ‘Settings-‐>Store-‐>Sign Out’.
При попытке купить что-‐либо вам будет предложено авторизоваться. Обязательно под тестовым пользователем, которого мы создавали в начале.!
В режиме тестирования в диалогах будет такая надпись [Environment: sandbox]
Все тестовые покупки можно удалить конструкцией
[[MKStoreManager sharedManager] removeAllKeychainData]; Хотя по факту это не удаление покупки а очистка закешированной информации о покупке. При попытке купить что-то еще раз будет сообщение что уже купили и произойдет покупка без списания денег.
Вот собственно и все .
Хотя конечно это не все, ведь есть многофакторная схема покупок, использование своего сервера и подписки… Доживем и до этого:).
Комментариев нет