In-App-Purchases и с чем их едят

3,378 views

Published on

Доклад Никиты Луценко на iPhoneDevCamp Kyiv, 21 ноября

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,378
On SlideShare
0
From Embeds
0
Number of Embeds
433
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • In-App-Purchases и с чем их едят

    1. 1. In-App Purchases и с чем их едят...
    2. 2. Что такое In-App Purchases?
    3. 3. Типы • Consumables • UnConsumables • Subscriptions
    4. 4. Основы
    5. 5. Встроенная модель • Позволяет разблокировать features внутри приложения • Все features должны быть встроены в само приложение StoreKit не отвечает за все манипуляции после подтверждения покупки
    6. 6. Серверная модель • Позволяет «отправлять» features с сервера • «Мы в ответе за тех кого приручили»
    7. 7. Принципы работы
    8. 8. Как это работает?
    9. 9. Получение информации о продуктах
    10. 10. Продажи
    11. 11. Примеры кода 1. Доступен ли магазин if ([[SKPaymentQueue defaultQueue] canMakePayments]) { ... // Тут показываем пользователю магазин } else { ... // Магазин недоступен - делаем что-либо другое } 2. Получаем информацию о продуктах - (void) requestProductData { SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers: [NSSet setWithObject: kMyFeatureIdentifier]]; request.delegate = self; [request start]; } - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { NSArray *myProduct = response.products; // Показываем графический интерфейс тут [request autorelease]; }
    12. 12. 3. Добавляем собственный Observer MyStoreObserver *observer = [[MyStoreObserver alloc] init]; [[SKPaymentQueue defaultQueue] addTransactionObserver:observer]; 4. Добавляем в queue - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions { for (SKPaymentTransaction *transaction in transactions) { switch (transaction.transactionState) { case SKPaymentTransactionStatePurchased: [self completeTransaction:transaction]; break; case SKPaymentTransactionStateFailed: [self failedTransaction:transaction]; break; case SKPaymentTransactionStateRestored: [self restoreTransaction:transaction]; default: break; } } }
    13. 13. 5. Завершаем транзакцию - (void) completeTransaction: (SKPaymentTransaction *)transaction { // Приложение использует вот эти две собственных функции. [self recordTransaction: transaction]; [self provideContent: transaction.payment.productIdentifier]; // Убираем транзакцию из queue. [[SKPaymentQueue defaultQueue] finishTransaction: transaction]; } 6. Восстановленная транзакция - (void) restoreTransaction: (SKPaymentTransaction *)transaction { [self recordTransaction: transaction]; [self provideContent: transaction.originalTransaction.payment.productIdentifier]; [[SKPaymentQueue defaultQueue] finishTransaction: transaction]; } 7. Неуспешная транзакция - (void) failedTransaction: (SKPaymentTransaction *)transaction { if (transaction.error.code != SKErrorPaymentCancelled) { // Тут показываем ошибку в UI } [[SKPaymentQueue defaultQueue] finishTransaction: transaction]; }
    14. 14. 8. Последние штрихи SKPayment *payment = [SKPayment paymentWithProductIdentifier:kMyFeatureIdentifier]; [[SKPaymentQueue defaultQueue] addPayment:payment]; или SKMutablePayment *payment = [SKMutablePayment paymentWithProductIdentifier:kMyFeatureIdentifier]; payment.quantity = 3; [[SKPaymentQueue defaultQueue] addPayment:payment];
    15. 15. Немного JSON HTTP POST. https://buy.itunes.apple.com/verifyReceipt { "receipt-data" : "(NSData*)transactionReceipt + base64" } Ответ сервера { "status" : 0 "receipt" : { ... } }
    16. 16. JSON quantity Кол-во приобретенных продуктов product_id Идентификатор купленного продукта. То же самое мы получаем при productIdentifier из SKPayment. transaction_id Идентификатор транзакции. То же самое мы получаем из transactionIdentifier нашей транзакции. purchase_date Время и дата покупки. То же самое мы получаем из transactionDate нашей транзакции. original_transaction_id Индетификатор изначальной транзакции. original_purchase_date Время и дата оригинальной транзакции. app_item_id Идентификатор приложения от Apple. Недоступен в режиме Sandbox. version_external_identifier Ревизия приложения. Недоступно в режиме Sandbox. bid Bundle нашего приложения. bvrs Версия нашего приложения.
    17. 17. Всем Спасибо. Вопросы? Контакты skype: soul.odessa email: soul.odessa@gmail.com icq: 207627325

    ×