Как специальная клавиатура Google для iOS, Gboard, программно закрывает самое переднее приложение? ⇐ IOS
Как специальная клавиатура Google для iOS, Gboard, программно закрывает самое переднее приложение?
Специальное приложение Google для iOS, Gboard, имеет интересную функцию, которую невозможно реализовать с помощью общедоступных API в iOS SDK (начиная с iOS 10). Мне хотелось бы точно знать, как Google выполняет задачу программного возврата одного приложения в стек переключения приложений в Gboard.
Пользовательские клавиатуры iOS состоят из двух основных компонентов: приложения-контейнера и расширения приложения для клавиатуры. Расширение приложения клавиатуры запускается в отдельном процессе ОС, который запускается всякий раз, когда пользователь находится в любом приложении на своем телефоне, требующем ввода текста.
Вот приблизительные шаги, которые можно выполнить с помощью Gboard, чтобы увидеть эффект программного возврата к предыдущему приложению:
[*]Пользователь запускает приложение Apple Messages на своем 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.
Специальное приложение Google для iOS, Gboard, имеет интересную функцию, которую невозможно реализовать с помощью общедоступных API в iOS SDK (начиная с iOS 10). Мне хотелось бы точно знать, как Google выполняет задачу программного возврата одного приложения в стек переключения приложений в Gboard.
Пользовательские клавиатуры iOS состоят из двух основных компонентов: приложения-контейнера и расширения приложения для клавиатуры. Расширение приложения клавиатуры запускается в отдельном процессе ОС, который запускается всякий раз, когда пользователь находится в любом приложении на своем телефоне, требующем ввода текста.
Вот приблизительные шаги, которые можно выполнить с помощью Gboard, чтобы увидеть эффект программного возврата к предыдущему приложению:
[*]Пользователь запускает приложение Apple Messages на своем 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.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение