Я пытался найти некоторую информацию о новом переключателе многозадачности в iOS 7 и особенно о снимке экрана, который ОС делает, когда приложение переходит в режим гибернации.
Есть ли способ полностью отключить эту функцию или снимок экрана? Или можно вообще скрыть приложение от переключателя? Приложение должно работать в фоновом режиме, но мы не хотим показывать снимки экрана из приложения.
Снимок экрана потенциально представляет собой угрозу безопасности, подумайте также о банковских приложениях, где номер вашей карты или сводка по счету будут доступны любому, кто дважды щелкнет кнопку «Домой» на устройстве.
Кто-нибудь знает об этом? Спасибо.
Ответы:
В разделе «Подготовка пользовательского интерфейса к работе в фоновом режиме» Apple говорит:
См. Технические вопросы и ответы QA1838: Предотвращение появления конфиденциальной информации в переключателе задач
В дополнение к скрытию / замене конфиденциальной информации вы также можете указать iOS 7 не делать снимок экрана через
ignoreSnapshotOnNextApplicationLaunch
, чья документация гласит:Сказав это, похоже, что снимок экрана все еще сделан, и поэтому я отправил отчет об ошибке. Но вам следует продолжить тестирование и посмотреть, помогает ли использование этого параметра.
Если это приложение предприятие, вы также можете посмотреть в соответствующей обстановке
allowScreenShot
изложенных в Ограничения Payload разделе Configuration Profile Reference.Вот реализация, которая дает то, что мне нужно. Вы можете представить свой собственный
UIImageView
или использовать шаблон делегированного протокола, чтобы скрыть конфиденциальную информацию:Затем я дал своему делегату приложения свойство для этого:
Мой контроллер представления устанавливает его:
Контроллер представления, очевидно, реализует этот протокол:
И, наконец, делегат моего приложения использует этот протокол и свойство:
Обратите внимание: я использую,
applicationWillResignActive
а не рекомендованныйapplicationDidEnterBackground
, потому что, как указывали другие, последний не вызывается при двойном нажатии на кнопку «Домой» во время работы приложения.Я хотел бы использовать уведомления для обработки всего этого, а не шаблон делегат-протокол, но в моем ограниченном тестировании уведомления не обрабатываются достаточно своевременно, но вышеуказанный шаблон работает нормально.
источник
ignoreSnapshotOnNextApplicationLaunch
метод игнорируется, если он не вызывается во время восстановления состояния, как описано здесь .ignoreSnapshotOnNextApplicationLaunch
неверна, что, как мы все заметили, моментальный снимок действительно сделан, но просто не будет использоваться при следующем запуске.Это решение, с которым я работал для своего приложения:
Как сказал Томми: вы можете использовать applicationWillResignActive. Что я сделал, так это сделал UIImageView с моим SplashImage и добавил его как subview в мое главное окно -
Я использовал этот метод вместо applicationDidEnterBackground, потому что applicationDidEnterBackground не сработает, если вы дважды нажмете кнопку «Домой», а applicationWillResignActive будет. Я слышал, как люди говорили, что он может срабатывать и в других случаях, поэтому я все еще проверяю, есть ли проблемы, но пока нет! ;)
Здесь, чтобы удалить изображение:
Надеюсь это поможет!
Примечание: я тестировал это как на симуляторе, так и на реальном устройстве: он не будет отображаться на симуляторе, но на реальном устройстве!
источник
Этот быстрый и простой метод позволит получить черный снимок над значком вашего приложения в переключателе приложений iOS7 или более поздней версии.
Сначала возьмите ключевое окно вашего приложения (обычно настраивается в AppDelegate.m в application: didFinishLaunchingWithOptions) и скройте его, когда ваше приложение собирается перейти в фоновый режим:
Затем отмените скрытие ключевого окна вашего приложения, когда ваше приложение снова станет активным:
На этом этапе проверьте переключатель приложений и убедитесь, что вы видите черный снимок над значком вашего приложения. Я заметил, что если вы запустите переключатель приложений сразу после перемещения приложения в фоновый режим, может возникнуть задержка примерно на 5 секунд, когда вы увидите снимок своего приложения (тот, который вы хотите скрыть!), После который переходит в полностью черный снимок. Я не уверен, что случилось с задержкой; если у кого-то есть предложения, пожалуйста, свяжитесь с нами.
Если вы хотите, чтобы в переключателе был другой цвет, а не черный, вы можете сделать что-то вроде этого, добавив подпредставление с любым цветом фона, который вам нужен:
Затем удалите это представление цвета, когда ваше приложение снова станет активным:
источник
Я использовал следующее решение: когда приложение собирается уволиться, я получаю снимок appWindow как View и добавляю к нему размытие. Затем я добавляю это представление в окно приложения
как это сделать:
в appDelegate непосредственно перед реализацией добавьте строку:
добавьте эти методы:
сделайте вашу реализацию appDelegate следующим образом:
Я создал Пример проектов в Swift и Objective C . Оба проекта производят следующие действия в:
-application: didResignActive - снимок создается, размывается и добавляется в окно приложения
-application: willBecomeActive вид размытия удаляется из окна.
Как пользоваться:
Objecitve C
Добавьте
AppDelegate+NVSBlurAppScreen
в проект файлы .h и .mв вашем методе -applicationWillResignActive: добавьте следующую строку:
в вашем методе -applicationDidEnterBackground: добавьте следующую строку:
Swift
добавьте файл AppDelegateExtention.swift в свой проект
в вашей функции applicationWillResignActive добавьте следующую строку:
в вашей функции applicationDidBecomeActive добавьте следующую строку:
источник
если используется только
[self.window addSubview:imageView];
вapplicationWillResignActive
функции, этот imageView не будет охватывать UIAlertView, UIActionSheet или MFMailComposeViewController ...Лучшее решение
источник
Предлагаю свое собственное решение в качестве «ответов», хотя это решение очень ненадежно. Иногда в качестве снимка экрана отображается черный экран, иногда - XIB, а иногда - снимок экрана самого приложения. В зависимости от устройства и / или запускаю это в симуляторе.
Обратите внимание, что я не могу предоставить код для этого решения, так как там много деталей, специфичных для приложения. Но это должно объяснить основную суть моего решения.
источник
Вы можете использовать активатор для настройки двойного нажатия кнопки «Домой» для запуска многозадачности и отключения двойного нажатия кнопки «Домой» по умолчанию и запуска окна многозадачности. Этот метод можно использовать для замены снимков экрана на изображение по умолчанию для приложения. Это применимо к приложениям с функцией защиты паролем по умолчанию.
источник
Xamarin.iOS
Взято из https://stackoverflow.com/a/20040270/7561
Вместо того, чтобы просто показывать цвет, я хотел показать свой стартовый экран.
источник