SlideShare uma empresa Scribd logo
1 de 18
In-App Purchases
и с чем их едят...
Что такое In-App
   Purchases?
Типы

• Consumables
• UnConsumables
• Subscriptions
Основы
Встроенная модель
 • Позволяет разблокировать features
   внутри приложения
 • Все features должны быть встроены в
   само приложение


StoreKit не отвечает за все манипуляции после
            подтверждения покупки
Серверная модель


• Позволяет «отправлять» features с
  сервера
• «Мы в ответе за тех кого приручили»
Принципы работы
Как это работает?
Получение информации о продуктах
Продажи
Примеры кода
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];
     }
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;
           }
        }
     }
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];
     }
8.                                    Последние штрихи

 SKPayment *payment = [SKPayment paymentWithProductIdentifier:kMyFeatureIdentifier];
 [[SKPaymentQueue defaultQueue] addPayment:payment];




                                                        или

 SKMutablePayment *payment = [SKMutablePayment paymentWithProductIdentifier:kMyFeatureIdentifier];
 payment.quantity = 3;
 [[SKPaymentQueue defaultQueue] addPayment:payment];
Немного JSON

                HTTP POST.
https://buy.itunes.apple.com/verifyReceipt
   {
       "receipt-data" : "(NSData*)transactionReceipt + base64"
   }




                          Ответ сервера


       {
           "status" : 0
           "receipt" : { ... }
       }
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
Версия нашего приложения.
Всем Спасибо.
      Вопросы?



       Контакты
skype: soul.odessa
email: soul.odessa@gmail.com
icq: 207627325

Mais conteúdo relacionado

Mais procurados

Коротко о React.js
Коротко о React.jsКоротко о React.js
Коротко о React.jsMad Devs
 
CocoaHeads Moscow. Владислав Дугнист. «Dependency Injection с Blood Magic»
CocoaHeads Moscow. Владислав Дугнист. «Dependency Injection с Blood Magic»CocoaHeads Moscow. Владислав Дугнист. «Dependency Injection с Blood Magic»
CocoaHeads Moscow. Владислав Дугнист. «Dependency Injection с Blood Magic»Mail.ru Group
 
Magento - Антон Капля
Magento - Антон КапляMagento - Антон Капля
Magento - Антон Капляmeet_magento
 
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис РечкуновDevDay
 
Rambler.iOS #3: Dependency Injection в iOS
Rambler.iOS #3: Dependency Injection в iOSRambler.iOS #3: Dependency Injection в iOS
Rambler.iOS #3: Dependency Injection в iOSRAMBLER&Co
 
Angular 2: Всех переиграл
Angular 2: Всех переигралAngular 2: Всех переиграл
Angular 2: Всех переигралEugene Zharkov
 
Rambler.iOS #5: VIPER и Swift
Rambler.iOS #5: VIPER и SwiftRambler.iOS #5: VIPER и Swift
Rambler.iOS #5: VIPER и SwiftRAMBLER&Co
 
сервисы в Angular js
сервисы в Angular jsсервисы в Angular js
сервисы в Angular jsyakimchuk
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneCodeFest
 
Selenium: начало работы
Selenium: начало работыSelenium: начало работы
Selenium: начало работыPaul Stashevsky
 
VIQA - Тестирование UI с помощью Виртуального интеллекта
VIQA - Тестирование UI с помощью Виртуального интеллектаVIQA - Тестирование UI с помощью Виртуального интеллекта
VIQA - Тестирование UI с помощью Виртуального интеллектаSQALab
 
Selenium: приемы работы
Selenium: приемы работыSelenium: приемы работы
Selenium: приемы работыPaul Stashevsky
 
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары SoftengiРазработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары SoftengiSoftengi
 
Rambler.iOS #8: Как не стать жертвой бэкендеров
Rambler.iOS #8: Как не стать жертвой бэкендеровRambler.iOS #8: Как не стать жертвой бэкендеров
Rambler.iOS #8: Как не стать жертвой бэкендеровRAMBLER&Co
 

Mais procurados (14)

Коротко о React.js
Коротко о React.jsКоротко о React.js
Коротко о React.js
 
CocoaHeads Moscow. Владислав Дугнист. «Dependency Injection с Blood Magic»
CocoaHeads Moscow. Владислав Дугнист. «Dependency Injection с Blood Magic»CocoaHeads Moscow. Владислав Дугнист. «Dependency Injection с Blood Magic»
CocoaHeads Moscow. Владислав Дугнист. «Dependency Injection с Blood Magic»
 
Magento - Антон Капля
Magento - Антон КапляMagento - Антон Капля
Magento - Антон Капля
 
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
 
Rambler.iOS #3: Dependency Injection в iOS
Rambler.iOS #3: Dependency Injection в iOSRambler.iOS #3: Dependency Injection в iOS
Rambler.iOS #3: Dependency Injection в iOS
 
Angular 2: Всех переиграл
Angular 2: Всех переигралAngular 2: Всех переиграл
Angular 2: Всех переиграл
 
Rambler.iOS #5: VIPER и Swift
Rambler.iOS #5: VIPER и SwiftRambler.iOS #5: VIPER и Swift
Rambler.iOS #5: VIPER и Swift
 
сервисы в Angular js
сервисы в Angular jsсервисы в Angular js
сервисы в Angular js
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows Phone
 
Selenium: начало работы
Selenium: начало работыSelenium: начало работы
Selenium: начало работы
 
VIQA - Тестирование UI с помощью Виртуального интеллекта
VIQA - Тестирование UI с помощью Виртуального интеллектаVIQA - Тестирование UI с помощью Виртуального интеллекта
VIQA - Тестирование UI с помощью Виртуального интеллекта
 
Selenium: приемы работы
Selenium: приемы работыSelenium: приемы работы
Selenium: приемы работы
 
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары SoftengiРазработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
 
Rambler.iOS #8: Как не стать жертвой бэкендеров
Rambler.iOS #8: Как не стать жертвой бэкендеровRambler.iOS #8: Как не стать жертвой бэкендеров
Rambler.iOS #8: Как не стать жертвой бэкендеров
 

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

Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетьюИнтуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетьюГлеб Тарасов
 
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...Denis Tsvettsih
 
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеШкола-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеГлеб Тарасов
 
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Ontico
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Oleksii Okhrymenko
 
Moscow Python Conf 2016. Почему 100% покрытие это плохо?
Moscow Python Conf 2016. Почему 100% покрытие это плохо?Moscow Python Conf 2016. Почему 100% покрытие это плохо?
Moscow Python Conf 2016. Почему 100% покрытие это плохо?Ivan Tsyganov
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн2ГИС Технологии
 
Igor ostuchenko-analytics-110317084549-phpapp01
Igor ostuchenko-analytics-110317084549-phpapp01Igor ostuchenko-analytics-110317084549-phpapp01
Igor ostuchenko-analytics-110317084549-phpapp01Павел Иванов
 
MSI In-Store Pickup Функционал & сложности
MSI In-Store Pickup Функционал & сложностиMSI In-Store Pickup Функционал & сложности
MSI In-Store Pickup Функционал & сложностиMagecom UK Limited
 
Tag Management (рекламный контейнер)
Tag Management (рекламный контейнер)Tag Management (рекламный контейнер)
Tag Management (рекламный контейнер)Michail Гаркунов
 
Аспектно-Ориентированный Подход
Аспектно-Ориентированный ПодходАспектно-Ориентированный Подход
Аспектно-Ориентированный Подходakopium
 
Индексирование в Magento
Индексирование в MagentoИндексирование в Magento
Индексирование в MagentoMagecom Ukraine
 
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersГлеб Тарасов
 
Фреймворк-невиидмка
Фреймворк-невиидмкаФреймворк-невиидмка
Фреймворк-невиидмкаVitebsk Miniq
 
Пластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьПластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьMoscow.pm
 
Knockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-ОнлайнKnockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-ОнлайнDevDay
 
C# Web. Занятие 02.
C# Web. Занятие 02.C# Web. Занятие 02.
C# Web. Занятие 02.Igor Shkulipa
 

Semelhante a In-App-Purchases и с чем их едят (20)

Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетьюИнтуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
 
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
 
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеШкола-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
 
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2
 
Moscow Python Conf 2016. Почему 100% покрытие это плохо?
Moscow Python Conf 2016. Почему 100% покрытие это плохо?Moscow Python Conf 2016. Почему 100% покрытие это плохо?
Moscow Python Conf 2016. Почему 100% покрытие это плохо?
 
Mobilefest2012
Mobilefest2012Mobilefest2012
Mobilefest2012
 
Google play billing v3.0
Google play billing v3.0Google play billing v3.0
Google play billing v3.0
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн
 
Igor ostuchenko-analytics-110317084549-phpapp01
Igor ostuchenko-analytics-110317084549-phpapp01Igor ostuchenko-analytics-110317084549-phpapp01
Igor ostuchenko-analytics-110317084549-phpapp01
 
MSI In-Store Pickup Функционал & сложности
MSI In-Store Pickup Функционал & сложностиMSI In-Store Pickup Функционал & сложности
MSI In-Store Pickup Функционал & сложности
 
Tag Management (рекламный контейнер)
Tag Management (рекламный контейнер)Tag Management (рекламный контейнер)
Tag Management (рекламный контейнер)
 
Аспектно-Ориентированный Подход
Аспектно-Ориентированный ПодходАспектно-Ориентированный Подход
Аспектно-Ориентированный Подход
 
Индексирование в Magento
Индексирование в MagentoИндексирование в Magento
Индексирование в Magento
 
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
 
Фреймворк-невиидмка
Фреймворк-невиидмкаФреймворк-невиидмка
Фреймворк-невиидмка
 
Пластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьПластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать жить
 
Knockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-ОнлайнKnockout.JS на примере 2ГИС-Онлайн
Knockout.JS на примере 2ГИС-Онлайн
 
Aspect Oriented Approach
Aspect Oriented ApproachAspect Oriented Approach
Aspect Oriented Approach
 
C# Web. Занятие 02.
C# Web. Занятие 02.C# Web. Занятие 02.
C# Web. Занятие 02.
 

Mais de Pavel Bashmakov

The road from the services to the products
The road from the services to the productsThe road from the services to the products
The road from the services to the productsPavel Bashmakov
 
Портирование успешных iPhone приложений на Android\Bada платформы
Портирование успешных iPhone приложений на Android\Bada платформыПортирование успешных iPhone приложений на Android\Bada платформы
Портирование успешных iPhone приложений на Android\Bada платформыPavel Bashmakov
 
Мобильные приложения как инструмент доступа к пользователям современных мобил...
Мобильные приложения как инструмент доступа к пользователям современных мобил...Мобильные приложения как инструмент доступа к пользователям современных мобил...
Мобильные приложения как инструмент доступа к пользователям современных мобил...Pavel Bashmakov
 
Разработка мобильных приложений
Разработка мобильных приложенийРазработка мобильных приложений
Разработка мобильных приложенийPavel Bashmakov
 
Android Platform Architecture
Android Platform ArchitectureAndroid Platform Architecture
Android Platform ArchitecturePavel Bashmakov
 
Android Game Fox Hunter - Start
Android Game Fox Hunter - StartAndroid Game Fox Hunter - Start
Android Game Fox Hunter - StartPavel Bashmakov
 
Mobile Apps - Новые Медиа
Mobile Apps - Новые МедиаMobile Apps - Новые Медиа
Mobile Apps - Новые МедиаPavel Bashmakov
 
Клиент-серверные приложения на iPhone
Клиент-серверные приложения на iPhoneКлиент-серверные приложения на iPhone
Клиент-серверные приложения на iPhonePavel Bashmakov
 
OpenGL ES 1.1 и 2.0 для разработки iPhone игр
OpenGL ES 1.1 и 2.0 для разработки iPhone игрOpenGL ES 1.1 и 2.0 для разработки iPhone игр
OpenGL ES 1.1 и 2.0 для разработки iPhone игрPavel Bashmakov
 
Использование современных мобильных техноолгий в медиабизнесе
Использование современных мобильных техноолгий в медиабизнесеИспользование современных мобильных техноолгий в медиабизнесе
Использование современных мобильных техноолгий в медиабизнесеPavel Bashmakov
 
Stanfy - Mobile Apps as Newest Media
Stanfy - Mobile Apps as Newest MediaStanfy - Mobile Apps as Newest Media
Stanfy - Mobile Apps as Newest MediaPavel Bashmakov
 
Владимир Пузанов - JailBreak: Разработка без лимитов
Владимир Пузанов - JailBreak: Разработка без лимитовВладимир Пузанов - JailBreak: Разработка без лимитов
Владимир Пузанов - JailBreak: Разработка без лимитовPavel Bashmakov
 
Павел Тайкало - Использование CoreData в iPhone приложения
Павел Тайкало - Использование CoreData в iPhone приложенияПавел Тайкало - Использование CoreData в iPhone приложения
Павел Тайкало - Использование CoreData в iPhone приложенияPavel Bashmakov
 
Taras Kornichuk - Ценности социальной игровой платформы для разработчиков и и...
Taras Kornichuk - Ценности социальной игровой платформы для разработчиков и и...Taras Kornichuk - Ценности социальной игровой платформы для разработчиков и и...
Taras Kornichuk - Ценности социальной игровой платформы для разработчиков и и...Pavel Bashmakov
 
Использование iPhone приложений в Бизнесе, Маркетинге и PR
Использование iPhone приложений в Бизнесе, Маркетинге и PRИспользование iPhone приложений в Бизнесе, Маркетинге и PR
Использование iPhone приложений в Бизнесе, Маркетинге и PRPavel Bashmakov
 
Индустрия iPhone приложений
Индустрия iPhone приложенийИндустрия iPhone приложений
Индустрия iPhone приложенийPavel Bashmakov
 

Mais de Pavel Bashmakov (20)

The road from the services to the products
The road from the services to the productsThe road from the services to the products
The road from the services to the products
 
Портирование успешных iPhone приложений на Android\Bada платформы
Портирование успешных iPhone приложений на Android\Bada платформыПортирование успешных iPhone приложений на Android\Bada платформы
Портирование успешных iPhone приложений на Android\Bada платформы
 
Мобильные приложения как инструмент доступа к пользователям современных мобил...
Мобильные приложения как инструмент доступа к пользователям современных мобил...Мобильные приложения как инструмент доступа к пользователям современных мобил...
Мобильные приложения как инструмент доступа к пользователям современных мобил...
 
Разработка мобильных приложений
Разработка мобильных приложенийРазработка мобильных приложений
Разработка мобильных приложений
 
Android Platform Architecture
Android Platform ArchitectureAndroid Platform Architecture
Android Platform Architecture
 
Android Game Fox Hunter - Start
Android Game Fox Hunter - StartAndroid Game Fox Hunter - Start
Android Game Fox Hunter - Start
 
About Stanfy
About StanfyAbout Stanfy
About Stanfy
 
Mobile Apps - Новые Медиа
Mobile Apps - Новые МедиаMobile Apps - Новые Медиа
Mobile Apps - Новые Медиа
 
Mobile Apps - New Media
Mobile Apps - New MediaMobile Apps - New Media
Mobile Apps - New Media
 
Клиент-серверные приложения на iPhone
Клиент-серверные приложения на iPhoneКлиент-серверные приложения на iPhone
Клиент-серверные приложения на iPhone
 
OpenGL ES 1.1 и 2.0 для разработки iPhone игр
OpenGL ES 1.1 и 2.0 для разработки iPhone игрOpenGL ES 1.1 и 2.0 для разработки iPhone игр
OpenGL ES 1.1 и 2.0 для разработки iPhone игр
 
Использование современных мобильных техноолгий в медиабизнесе
Использование современных мобильных техноолгий в медиабизнесеИспользование современных мобильных техноолгий в медиабизнесе
Использование современных мобильных техноолгий в медиабизнесе
 
Stanfy - Mobile Apps as Newest Media
Stanfy - Mobile Apps as Newest MediaStanfy - Mobile Apps as Newest Media
Stanfy - Mobile Apps as Newest Media
 
Владимир Пузанов - JailBreak: Разработка без лимитов
Владимир Пузанов - JailBreak: Разработка без лимитовВладимир Пузанов - JailBreak: Разработка без лимитов
Владимир Пузанов - JailBreak: Разработка без лимитов
 
Павел Тайкало - Использование CoreData в iPhone приложения
Павел Тайкало - Использование CoreData в iPhone приложенияПавел Тайкало - Использование CoreData в iPhone приложения
Павел Тайкало - Использование CoreData в iPhone приложения
 
Taras Kornichuk - Ценности социальной игровой платформы для разработчиков и и...
Taras Kornichuk - Ценности социальной игровой платформы для разработчиков и и...Taras Kornichuk - Ценности социальной игровой платформы для разработчиков и и...
Taras Kornichuk - Ценности социальной игровой платформы для разработчиков и и...
 
Использование iPhone приложений в Бизнесе, Маркетинге и PR
Использование iPhone приложений в Бизнесе, Маркетинге и PRИспользование iPhone приложений в Бизнесе, Маркетинге и PR
Использование iPhone приложений в Бизнесе, Маркетинге и PR
 
Индустрия iPhone приложений
Индустрия iPhone приложенийИндустрия iPhone приложений
Индустрия iPhone приложений
 
Sapka Contest 2009 (RU)
Sapka Contest 2009 (RU)Sapka Contest 2009 (RU)
Sapka Contest 2009 (RU)
 
Sapka Contest 2009 (UA)
Sapka Contest 2009 (UA)Sapka Contest 2009 (UA)
Sapka Contest 2009 (UA)
 

Último (9)

2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
 
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdfMalware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
 
Ransomware_Q3 2023. The report [RU].pdf
Ransomware_Q3 2023.  The report [RU].pdfRansomware_Q3 2023.  The report [RU].pdf
Ransomware_Q3 2023. The report [RU].pdf
 
MS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdfMS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdf
 

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

  • 1. In-App Purchases и с чем их едят...
  • 5. Встроенная модель • Позволяет разблокировать features внутри приложения • Все features должны быть встроены в само приложение StoreKit не отвечает за все манипуляции после подтверждения покупки
  • 6. Серверная модель • Позволяет «отправлять» features с сервера • «Мы в ответе за тех кого приручили»
  • 8.
  • 12. Примеры кода 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]; }
  • 13. 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; } } }
  • 14. 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]; }
  • 15. 8. Последние штрихи SKPayment *payment = [SKPayment paymentWithProductIdentifier:kMyFeatureIdentifier]; [[SKPaymentQueue defaultQueue] addPayment:payment]; или SKMutablePayment *payment = [SKMutablePayment paymentWithProductIdentifier:kMyFeatureIdentifier]; payment.quantity = 3; [[SKPaymentQueue defaultQueue] addPayment:payment];
  • 16. Немного JSON HTTP POST. https://buy.itunes.apple.com/verifyReceipt { "receipt-data" : "(NSData*)transactionReceipt + base64" } Ответ сервера { "status" : 0 "receipt" : { ... } }
  • 17. 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 Версия нашего приложения.
  • 18. Всем Спасибо. Вопросы? Контакты skype: soul.odessa email: soul.odessa@gmail.com icq: 207627325