- Buy additional app features with in-app purchases and subscriptions
- What are in-app purchases?
- What is a subscription?
- What is a non-consumable in-app purchase?
- What is a consumable in-app purchase?
- About sharing in-app purchases
- Learn more
- See your purchase history for the App Store, iTunes Store, and more
- How to see recent purchases on the web
- See your purchase history on your iPhone, iPad, or iPod touch
- See your purchase history on your computer
- If you can’t find an item in your purchase history
- Find out if a family member purchased the item
- Check if you purchased the item with a different Apple ID
- If you see purchases that you don’t recognize or unexpected charges
- Learn more
- iPhone разработка: Интегрируем In-App Purchases
- Общая информация
- Реализация
- Шаг 1. Создание App ID
- Шаг 2. Создание Development профиля
- Шаг 3. Создание приложения в iTunes Connect
- Шаг 4. Создание In-App Purchases в iTunes Connect
- Шаг 5. Создание тестового пользователя
- Шаг 6. Программирование
- Шаг 7. Тестирование
- Тестовый пример InAppPurchasesExample
Buy additional app features with in-app purchases and subscriptions
Learn how subscriptions and in-app purchases work.
What are in-app purchases?
In-app purchases are extra content or subscriptions that you buy inside an app. Not all apps offer in-app purchases. To check if an app offers in-app purchases before you buy or download it, find it in the App Store. Then look for «In-App Purchases» near the app’s price or Get button.
What is a subscription?
With a subscription, you pay to access content from an app or service for a period of time. For example, you might subscribe to Apple Music on a monthly basis. Subscriptions include services that you sign up for in an app, such as Hulu, Spotify, Pandora, or HBO NOW.
Most subscriptions renew automatically unless you cancel them. With some apps and services, you can choose how often the subscription renews. For example, you might be offered weekly, monthly, quarterly, or yearly subscriptions.
What is a non-consumable in-app purchase?
Here are examples of non-consumable in-app purchases:
- Remove ads
- Full game unlock
- Upgrade to pro edition
- Bonus game levels
You buy these items one time, and you can transfer them to other devices that are associated with your Apple ID. If you lose a non-consumable purchase, you might be able to download it again for free.
What is a consumable in-app purchase?
Here are examples of consumable in-app purchases:
- Game currency, such as coins or gems
- Extra health points in a game
- A package of exports to a new file format
You need to buy these items every time you want them, and you can’t download them again for free. If you remove and reinstall an app or install an app on a new device, you might lose your consumable purchases. For example, if you install a game on your iPod touch that you started playing on your iPhone, the game levels sync, but extra health that you bought on your iPhone doesn’t sync.
About sharing in-app purchases
If you use Family Sharing, you might be able to share some subscriptions with family members. Find out how to share a subscription with family. Consumable in-app purchases can’t be shared.
Learn more
- To prevent unintentional in-app purchases or prevent a child from making in-app purchases, set up Screen Time.
- If you tried to make an in-app purchase and you aren’t sure the purchase was successful, check your purchase history. If you see it in your purchase history but you don’t see it in the app, contact the app developer.
- For any other issues with in-app purchases, you can request a refund or report a problem.
For more information about subscriptions and in-app purchases, see the Apple Media Services Terms and Conditions.
Store availability and features might vary by country or region. Learn what’s available in your country or region.
Information about products not manufactured by Apple, or independent websites not controlled or tested by Apple, is provided without recommendation or endorsement. Apple assumes no responsibility with regard to the selection, performance, or use of third-party websites or products. Apple makes no representations regarding third-party website accuracy or reliability. Contact the vendor for additional information.
Источник
See your purchase history for the App Store, iTunes Store, and more
To see which apps, music, and other content you bought, look at your purchase history.
See a list of your purchases from the App Store, iTunes Store, Apple Books, and the Apple TV app.
How to see recent purchases on the web
- Go to reportaproblem.apple.com.
- Sign in with your Apple ID and password.
- A list of your recent purchases appears. If you’re not sure what you were charged for but you know the exact amount, search for the amount. If there’s a problem with an item that you purchased, use this website to report the problem to Apple.
See your purchase history on your iPhone, iPad, or iPod touch
- Open the Settings app.
- Tap your name, then tap Media & Purchases. You might be asked to sign in.
- Tap Purchase History.
- Your purchase history appears. If you want to see purchases that you made more than 90 days prior, tap Last 90 Days, then select a different date range.
See your purchase history on your computer
- Open the Music app or iTunes. From the menu bar at the top of the screen, choose Account, then click View My Account.
- On the Account Information page, scroll down to Purchase History. Next to Most Recent Purchase, click See All.
- Find the item. It might take a moment for your Purchase History to appear. If you want to see purchases that you made more than 90 days prior, click Last 90 Days, then select a date range.
If you can’t find an item in your purchase history
If you can’t find the item you’re looking for, try these things before you contact Apple.
Find out if a family member purchased the item
If you use Family Sharing, your purchase history shows purchases that you made using your Apple ID, but you won’t see what other family members bought. To see what other family members bought, sign in with their Apple ID.
If family members have access to your device, you might want to require a password for every purchase.
To control what kids buy on their own devices, turn on Ask to Buy.
Check if you purchased the item with a different Apple ID
If you don’t see an item in your purchase history, you might have been signed in with a different Apple ID when you made the purchase. Sign in with that Apple ID to check if your purchases were billed to that account.
If you see purchases that you don’t recognize or unexpected charges
- If you see items in your purchase history that you don’t remember buying, check if someone else who uses your device, such as a family member, bought the item. If someone else is using your Apple ID and password, change your Apple ID password.
- Learn what to do if you don’t recognize a charge on your statement from your bank or financial institution.
- Learn how to request a refund.
Learn more
- If you see an in-app purchase in your purchase history but you don’t see it in the app, restore in-app purchases.
- Cancel a subscription.
- Learn about how App Store and iTunes Store purchases are billed.
- If you received a suspicious email notification about a purchase, the email might not be from Apple or reflect actual charges to your account. Learn how to identify legitimate App Store or iTunes Store emails.
Store availability and features might vary by country or region. Learn what’s available in your country or region.
Information about products not manufactured by Apple, or independent websites not controlled or tested by Apple, is provided without recommendation or endorsement. Apple assumes no responsibility with regard to the selection, performance, or use of third-party websites or products. Apple makes no representations regarding third-party website accuracy or reliability. Contact the vendor for additional information.
Источник
iPhone разработка: Интегрируем In-App Purchases
In-App Purchases — это простой и удобный механизм для организации продаж своих приложений или дополнительных фич непосредственно из своего приложения. In-App Purchases легко встраивается и открывает для Вас новый канал продаж. Взаимодействие с App Store осуществляется с помощью StoreKit.framework, который поставляется вместе с SDK, начиная с версии 3.0.
Общая информация
In-App Purchases бывает трех типов:
- Consumables
- Non-Consumables
- Subscriptions
Consumable — потребляемый тип. Purchase такого типа может покупаться несколько раз. Например, в игре Eliminate игрок покупает себе энергию, которая со временем растрачивается и приходится покупать ее заново, либо ждать три часа, пока энергия востановится.
Non-Consumable — непотребляемый тип. Purchase покупается только один раз. Его обычно используют для разблокировки новых тем, дополнительных уровней и т.п.
Subscription — подписка на что-либо. Например, Вы можете написать iPhone-приложение для Web-сервиса, в котором есть Premium аккаунт, открывающий дополнительные возможности. С помощью Subscription Вы сможете аккаунт активировать, скажем, на месяц или на год.
Реализовать In-App Purchases можно с помощью двух моделей:
- Встроенная модель
- Серверная модель
Встроенная модель позволяет разблокировать фичи. Как правило, использование данной модели побуждает разработчиков встраивать их в приложение зарание. При такой реализации, StoreKit отвечает только за оплату фичи. В общем случае, с помощью StoreKit мы можем узнать прошла ли покупка или не прошла.
Серверная модель является более гибкой. В модели принимают участие три сущности: iPhone-приложение, сервер Apple и наш сервер. Все новые фичи хранятся на нашем сервере, поэтому нет необходимости обновлять приложение при добавлении новых фич или продуктов. Работает модель следующим образом:
- iPhone-приложение запрашивает список продуктов у своего сервера,
- iPhone-приложение отображает новые продукты пользователю,
- Пользователь покупает (или не покупает 🙂 )
- iPhone-приложение запрашивает покупку у сервера Apple через StoreKit,
- StoreKit возвращает ответ,
- iPhone-приложение отсылает ответ на свой сервер
- Еще раз проверяется ответ (обязательно проверяется, что ответ пришел от Apple),
- После этого iPhone-приложение скачивает со своего сервера новый продукт.
В данном посте рассматривается встроенная модель.
Реализация
Работу встроенной модели In-App Purchases я продемонстрирую на тестовом примере AppPurchasesExample. Это небольшое iPhone-приложение с 3 окнами. Первое (оно же главное) окно будет доступно пользователю по-умолчанию. Это окно будет содержать информацию о двух других окнах, разблокировать которые можно только за деньги.
Шаг 1. Создание App ID
Заходим на iPhone Developer Program Portal и открываем вкладку App IDs:
В правом верхнем углу экрана нажимаем New App ID. Затем вводим информацию о приложении. Для своего примера я заполнил форму так:
Для создания Bundle Identifier Apple рекомендует использовать нотацию Reverse DNS, что гарантирует уникальность Вашего Identifier и избавит Вас от дальнейших проблем при публикации приложения. Очень Важно не использовать символ ‘*’ в Bundle Identifier. Если ввести ‘com.wordpress.indiedevelop.*’, то In-App Purchases работать не будет.
Далее необходимо включить In App Purchases для App ID. В списке App IDs, напротив нужного Bundle Identifier в графе Action следует нажать Configure. Появится форма Configure App ID, на которой необходимо включить checkBox ‘Enable In App Purchase’.
Шаг 2. Создание Development профиля
- В левом столбце нужно нажать на ‘Provisioning’ и перейти на вкладку ‘Development’.
- Нажать ‘New Profile’ и заполнить всю необходимую информацию. Поле Profile Name может быть любое (я записал ‘InAppPurchasesExample Dev’).
- В появившемся списке созданный профиль имеет статус pending. Нужно обновить страницу, либо перейти на другую вкладку и обратно, тогда профиль станет доступен для скачивания.
- Профиль можно скачивать и устанавливать в xCode. Для установки достаточно просто нажать на профиль двойным кликом, либо перетащить профайл на иконку xCode.
Если профиль установился правильно, тогда в xCode откроется Organizer и вы увидите примерно следующее:
Шаг 3. Создание приложения в iTunes Connect
Для того, чтобы протестировать наше In-App Purchase приложение, его нужно обязательно создать в iTunes Connect. Чтобы это сделать:
- Необходимо перейти в iTunes Connect и нажать ‘Manage Your Applications->Add New Application’.
- На вопрос ‘Does your product contain encryption?’ ответить отрицательно.
- Заполнить форму, где нужно указать имя приложения, описание, номер версии, категорию и т.д. Все достаточно тривиально. Затруднения может вызвать разве что поле ‘SKU Number’. Это поле должно быть уникальным, я ввел в нем ‘IAPEX’ (сокращение от In-App Purchases Example).
- На форме ‘Upload’ необходимо выставить флаг ‘Upload application binary later’. Все остальные параметры и формы для тестого примера никакого значения не имеют.
Шаг 4. Создание In-App Purchases в iTunes Connect
- В iTunes Connect необходимо нажать ‘Manage Your In App Purchases->Create New’ и выбрать необходимое приложение.
- Выбрать Bundle ID и заполнить инфрормацию о Purchase (тип, название, цену и т.д.) Также нужно ввести ‘Product ID’, который может быть произвольным, но я советую использовать Reverse DNS. Лучше всего Product ID формировать из Bundle ID вашего приложения и имени фичи. Для моего примера это выглядит так:
Для тестового приложения я создал два In-App продукта с Product Id ‘com.wordpress.indiedevelop.InAppPurchasesExample.f1’ и ‘com.wordpress.indiedevelop.InAppPurchasesExample.f2’. Обе фичи с типом Non-Consumables.
Шаг 5. Создание тестового пользователя
Для тестирования In-App Purchases необходимо создать хотя бы одного тестового пользователя. Делается это просто:
- В iTunes Connect необходимо перейти на ‘Manage Users->In App Purchase Test User’
- Нажать ‘Add New User’
- Ввести информацию о пользователе
E-mail пользователя не обязательно должен быть реальным. Для своего примера я создал одного тестового пользователя:
Важный момент. Если у Вас не закончен контракт с Apple, тогда In-App Purchase работать у Вас не будет. Для того, чтобы закончить контракт, необходимо указать Contact Info, Bank Info и Tax Info.
Шаг 6. Программирование
Для своего тестового примера я создал каркас проекта и User Interface:
Для работы с App Store я рекомендую использовать MKStoreKit, разработанный в 2009 году разработчиком Кумаром (Mugunth Kumar). Данный набор классов значительно облегчит работу со StoreKit. Кроме MKStoreKit, в проект необходимо добавить StoreKit.framework.
В своем примере я использую слегка модернизированную первую весрию MKStoreKit. Для удобства я добавил к классу MKStoreManager делегат следующего вида:
@protocol MKStoreKitDelegate @optional
— ( void )productAPurchased;
— ( void )productBPurchased;
— ( void )failed;
@end
* This source code was highlighted with Source Code Highlighter .
Делегату посылается сообщение productAPurchased когда куплена фича 1, productBPurchased — когда куплена фича 2 и failed — когда пользователь либо отменил покупку, либо покупка не прошла.
Класс-Singleton MKStoreManager является основным в MKStoreKit. Так выглядит его объявление:
// делегат
@property (nonatomic, retain) id delegate ;
// продукты, доступные для покупки
@property (nonatomic, retain) NSMutableArray *purchasableObjects;
// фабричный метод для Singleton
+ (MKStoreManager*)sharedManager;
// методы для покупки фич
— ( void ) buyFeatureA;
— ( void ) buyFeatureB;
// методы позволяют узнать куплена ли фича
+ (BOOL) featureAPurchased;
+ (BOOL) featureBPurchased;
.
@end
* This source code was highlighted with Source Code Highlighter .
Рассмотрим использование класса на моем тестовом примере.
Сначала в файле MKStoreManager.m я прописал Product ID своих фич:
static NSString *featureAId = @»com.wordpress.indiedevelop.InAppPurchasesExample.f1″ ;
static NSString *featureBId = @»com.wordpress.indiedevelop.InAppPurchasesExample.f2″ ;
* This source code was highlighted with Source Code Highlighter .
Также нужно проверить были ли куплены фичи программы. Основной класс примера унаследован от UIViewController, поэтому код проверки целесообразно встроить в метод viewDidLoad:
[MKStoreManager sharedManager]. delegate = self; // назначаем делагата для объекта MKStoreManager
if ([MKStoreManager featureAPurchased]) // если куплена фича 1
<
feature1Button.hidden = YES; // скрываем кнопку ‘Купить фичу 1’
seeFeature1Button.hidden = NO; // показываем кнопку ‘Перейти на фичу 1’
>
if ([MKStoreManager featureBPurchased]) // если куплена фича 2
<
feature2Button.hidden = YES; // скрываем кнопку ‘Купить фичу 2’
seeFeature2Button.hidden = NO; // показываем кнопку ‘Перейти на фичу 2’
>
>
* This source code was highlighted with Source Code Highlighter .
Внутри MKStoreKit информация о том, куплен ли продукт сохраняется через NSUserDefaults, поэтому при удалении приложения информация сбрасывается. Однако, пользователь не будет покупать фичи два раза, поскольку StoreKit откроет доступ к фиче бесплатно.
Дальше нужно реализовать методы ‘Купить’. Они привязаны к событию TouchUpInside соотвествующих кнопок:
-(IBAction)feature1ButtonPressed
<
[self showLockView]; // показываем пользователю, что происходит загрузка
[[MKStoreManager sharedManager] buyFeatureA]; // посылаем сообщение магазину ‘Купить фичу 1’
>
-(IBAction)feature2ButtonPressed
<
[self showLockView]; // показываем пользователю, что происходит загрузка
[[MKStoreManager sharedManager] buyFeatureB]; // посылаем сообщение магазину ‘Купить фичу 2’
>
* This source code was highlighted with Source Code Highlighter .
Далее я реализовал методы делегата MKStoreKitDelegate:
// фича 1 куплена
— ( void )productAPurchased
<
[self hideLockView]; // скрываем отображение загрузки
feature1Button.hidden = YES; // скрываем кнопку ‘Купить’
seeFeature1Button.hidden = NO; // показываем кнопку ‘Перейти’
>
// фича 2 куплена
— ( void )productBPurchased
<
[self hideLockView]; // скрываем отображение загрузки
feature2Button.hidden = YES; // скрываем кнопку ‘Купить’
seeFeature2Button.hidden = NO; // показываем кнопку ‘Перейти’
>
// покупка не прошла, либо была отменена
— ( void )failed
<
[self hideLockView]; // скрываем отображение загрузки
>
* This source code was highlighted with Source Code Highlighter .
Новые фичи реализованы в виде отдельных UIView под управлением UIViewController. Переход на новые фичи я реализовал с помощь UINavigationController:
// перейти на фичу 1
-(IBAction)seeFeature1
<
[self.navigationController pushViewController:feature1ViewController animated:YES];
>
// перейти на фичу 2
-(IBAction)seeFeature2
<
[self.navigationController pushViewController:feature2ViewController animated:YES];
>
* This source code was highlighted with Source Code Highlighter .
Также при манипуляции с магазином можно добавить проверку на его доступность. Это делается так:
if ([SKPaymentQueue canMakePayments])
<
. // Отобразить магазин пользователю
>
else
<
. // Уведомить пользователя, что Purchases недоступны
>
* This source code was highlighted with Source Code Highlighter .
Как видите все достаточно просто. Остается скопилировать и тестировать 🙂
Шаг 7. Тестирование
Тестовый пример InAppPurchasesExample
В результате у меня получилось приложение, которое может разблокировать два дополнительных окна. Это приложение можно использовать в качестве примера для создания своих In-App Purchase проектов.
Скриншоты:
Я очень надеюсь, что Вам помог этот пост. Если у Вас есть Вопросы, пожалуйста, задавайте. Я с удовольствием на них отвечу.
Источник