in app provisioning что это
Entitlement Key Reference
Apple Pay and PassKit Entitlements
Use these keys to enable in-app payments using Apple Pay, or to allow your app to access passes from the PassKit library. Set these entitlements using Xcode.
Apple Pay and PassKit Entitlement Keys
Access to the listed passes from the PassKit library.
Prevents the display of the Apple Pay passes when it detects a compatible reader.
In-app provisioning of payment cards.
Enabling In-App Payments
To enable in-app payments, use Xcode’s Capabilities pane to turn on Apple Pay, and select the merchant IDs you want to use. This sets the com.apple.developer.in-app-payments key.
The value for this key is an array of merchant IDs.
Enabling Access to Passes
To access passes in your app, use Xcode’s Capabilities pane to turn on Wallet. If your provisioning profile is associated with multiple pass type identifiers, you can specify which of the identifiers your app can interact with. This sets the com.apple.developer.pass-type-identifiers key.
Suppressing the Display of Apple Pay Passes
Use this entitlement to keep your app in the foreground when operating near NFC or other RF readers. This entitlement enables the requestAutomaticPassPresentationSuppressionWithResponseHandler: method.
Enabling In-App Provisioning of Payment Cards
Use this entitlement to enable the in-app provisioning of payment cards. This entitlement allows you to initialize and present a PKAddPaymentPassViewController object.
Copyright © 2017 Apple Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2017-03-27
iPhone разработка: Интегрируем In-App Purchases
In-App Purchases — это простой и удобный механизм для организации продаж своих приложений или дополнительных фич непосредственно из своего приложения. In-App Purchases легко встраивается и открывает для Вас новый канал продаж. Взаимодействие с App Store осуществляется с помощью StoreKit.framework, который поставляется вместе с SDK, начиная с версии 3.0.
Общая информация
Non-Consumable — непотребляемый тип. Purchase покупается только один раз. Его обычно используют для разблокировки новых тем, дополнительных уровней и т.п.
Subscription — подписка на что-либо. Например, Вы можете написать iPhone-приложение для Web-сервиса, в котором есть Premium аккаунт, открывающий дополнительные возможности. С помощью Subscription Вы сможете аккаунт активировать, скажем, на месяц или на год.
Реализация
Работу встроенной модели 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 профиля
Шаг 3. Создание приложения в iTunes Connect
Шаг 4. Создание In-App Purchases в iTunes Connect
Для тестового приложения я создал два In-App продукта с Product Id ‘com.wordpress.indiedevelop.InAppPurchasesExample.f1’ и ‘com.wordpress.indiedevelop.InAppPurchasesExample.f2’. Обе фичи с типом Non-Consumables.
Шаг 5. Создание тестового пользователя
Важный момент. Если у Вас не закончен контракт с 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
Делегату посылается сообщение 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
Рассмотрим использование класса на моем тестовом примере.
Сначала в файле MKStoreManager.m я прописал Product ID своих фич:
static NSString *featureAId = @»com.wordpress.indiedevelop.InAppPurchasesExample.f1″ ;
static NSString *featureBId = @»com.wordpress.indiedevelop.InAppPurchasesExample.f2″ ;
Также нужно проверить были ли куплены фичи программы. Основной класс примера унаследован от 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’
>
>
Внутри MKStoreKit информация о том, куплен ли продукт сохраняется через NSUserDefaults, поэтому при удалении приложения информация сбрасывается. Однако, пользователь не будет покупать фичи два раза, поскольку StoreKit откроет доступ к фиче бесплатно.
Дальше нужно реализовать методы ‘Купить’. Они привязаны к событию TouchUpInside соотвествующих кнопок:
-(IBAction)feature1ButtonPressed
<
[self showLockView]; // показываем пользователю, что происходит загрузка
[[MKStoreManager sharedManager] buyFeatureA]; // посылаем сообщение магазину ‘Купить фичу 1’
>
-(IBAction)feature2ButtonPressed
<
[self showLockView]; // показываем пользователю, что происходит загрузка
[[MKStoreManager sharedManager] buyFeatureB]; // посылаем сообщение магазину ‘Купить фичу 2’
>
Далее я реализовал методы делегата 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]; // скрываем отображение загрузки
>
Новые фичи реализованы в виде отдельных UIView под управлением UIViewController. Переход на новые фичи я реализовал с помощь UINavigationController:
// перейти на фичу 1
-(IBAction)seeFeature1
<
[self.navigationController pushViewController:feature1ViewController animated:YES];
>
// перейти на фичу 2
-(IBAction)seeFeature2
<
[self.navigationController pushViewController:feature2ViewController animated:YES];
>
Также при манипуляции с магазином можно добавить проверку на его доступность. Это делается так:
if ([SKPaymentQueue canMakePayments])
<
. // Отобразить магазин пользователю
>
else
<
. // Уведомить пользователя, что Purchases недоступны
>
Как видите все достаточно просто. Остается скопилировать и тестировать 🙂
Шаг 7. Тестирование
Тестовый пример InAppPurchasesExample
В результате у меня получилось приложение, которое может разблокировать два дополнительных окна. Это приложение можно использовать в качестве примера для создания своих In-App Purchase проектов.
Я очень надеюсь, что Вам помог этот пост. Если у Вас есть Вопросы, пожалуйста, задавайте. Я с удовольствием на них отвечу.
Выкладываем приложение в App Store. Даже если вы не разработчик
Ранее писали про этап подготовки к релизу. Сейчас расскажем про публикацию приложения в AppStore. Пошаговый гайд будет полезен новичкам, которые до этого не сталкивались с полицией нравов из Купертино.
Для того чтобы выложить приложение в App Store, потребуется оплаченный аккаунт разработчика, среда разработки XCode и исходный код вашего приложения. Разобьем процесс на четыре этапа:
Настройка аккаунта
Все приложения перед выгрузкой в App Store должны быть подписаны сертификатом разработчика. Это нужно, чтобы пользователи App Store были уверены, что скачивают конкретное приложение от конкретного разработчика, а не подделку от чужого имени. Процедура подписывания (code signing) приложения позволяет операционной системе узнать, кто является разработчиком. И удостовериться в том, что приложение не было изменено с момента сборки. Точнее, с того момента, как разработчик его подписал. В этой процедуре участвуют три объекта: сертификат разработчика, AppID и Provisioning profile.
Сертификат
Сертификат представляет собой пару ключей асимметричного шифрования: приватный и публичный. В процессе сборки XCode формирует цифровую подпись для сборки на основании данных приватного ключа. Проверить подпись можно с помощью публичного ключа, который доступен и для Apple, который этот сертификат выдала.
Одного сертификата достаточно для выкладки неограниченного количества приложений.
Чтобы создать сертификат, нужно:
Сохраните сгенерированный сертификат на компьютер, откройте его (дважды кликнув). Сертификат будет помещен в системное хранилище и доступен для XCode.
AppID
Это уникальный строковый идентификатор приложения среди всех приложений. Он нужен для однозначной идентификации во всех системах: iTunes Connect, App Store и пр. Он состоит из двух частей: TeamID и BundleID. TeamID — идентификатор разработчика, выдается Apple на этапе регистрации аккаунта разработчика и не меняется. BundleID задается разработчиком при регистрации приложения в аккаунте.
Provisioning profile
Это профиль, который однозначно связывает AppID и сертификат разработчика (публичный ключ сертификата). В случае development provisioning profile он также содержит UDID всех устройств, на которых возможен запуск приложения.
Сохраните сгенерированный профайл на компьютер, откройте его, дважды кликнув. Теперь сертификат доступен для XCode.
Оформление приложения для магазина
Теперь нужно добавить приложение в iTunes Connect.
Переходим на https://itunesconnect.apple.com в раздел MyApps. Чтобы добавить приложение, нажмите плюсик слева вверху:
Заполняем открывшуюся форму:
Если все заполнено правильно, попадаем на страницу приложения.
На вкладке слева «Pricing and Availability» заполняем информацию о стоимости приложения в сторе. На вкладке слева с номером версии заполняем маркетинговую информацию:
О том, как подготовить маркетинговую информацию, мы рассказывали в предыдущей статье.
Также есть секция для того, чтобы можно было указать конкретную сборку, которую отправлять на ревью, а затем и в стор. Выбор недоступен до тех пор, пока мы не загрузили в iTunes Connect ни одной сборки приложения. Мы вернемся к этой секции позже:
Чтобы сохранить внесенные изменения, используйте кнопку Save наверху:
Настройка проекта, сборка и выгрузка
Откройте проект вашего приложения в XCode, перейдите к настройкам проекта. Необходимо, чтобы Bundle Identifier совпадал с BundleID, который вы указали при создании AppID. Также необходимо отключить функцию автоматического управления подписыванием в XCode. В выпадающем списке Provisioning Profile выберите тот, который недавно создали.
Обратите внимание: без всех необходимых иконок (в том числе иконка для магазина со стороной 1024 точки) сборка приложения не пройдет автоматическую проверку в iTunes Connect.
Теперь проект можно собрать и отправить в iTunes Connect. Для этого нужно нажать меню Product — Archive. По итогу сборки будет показано окно органайзера XCode, нажмите там кнопку «Upload To App Store»:
Открывается окно настроек выгрузки в App Store. Подробнее про bitcode, symbols stripping. Оставляем настройки без изменений.
На следующем шаге нужно выбрать provisioning profile из выпадающего списка подходящих:
Затем XCode подготовит архив для выгрузки в iTunes Connect. На этом экране обратите внимание на те параметры, что мы установили. Нажмите Upload.
В зависимости от скорости соединения нужно будет подождать некоторое время. Если все в порядке, XCode сообщит об успешном завершении выгрузки в iTunes Connect. Можно переходить к последнему этапу.
Отправка на ревью
В iTunes Connect на вкладке Activity можно увидеть отправленную сборку. Для проектов на Swift автоматическая проверка сборки занимает примерно полчаса. До тех пор сборка будет со статусом Processing:
После окончания проверки сборка доступна для выбора на странице информации о версии приложения:
После этого у приложения в iTunes Connect появится иконка. Сохраните изменения. Теперь можно отправить сборку на ревью.
Готово! Вы сделали все, что могли. Ждите ответа в течение нескольких дней. Не забудьте, что с 23 по 27 декабря iTunes Connect на каникулах. Разработчики не смогут обновлять и добавлять новые приложения в App Store и изменять ценники. Все остальные функции iTunes Connect будут доступны.
Распространение приложения под iOS внутри компании (Enterprise Distribute iOS App in-house)
(Осторожно, под катом трафик)
Подготовка и распространение приложения IOS внутри компании весьма непростая задача, особенно когда приложение написано на Windows с использованием Visual studio, а большинство туториалов в интернете описывают исключительно MacOS с использованием Xcode. Однако после часов сражения с детищем Apple, нам удалось свершить казалось бы невозможное, а именно: скрестить жирафа с носорогом собрать IOS приложение на Xamarin в архив Xcode, сразу на MacOS, после получить нужные файлы для распространения, и в завершении создать ссылку, по которой будет распространяться приложение.
Да, на слух вроде не очень сложно. Однако когда дело касается разработки приложений под устройства Apple, всё становится в несколько раз непонятней и сложней. И после триумфальной, но нелёгкой победы, нам захотелось оставить свой след в истории, написав сей туториал.
1 Шаг. Создание сертификата.
1. Сперва, на Mac, нужно создать запрос для создания сертификата. Для этого нужно открыть keychain access, например, через поиск:
3. В появившемся окне заполняем поля “User Email Address” – свою электронную почту, и “Common Name” – имя ключа. А также выбираем пункт “Saved to disk”, чтобы сохранить файл запроса на компьютер. И нажимаем кнопку “Continue”:
4. Далее появится окошко, в котором нужно указать название файла запроса и выбор пути для сохранения файла. Вносим нужные изменения и сохраняем:
5. После успешного сохранения появится следующее окно. Нажимаем “Done”:
6. После мы можем увидеть, что создался файл запроса в месте сохранения (в данном примере на рабочем столе). Или мы можем увидеть созданный ключ в списке ключей в “keychain access”:
7. Далее нам надо создать сертификат, это мы сможем сделать на сайте Apple для разработчиков, войдя в свой аккаунт:
8. После успешного входа в аккаунт мы переходим в “Certificates, IDs & Profiles”, так же на странице сертификатов нужно убедиться, что выбрано “IOS, tvOS, watchOS”:
9. Далее на странице, в разделе “Certificates”, нужно выбрать “Production”:
10. На странице нажимаем на кнопку с изображением “+”, чтобы создать сертификат. Появится страничка, на которой надо выбрать тип создаваемого сертификата:
11. В данном примере нас интересует метод дистрибьюции In-House, поэтому типом сертификата нужно выбрать “In-House and Ad Hoc”. После нажать кнопку “Continue”:
12. После мы перейдём к следующей странице создания сертификата на которой будет описано как создать запрос на MacOS для сертификата. Мы уже создали этот запрос в предыдущих пунктах. Нажимаем кнопку “Continue”:
13. На следующем этапе вам потребуется загрузить файл запроса, который мы создали ранее на рабочем столе. После успешной загрузки нажмите “Continue”:
14. После произойдёт генерация сертификата, и на следующей странице его можно будет скачать на компьютер:
15. Скачиваем сертификат, в данном примере на рабочий стол. Так же мы можем увидеть созданный сертификат на сайте:
Как мы можем видеть, по итогу мы успешно получили сертификат. Следующим шагом будет создание ID приложения.
2 Шаг. Создание Apps ID.
На предыдущем шаге мы успешно создали сертификат, теперь нам нужно создать Apps ID. Для этого нужно:
1. На сайте Apple для разработчиков, в своём аккаунте перейти сперва в “Certificates, IDs & Profiles”, так же на странице сертификатов нужно убедиться, что выбрано “IOS, tvOS, watchOS”:
2. Далее на странице, в разделе “Identifiers”, нужно выбрать “App IDs”:
3. На странице нажимаем на кнопку с изображением “+”, чтобы создать App ID. Появится страничка, на которой надо выбрать настройки создаваемого ID. Настройки ID индивидуальны для вашего приложения, единственное важное уточнение – в графе App ID Suffix нужно выбрать Explicit App ID:
4. После создания App ID, его можно увидеть на сайте:
По итогу двух шагов, мы успешно получили сертификат и создали App ID. Далее нам надо при помощи созданного сертификата создать Provisioning Profiles. И это приводит нас к следующему шагу “3 Шаг. Создание Provisioning Profiles”.
3 Шаг. Создание Provisioning Profiles.
На предыдущем шаге мы успешно создали сертификат, теперь нам нужно с его помощью создать Provisioning Profiles. Для этого нужно:
1. На сайте Apple для разработчиков, в своём аккаунте перейти сперва в “Certificates, IDs & Profiles”, так же на странице сертификатов нужно убедиться, что выбрано “IOS, tvOS, watchOS”:
2. Далее на странице, в разделе “Provisioning Profiles”, нужно выбрать “ Distribution”:
3. На странице нажимаем на кнопку с изображением “+”, чтобы создать Provisioning Profiles. Появится страничка, на которой надо выбрать тип создаваемого профайла:
4. В данном примере нас интересует In-House метод дестрибьюции, соответственно выбираем тип профайла “In House” и нажимаем на кнопку “Continue”:
5. На следующей странице нужно выбрать ранее созданный, на шаге 2, App ID:
6. После нажатия кнопки “Continue” мы перейдём к выбору сертификата, мы создали его на 1 шаге. Далее нажимаем на кнопку “Continue”:
7. На следующей странице нам надо заполнить поле с именем профайла и проверить данные перед генерацией профайла:
8. После профайл будет сгенерирован и его можно будет скачать:
9. Скачиваем Provisioning Profile, в данном примере на рабочий стол. Так же мы можем увидеть созданный provisioning profile на сайте, и увидеть, что он активен:
По итогу 3 шагов мы успешно создали Provisioning Profile.
1. Для этого нам потребуется приложение Xamarin в Visual Studio, которое будет подключено к Mac:
2. В решение нужно выбрать проект IOS, нажав на него правой кнопкой мыши. В появившемся меню выбрать “Properties”. В открывшемся окне выбрать пункт “ios bundle setting”. Далее выбрать в “bundle setting” – “manual provisioning”, а ниже в графе “manual provisioning” выбрать свой сертификат и профайл который мы создали на предыдущих этапах:
3. В проекте IOS нужно выбрать файл Info.plist и убедится что “bundle identifier” совпадает с нужным App ID:
Команда: msbuild /p:Configuration=Release /p:ServerAddress=10.211.55.2 /p:ServerUser=xamUser /p:Platform=iPhone /p:ArchiveOnBuild=true /t:»Build» MyProject.csproj
При помощи их мы сможем распространять своё приложение минуя AppStore, например, внутри компании. Далее нам надо нажать кнопку “Distribute App”. В появившемся меню выбрать “Enterprise” и нажать кнопку “Next”:
7. Далее нужно выбрать устройства, на которые можно распространять и обязательно выбрать “include manifest for over-the-air installation”, для того чтобы можно было скачать приложение из браузера:
9. На следующем этапе нам нужно выбрать созданные сертификат и Provisioning Profile:
10. После мы увидим успешно собранное приложение, и мы должны выбрать куда сохранить папку с приложением, которое мы после будем распространять:
5 Шаг. Распространение приложения
На предыдущих шагах мы подготовили наше приложение к распространению. На данном шаге мы создадим простой html файл с ссылкой и выложим её на локальный IIS, это делается для упрощения примера, но местоположение ссылки роли не играет. Не в рамках примера ссылку
можно разместить на собственном сайте, чтобы она была доступно сотрудникам, как и файлы приложения, следует размещать на собственном сервере. Однако в этом примере, как упоминалось ранее, мы использовали сервис dropbox.
2. После создаём html файл, следующего содержания:
3. Далее выкладываем этот html файл на локальный IIS (или ваш сайт), и пройдя по данной ссылке с мобильного устройства нам предложат установить приложение. После установки приложения пользователю нужно подтвердить доверие сертификату на устройстве Settings → General → Device Management → «Enterprise Name» тогда только пользователи смогут открыть приложение: