Всем привет!

Если вы читаете данный пост то, наверняка вы прочитали первую его часть – In-App Purchase: Полное руководство #1.

Итак продолжим. Мы создали App ID, добавили приложение в iTunes Connect, добавили In-App Purchase Product, сделали все необходимые настройки, написали код для извлечения product description и, – успешно извлекли его! Мы выбрались!

good_year2

Теперь осталось дело за малым.

8. Пишем код для осуществления покупки In-App Purchase

Итак. Первое, что вы должны понимать это то, что вы ответственны за UI организации процесса покупки. StoreKit не содержит никаких UI элементов. Но, если вы внимательно читали первую часть, то наверняка обратили внимание на header InAppPurchaseManager.h

Это нотификации, которые мы будем посылать в InAppPurchaseManager в случае успеха или провала, и на которые нужно подписать ваш UIViewController:

Весь код далее это backend для процесса осуществления транзакции. Это простой класс с простым API, который вне UI и может вызываться для осуществления покупки.

Наш менеджер покупок должен отвечать протоколам

И теперь, собственно, сам код.

Несколько слов о том, как это работает в целом.

Когда мы загружаем вьюху с нашим продуктом, мы вызываем публичный метод loadStore, который в свою очередь вызывает requestProUpgradeProductData, который возвращает в метод делегата productsRequest:didReceiveResponse: наш response с productID – это то, что мы делали в первой части.

После этого мы нажимаем кнопку “Купить”. По нажатию на эту кнопку мы проверяем, можем ли мы совершать покупку и есть ли у нас продукт, который мы хотим купить. Если да, то вызываем purchaseProUpgrade

Последний создает SKPayment и добавляет его в SKPaymentQueue. Далее при каждом изменении транзакции вызовется метод делегата  SKPaymentTransactionObserver – paymentQueue:updatedTransactions: который финализирует процесс покупки.

В данном примере использована очень простая логика сохранения данных о том, что фича куплена

В виду того, что данный подход очень легко взломать, рекомендую использовать более изощренные методы сохранения признака приобретения фич в ваших проектах.

Еще есть такое мнение, что Apple предпочитает, чтобы вы давали пользователю возможность восстанавливать свои покупки, если он, к примеру, удалил приложение, и после установил заново. Мол, кнопка Restore на равне с кнопкой Buy не помешает. Кто-то говорил, что без кнопки Restore даже могут завернуть приложение и не принять в AppStore, хотя я видел массу приложений без нее. 

На этом все. В третьей, заключительной части поговорим о том, как загрузить контент с серверов Apple и как протестировать покупки.

Удачи!

Продолжение следует…

In-App Purchase: Полное руководство – #3