, более удобный. Я считаю, что это просто невежество рецензентов из App Store.

альное приложение Google для iOS,Gboard, имеет интересную функцию, которая не может быть реализована с помощью общедоступных API для iOS SDK (начиная с iOS 10).Я хотел бы точно знать, как Google выполняет задачу программного возврата одного приложения в стек переключения приложений в Gboard.

Пользовательские клавиатуры iOS имеют два основных компонента: приложение контейнера и расширение приложения клавиатуры. Расширение приложения клавиатуры запускается в отдельном процессе ОС, который запускается всякий раз, когда пользователь находится в любом приложении на своем телефоне, которое требует ввода текста.

Вот приблизительные шаги, которые можно выполнить, используя Gboard, чтобы увидеть эффект программного возврата к предыдущему приложению:

Пользователь запускает AppleСообщения приложение на своем iPhone и коснитесь текстового поля, чтобы начать ввод текста.Запущено расширение клавиатуры Gboard, и пользователи видят пользовательскую клавиатуру Gboard (пока они все еще находятся в приложении Apple Messages).Пользователь нажимает клавишу микрофона внутри расширения клавиатуры Gboard, чтобы сделать голосовой ввод текста.Gboard используетпользовательская схема URL запустить приложение контейнера Gboard. Клавиатура Gboard и приложение сообщений Apple помещаются на один уровень в стек приложений, и приложение-контейнер Gboard теперь является самым передним приложением в стеке приложений. Контейнерное приложение Gboard использует микрофон для прослушивания речи пользователя и переводит ее в текст, который он помещает на экран.Пользователь нажимает кнопку «Готово», когда он удовлетворен вводом текста, который он видит на экране.Вот где происходит волшебство ... когда экран ввода текста закрывается, приложение контейнера Gboard также автоматически закрывается. Приложение контейнера Gboard исчезает и заменяется приложением Apple Messages (иногда процесс расширения клавиатуры Gboard все еще активен, иногда он перезапускается, а иногда его необходимо перезапустить вручную, нажав внутри текстового поля.). Как Google достигает этого?Наконец, пользователь видит, что только что переведенный текст автоматически вставляется в поле ввода текста. Предположительно Google выполняет этообмен данными между приложением контейнера Gboard и расширением клавиатуры.

Я предположил бы, что Google использует частные API, исследуя иерархию представления строки состояния с помощью самоанализа времени выполнения Objective C и каким-то образом синтезируя события касания или вызывая выставленную цель / действие. Я изучил это очень мало и смог найти интересные подклассы UIView в строке состояния, напримерUIStatusBarBreadcrumbItemView который содержит массивUISystemNavigationActions. Я продолжаю исследовать эти классы в надежде, что смогу найти какой-нибудь способ репликации взаимодействия с пользователем.

Я понимаю, что использование частных API - хороший способ отклонить отправку вашего приложения из App Store - это не проблема, на которую я бы хотел ответить в ответе. В первую очередь я ищу конкретные ответы о том, как именно Google выполняет задачу программного возврата одного приложения в стек переключения приложений в Gboard.

Ответы на вопрос(1)

Ваш ответ на вопрос