Как узнать bundle id приложения ios
Я хотел бы изменить идентификатор пакета приложения, установленного на моем iPhone, чтобы иметь возможность установить еще один экземпляр. Мне не нужны другие способы обойти это, мне нужно иметь возможность изменить идентификатор пакета. У меня есть xcode, и я могу получить другие вещи, если они мне понадобятся, и набраться терпения, если это вовлеченный процесс. Заранее спасибо! :)
Редактировать - я знаю, что на самом деле невозможно изменить конкретный идентификатор приложения; Создание новой копии приложения прекрасно работает для меня. Мне просто нужно было иметь копию приложения, которая точно такая же, за исключением другого идентификатора пакета. Извините за путаницу.
3 ответа
Хорошо, я наконец понял это, несмотря на то, что люди говорили мне, что это невозможно :(
Я создал новый проект xcode и настроил свои сертификаты разработчика в проекте, затем я в значительной степени следовал инструкциям на эта страница github. Я создал новый IPA с нужными мне модификациями и подписал этот новый IPA через тот же проект xcode, через который я изменил исходный IPA в iOS App Signer. Позволяет изменить идентификатор пакета, а также версию и имя приложения, что также удобно для редактирования. Вот ссылка на github, где я нашел это приложение, на первой странице которого также есть эстетическое руководство, если оно окажется полезным для всех остальных.
(Мне кажется, что я, вероятно, не очень хорошо объясняю, в моей голове все гораздо больше смысла. Посмотрите на github более четкие инструкции или, может быть, тот, кто понимает, что я пытаюсь сказать, может помочь мне лучше сформулировать это, если нужно быть)
Вы не можете изменить идентификатор пакета приложения, которое уже установлено в iPhone.
Вы можете создать новый с портала разработчика и использовать его для другого экземпляра.
Вы не можете изменить идентификатор пакета приложения. Вы можете создать второе приложение, которое выглядит и ведет себя точно так же и имеет другой идентификатор пакета, но идентификатор пакета - это то, что делает его тем приложением. Это личность приложения.
Для добавления новых приложений вам потребуется указать уникальный идентификатор приложения в магазине приложений (App Store или Google Play) в поле Bundle ID .
Узнать уникальный идентификатор iOS-приложения (Bundle ID или ID пакета) можно одним из двух способов:
Для собственных приложений:
Откройте iTunes Connect, перейдите к My Apps и выберите приложение, идентификатор которого хотите получить.
На странице приложения в выпадающем меню More выберите About this App .
Идентификатор приложения указан в поле Bundle ID .
Для любых приложений:
Скопируйте числовой идентификатор, который указан в URL между id и ? (в примере — 483693909 ).
В файле 1.txt, который браузер скачает по этому URL, найдите текст \"bundleId\" .
Идентификатор приложения Яндекс.Браузер для iPhone — ru.yandex.mobile.search .
Узнать уникальный идентификатор Android-приложения (имя пакета приложения или package name) можно одним из двух способов:
Для собственных приложений — откройте Консоль разработчика Google Play и выберите приложение, идентификатор которого хотите получить.
Идентификатор указан рядом с логотипом и названием приложения.
Идентификатор приложения Яндекс.Браузер для Android — com.yandex.browser .
","lang":>,"extra_meta":[>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>],"title":"Получение идентификатора приложения (Bundle ID) - Рекламная сеть. Справка","productName":"Рекламная сеть","extra_js":[[,"mods":,"__func137":true,"tag":"script","bem":false,"attrs":,"__func67":true>],[,"mods":,"__func137":true,"tag":"script","bem":false,"attrs":,"__func67":true>,,"mods":,"__func137":true,"tag":"script","bem":false,"attrs":,"__func67":true>],[,"mods":,"__func137":true,"tag":"script","bem":false,"attrs":,"__func67":true>]],"extra_css":[[],[,"mods":,"__func69":true,"__func68":true,"bem":false,"tag":"link","attrs":>,,"mods":,"__func69":true,"__func68":true,"bem":false,"tag":"link","attrs":>],[,"mods":,"__func69":true,"__func68":true,"bem":false,"tag":"link","attrs":>]],"csp":<"script-src":[]>,"lang":"ru">>>'>"current":"ru","available":["ru","en"]>Для добавления новых приложений вам потребуется указать уникальный идентификатор приложения в магазине приложений (App Store или Google Play) в поле Bundle ID .
Узнать уникальный идентификатор iOS-приложения (Bundle ID или ID пакета) можно одним из двух способов:
Для собственных приложений:
Откройте iTunes Connect, перейдите к My Apps и выберите приложение, идентификатор которого хотите получить.
На странице приложения в выпадающем меню More выберите About this App .
Идентификатор приложения указан в поле Bundle ID .
Для любых приложений:
Скопируйте числовой идентификатор, который указан в URL между id и ? (в примере — 483693909 ).
В файле 1.txt, который браузер скачает по этому URL, найдите текст "bundleId" .
Идентификатор приложения Яндекс.Браузер для iPhone — ru.yandex.mobile.search .
Узнать уникальный идентификатор Android-приложения (имя пакета приложения или package name) можно одним из двух способов:
Для собственных приложений — откройте Консоль разработчика Google Play и выберите приложение, идентификатор которого хотите получить.
В этой статье я расскажу как настроить, реализовать и валидировать авто-возобновляемые подписки в iOS 12 и iOS 13. Бонусом расскажу о тонких моментах и подводных камнях, которые не все разработчики учитывают.
Настройка подписок в App Store Connect
Если у вас уже есть Bundle ID и созданное приложение, то вы можете пропустить эти шаги. Если же вы создаете приложение впервые, то сделайте следующее:
На портале разработчика Apple вы должны создать явный Bundle ID (App ID). Открыв страницу, которая называется Certificates, Identifiers & Profiles, перейдите во вкладку Identifiers. В июне 2019 года Apple, наконец, обновила верстку портала в соответствии с ASC (сокращенно от App Store Connect).
Явный Bundle ID принято указывать в доменном стиле ( com.apphud.subscriptionstest ). В разделе Capabilities вы заметите, что галочка рядом с In App Purchases уже стоит. Создав Bundle ID (App ID), перейдите в App Store Connect.
Тестовые пользователи (Sandbox users)
Для тестирования будущих покупок вам нужно будет создать тестового пользователя. Для этого перейдите в ASC во вкладку Пользователи и Доступ, далее в Тестировщики Sandbox.
При создании тестировщика можно указать любые несуществующие данные, главное, не забыть потом email и пароль!
О том, как тестировать покупки с тестовыми учетными данными я расскажу ближе к концу статьи.
Еще один важный шаг — это настройка контрактов и банковских данных в разделе “Соглашения, налоги и банковские операции”. Если у вас не будет настроено соглашение для платных приложений, то вы не сможете тестировать авто-возобновляемые подписки!
После этого можно создать новое приложение в App Store Connect. Укажите уникальное имя и выберите в качестве ID пакета ваш Bundle ID.
Сразу после создания приложения перейдите во вкладку Функции.
Если у вас уже было создано приложение, то можете продолжить читать отсюда.
Процесс создания авто-возобновляемой подписки состоит из нескольких этапов:
Создание идентификатора подписки и создание группы подписок. Группа подписок представляет собой коллекцию подписок с разными периодами и ценами, но которые открывают один и тот же функционал в приложении. Так же в группе подписок можно лишь однажды активировать бесплатный пробный период и лишь одна из подписок может быть активной. Если вы хотите, чтобы в вашем приложении было одновременно две разные подписки, то вам нужно будет создать две группы подписок.
Заполнение данных подписки: длительность, отображаемое название в App Store (не путать с просто названием) и описание. В случае добавления первой подписки в группу необходимо будет указать отображаемое название группы подписок. Не забудьте почаще сохранять изменения, ASC может зависнуть в любой момент и перестать отвечать на запросы.
Заполнение цены подписки. Тут есть два этапа: создание цены и специальных предложений. Укажите реальную цену в любой валюте, она автоматически пересчитается для всех других стран. Вводные предложения: тут вы можете предложить пользователям бесплатный пробный период либо скидки по предоплате. Промо-предложения появились в App Store совсем недавно в 2019 году: они позволяют предлагать особые скидки пользователям, которые отменили подписку и которых вы хотите вернуть.
Генерация секретного общего ключа (shared secret key)
На странице со списком всех ваших созданных подписок вы увидите кнопку Общий ключ для приложения. Это специальная строка, которая нужна для валидирования чека в iOS приложении. Валидировать чек нам нужно будет для определения статуса подписки.
Общий ключ может быть двух видов: уникальный ключ для вашего приложения или единый ключ для вашего аккаунта. Важно: ни в коем случае не пересоздавайте ключ, если у вас уже есть приложение в App Store, иначе пользователи не смогут получить валидировать чек и ваше приложение перестанет работать как положено.
Скопируйте ID всех ваших подписок и общий ключ, это пригодится в дальнейшем в коде.
Программная часть
Приступим к практической части. Что нужно для того, чтобы сделать полноценный менеджер покупок? Должно быть реализовано как минимум следующее:
- Оформление покупок
- Проверка статуса подписки
- Обновление чека
- Восстановление транзакций (не путать с обновлением чека!)
Оформление покупок
Весь процесс оформления покупки можно разделить на 2 этапа: получение продуктов (класс SKProduct ) и инициализация процесса покупки (класс SKPayment ). В первую очередь мы должны указать делегат протокола SKPaymentTransactionObserver .
Полный код доступен по ссылке ниже
Уведомление IAP_PRODUCTS_DID_LOAD_NOTIFICATION используется для того, чтобы обновить UI в приложении.
Далее пишем метод для инициализации покупки:
Делегат SKPaymentTransactionObserver выглядит так:
При успешном оформлении подписки вызывается метод делегата, в котором транзакция имеет состояние purchased .
Но как определить дату истечения подписки? Для этого нужно сделать отдельный запрос в Apple.
Проверка статуса подписки
Чек валидируется с помощью POST-запроса verifyReceipt к Apple, в качестве параметра посылаем зашифрованный чек в виде base64-закодированной строки, а в ответе нам приходит тот же чек в JSON формате. В массиве по ключу latest_receipt_info будут перечислены все транзакции от каждого периода каждой подписки, включая пробные периоды. Нам остается только спарсить ответ и достать актуальную дату истечения для каждого продукта.
На WWDC 2017 добавили возможность получать только актуальные чеки по каждой подписке с помощью ключа exclude-old-transactions в запросе verifyReceipt
В начале метода вы можете видеть, что идет проверка на существование локальной копии чека. Локальный чек может и не существовать, например, если приложение было установлено через iTunes. При отсутствии чека мы не можем выполнить запрос verifyReceipt . Сначала нам нужно получить актуальный локальный чек, а затем снова попытаться его валидировать. Обновление чека делается с помощью класса SKReceiptRefreshRequest :
Обновление чека реализовано в функции refreshReceipt() . Если чек успешно обновился, то вызовется метод делегата requestDidFinish(_ request : SKRequest) , которая повторно вызывает метод refreshSubscriptionsStatus .
Как реализован парсинг информации о покупках? Нам возвращается JSON объект, в котором есть вложенный массив транзакций (по ключу latest_receipt_info ). Проходимся по массиву, достаем дату истечения по ключу expires_date и сохраняем ее, если эта дата еще не наступила.
Я привел простейший пример, как извлечь актуальную дату истечения подписки. Тут нет обработки ошибок и, например, нет проверки на возврат покупки (добавляется cancellation date).
Восстановление транзакций выполняется одной строчкой SKPaymentQueue.default().restoreCompletedTransactions() . Эта функция восстанавливает все завершенные транзакции, снова вызывая метод делегата func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) .
Чем отличается обновление чека от восстановления транзакций?
Оба метода помогают восстановить данные о покупках. Но в чем же их отличия? Есть замечательная таблица с видео wwdc:
В большинстве случаев вам достаточно использовать SKReceiptRefreshRequest() , потому что нас интересует только получение чека для последующего вычисления даты истечения.
В случае авто-возобновляемых подписок сами транзакции нас не интересуют, поэтому достаточно использовать только обновление чека. Однако есть случаи, когда нужно использовать способ восстановления транзакций: если ваше приложение скачивает контент при покупке (Apple hosted content) или если вы до сих пор поддерживаете версии ниже iOS 7.
Тестирование покупок (Sandbox Testing)
Раньше для тестирования покупок необходимо было выходить из App Store в настройках вашего iPhone. Это доставляло большие неудобства (например, стиралась вся медиатека Apple Music). Однако сейчас этого делать не нужно: аккаунт песочницы теперь существует отдельно от основного аккаунта.
Процесс покупки происходит схожим образом в сравнении с реальными покупками в App Store, но есть некоторые моменты:
- Вам всегда нужно будет вводить логин-пароль через системное окно. Покупки с использованием Touch ID/Face ID до сих пор не поддерживаются.
- Если при верном вводе логина и пароля система снова и снова запрашивает логин-пароль, нажмите “Отменить”, сверните приложение, затем попробуйте снова. Выглядит как бред, но у многих срабатывает. Но иногда после второго ввода пароля процесс все же идет дальше.
- Вы никак не сможете протестировать процесс отмены подписки.
- Длительности периодов подписок значительно ниже реальных. И обновляются они не более 6 раз в день.
Что нового в StoreKit в iOS 13?
Заключение
Надеюсь, данная статья вам будет полезна. Я попытался добавить не только код, но и объяснить тонкие моменты при разработке. Полный код класса можете скачать здесь. Этот класс будет очень полезен для ознакомления начинающим разработчикам и тем, кто хочет подробнее узнать, как все устроено. Для живых приложений рекомендуется использовать более серьезные решения, например, SwiftyStoreKit.
Вместе с релизом новой операционной системы iOS 8, Apple добавила в App Store новый раздел «Пакеты игр и приложений» (App Bundles), с помощью которого пользователи могут покупать приложения не по одному, а наборами. Редактор издания Mac Stories Федерико Витиччи узнал у разработчиков приложений об их первом опыте работы по новой модели.
Что такое App Bundles
С помощью пакетов игр и приложений разработчики могут продавать свои программы не по одной, а целым набором, предлагая пользователям соответствующие скидки. В пакет могут входить только платные приложения от одного разработчика.
Мнения разработчиков
Витиччи переговорил с несколькими разработчиками, которые уже воспользовались новой возможностью по продаже приложений пакетами. Сооснователь студии Pixite из Сан-Диего Юджин Канеко сообщил журналисту, что с помощью App Bundles его компании удалось удвоить продажи. Pixite является разработчиком популярных приложений для редактирования фото Fragment, Union и Matter. После выхода iOS 8 студия обновила приложение Fragment и запустила пакет под названием Pixite Photo Kit, в который включены пять приложений. По отдельности они стоили бы $9,95, но покупка пакета обойдется пользователю в $7,99.
Канеко отметил, что изначально команда Pixite скептически относилась к пакетам приложений, поскольку пользователи разрабатываемых ею приложений привыкли покупать их по одному за сумму примерно в $2. Казалось, что людям будет трудно перейти к покупкам за $8 и изменить привычкам. Сооснователь студии говорит, что лично он был уверен в перспективности новой модели, но признает, что в первые дни продажам помогает тот факт, что их пакет рекламируется на главной странице раздела пакетов игр и приложений. Что будет, если он оттуда исчезнет, предприниматель спрогнозировать затруднился.
Еще одна компания, которая смогла улучшить свои результаты, это студия Readdle. Приложения украинских разработчиков (офис компании расположен в Одессе) скачали более 30 млн раз — среди них такие проекты, как PDF Expert, Scanner Pro и Documents. После выхода iOS 8 команда Readdle также обновила свои приложения для поддержки всех функций новой ОС, и выпустила пакет для управления продуктивностью Ultimate Productivity Bundle, включающий четыре приложения. Стоимость всех приложений составила бы $27, но в пакете они значительно дешевле и стоят $19,99.
Директор по маркетингу Readdle Денис Жаданов рассказал журналисту App Stories, что его компания очень довольна нововведениями Apple. С помощью пакета приложений компании удалось попасть в топ-7 разработчиков в категории «продуктивность» в США. По словам Жаданова, многие пользователи раньше не были знакомы со всеми приложениями Readdle и пользовались каким-то одним. После включения в пакет, к примеру, на 250% выросли продажи приложения Calendars 5.
Удвоения выручки удалось добиться и австралийским разработчикам из Shiny Things, которые занимаются созданием приложений для детей. Руководитель компании Мэт Петерсон сообщил журналисту, что за одну ночь после объединения приложений в пакеты продажи практически удвоились — Quick Math и Quick Clocks вошли в пакет Quick Math Pack за $4, а Shiny Party и Shiny Circus сформировали Kids Preschool Learning Pack за $4,99. Петерсон заявил, что эти пакеты смогли добиться «почти 70%» результата по выручке студии за первые выходные после запуска App Bundles.
Федерико Витиччи отмечает и эффективность пакетов для крупных разработчиков. В начале предпоследней недели сентября пакет Angry Birds Ultimate Slingshot Bundle от Rovio занимал двенадцатое место в списке самых популярных платных приложений в App Store для iPad, а пакеты от Toca Boca, ZeptoLab и Disney по цене от $4,99 до $7,99 доминировали в чартах, первые строчки которых обычно занимают приложения стоимостью от $0,99 до $1,99.
Экосистема для разработчиков
По словам многих разработчиков, опрошенных Витиччи, одним из главных плюсов пакетов приложений для них является тот факт, что в пакет можно включать дополняющие друг друга продукты. Это позволяет пользователям лучше узнавать линейку продуктов конкретной компании и начинать пользоваться не одним любимым приложением, а сразу несколькими.
Хорошим примером этого тезиса является Readdle, в чей Ultimate Productivity Bundle входят четыре самых популярных приложения компании, три из которых — PDF Expert, Printer Pro и Scanner Pro, обладают возможностью работы над одним и тем же документом. Получается, что пользователи не только приобретают приложения со скидкой, но и получают «входной билет» в экосистему, которую подготовили разработчики.
Приложения Pixite позволяют по-разному обрабатывать фотографии, поэтому предложение пакета также позволяет пользователям попробовать все предоставляемые разработчиками возможности.
Дополнения
Разработчики также отмечают функцию Complete My Bundle, с помощью которой стало возможным давать второе дыхание старым приложениям, уже не значащимся в App Store в списках «недавних».
Функция позволяет анализировать историю покупок пользователя в App Store и определять, приобретал ли он приложение, входящее в тот или иной пакет. Если пользователь уже владеет одним или несколькими приложениями из пакета, то он может докупить недостающие со скидкой (аналогично функции Complete My Album в iTunes).
Джейсон Крог из Sago Sago говорит, что каждое последующее приложение его студии становилось популярнее предыдущего, а значительная часть пользователей узнала о компании совсем недавно и никогда не пользовалась ее старыми продуктами. Несмотря на то, что в App Store есть способы просмотреть все приложения конкретного разработчика, мало кто хочет совершать много действий для того, чтобы узнать подобную информацию. С помощью пакетов ситуацию можно изменить, предложив пользователям, которые уже установили определенные приложения, другие разработки конкретной компании, входящие в отдельный набор. С финансовой точки зрения это означает облегчение монетизации приложений, которые не являются новыми и в числе обновлений которых только закрывающие ошибки патчи.
Apple еще предстоит доработать эту функцию — разработчики заметили, что в некоторых случаях пользователю дешевле докупить входящие в пакет приложения отдельно, чем приобретать его целиком. Но несмотря на некоторые недоработки, создатели приложений, в целом, оптимистично смотрят на перспективы функции Complete My Bundle, говорит Витиччи.
Новая модель
Помимо всех плюсов, которые принесла новая модель пакетов, разработчики выразили заинтересованность в том, чтобы Apple разрешила включение в пакеты продукты разных компаний. В таком случае менее крупные студии могли бы рассчитывать на попадание в пакеты приложений известных разработчиков, что дало бы им больший охват аудитории и шанс заработать, считает CEO Sago Sago Джейсон Крог. Денис Жаданов из Readdle также отметил тот факт, что в пакеты приложений для Mac обычно входят разработки разных компаний.
Еще одним пожеланием разработчиков является разрешение включения в пакеты приложений, зарабатывающих по модели freemium: сейчас Apple фокусируется исключительно на платных приложениях, что не позволяет разработчикам бесплатных приложений, которые предлагают платные расширения и дополнения, включать свои проекты в пакеты.
По мнению Федерико Витиччи, пакеты приложений и игр могут стать ключевым фактором, который позволит многим разработчикам создать устойчивую долгосрочную модель развития и продаж, комбинируя традиционную модель предварительной оплаты с выгодными для пользователей скидками.
Артур Сахаров, технический директор компании-разработчика мобильных приложений Redmadrobot рассказал ЦП о преимуществах, которые дает разработчикам использование пакетов приложений:
Артур Сахаровтехнический директор Redmadrobot
Что касается App Bundles, то это отличная вещь, которую активно пиарит Apple. Главный её плюс, безусловно, в том, что она позволяет разработчикам самим себя продвигать: сделал одно крутое приложение и остальные свои проекты «посадил ему на хвост». Очень удобно.
За три месяца с момента анонса iOS 8 на WWDC 2014 лучшие приложения сделали обновления с новыми фичами и в первый же день выхода новой ОС выкатили их. Этих приложений всего штук 200 (из миллионов), но именно они формируют ожидания основной массы аудитории. Если ты не успеваешь за этим топ-200, то пользователи начинают считать тебя аутсайдером.
Читайте также: