#iphone #ios
#iPhone #iOS
Вопрос:
Возможно ли, чтобы два приложения получали доступ к документам друг в друге, учитывая, что у них одинаковый начальный идентификатор пакета. Я знаю, что можно совместно использовать элементы в связке ключей с приложениями, которые совместно используют начальный идентификатор пакета (смотрите здесь).
Допустим, у вас было приложение, у которого была бесплатная версия и платная версия. Возможно ли, что после того, как кто-то обновился с бесплатной версии на платную, вы могли бы перенести их данные на платную версию?
Ответ №1:
Вы не можете совместно использовать каталоги документов между приложениями. Но открыты и другие каналы связи.
Связка ключей — это одна из возможностей, как вы упомянули.
Другим могут быть пользовательские схемы URL. Может быть, что-то вроде этого:
- Бесплатное приложение регистрирует возможность открывать URL-адреса с помощью
freeapp://
scheme. Аналогичным образом приложение Pro регистрирует возможность открывать URL-адреса с помощьюproapp://
scheme. Используйте запись «Типы URL» в информационном списке. - Pro app проверяет, есть ли
[UIApplication canOpenURL:@"freeapp://goPro"] == YES
- Если значение true, приложение pro вызывает
[UIApplication openURL:@"freeapp://goPro"]
- Это запускает бесплатное приложение, которое должно быть реализовано
handleOpenURL
изUIApplication
. - Бесплатное приложение объединяет необходимые данные в URL-адрес. При желании вы можете использовать параметры, подобные HTTP. Вы также можете создать словарь и сериализовать его в длинную шестнадцатеричную строку с помощью
NSCoding
. - Бесплатное приложение передает данные обратно в профессиональное приложение с помощью
[UIApplication openURL:@"proapp://YOUR_DATA_IN_WHATEVER_FORMAT"]
- Приложение pro получает URL-адрес в своей переопределенной реализации
handleOpenURL
fromUIApplication
и выполняет необходимый перенос данных.
Очевидно, вы хотите использовать более уникальные схемы URL, чем приведенные выше.
Однако подумайте о последствиях для безопасности, связанных с возможностью ввода данных такого типа в ваше приложение с использованием URL-адресов. Вероятно, это нормально для многих целей, но я уверен, что если бы приложение Facebook предоставляло способ взлома настроек вашей учетной записи с помощью URL-адреса, некоторые люди сочли бы забавным размещать facebookapp://reset_my_account
ссылки повсюду.
Бонусный совет: схемы URL также очень удобны для устранения разрыва между машинным кодом и веб-представлениями. У меня было несколько приложений со встроенным веб-представлением, показывающим страницу на сервере под моим контролем. Веб-страница может взаимодействовать с приложением, задав местоположение документа из JS. Приложение может перехватить запрос в делегате веб-просмотра и ответить на веб-просмотр с помощью stringByEvaluatingJavaScriptFromString
.