Система iOS зависает перед открытием URL-адреса магазина приложений
-
У меня есть страница HTML с кнопкой "Загрузить приложение". При нажатии пользователем iOS он перенаправляет пользователей в App Store через itms-services. Используемая здесь ссылка:
window.location.replace("itms-apps://itunes.apple.com/app/id578505616");
В мобильном браузере он выглядит так:
![Mobile webpage with Download button]()
-
Facebook/Pinterest имеет браузер в приложении, который запрашивает согласие пользователя, прежде чем перенаправить пользователя из своего приложения в форме окна "Предупреждение" с помощью приложения "Отменить" или "Открыть", открытое приложение открывает внешнюю ссылку. Это выглядит так:
![Mobile webpage with Download button embedded in Facebook]()
Похоже на это с помощью окна "Предупреждение":
![FB embedded browser with alert box]()
Предполагая, что пользователь использует устройство iOS. Ожидаемое поведение здесь, когда нажата кнопка Open app, пользователь перенаправляется в приложение App Store. Однако мы наблюдаем за 10-секундную задержку до того, как произойдет фактическое перенаправление.
Смотрите видео ниже:
https://www.youtube.com/watch?v=_dgh7v-IsK8
https://www.youtube.com/watch?v=_LFHeRnBFgg
https://www.youtube.com/watch?v=82Y-kj-pMyw
Примечания:
- Я не могу воспроизвести это в любое время. Иногда это воспроизводится. Извините!
- После того, как устройство будет отложено в первый раз, все последующие ссылки на AppStores будут быстрыми, до примерно 1 дня. Перезагрузка телефона и/или очистка кеша браузера и/или переустановка Facebook/Pinterest не помогают воспроизвести это.
- Я попытался заменить ссылку itms-apps://на https://itunes.apple.com/us/app/trusper-tips-tutorials-how/id578505616?mt=8, но мы все еще испытывали задержку от времени до время.
- Задержка составляет ровно 10 секунд.
Почему происходит эта задержка? Это похоже на плохой пользовательский интерфейс.
Моя нынешняя теория заключается в том, что проблема стоит на стороне Apple. Причина заключается в том, что после нажатия кнопки Open app она находится вне нашего сайта, а также приложение Facebook/Pinterest. Я предполагаю, что после нажатия кнопки iOS обрабатывает фактический контекстный переключатель из одного приложения в другое. Поэтому он предполагает, что либо системный вызов, фактически открывающий URL-адрес, висит, либо системный вызов, открывающий приложение App Store, является? Тем не менее, я не смог доказать, что кто-либо является правдивым или ложным. У кого-нибудь есть лучшее объяснение?
[Редактировать 04/02/2015]
Я могу подтвердить, что эта проблема по-прежнему существует на сегодняшний день на моем телефоне (iPhone 5S w/iOS 8.2).
Я сделал некоторые дальнейшие исследования и нашел эту статью, которая, я думаю, предполагает, что это ошибка, связанная с системой iOS: OpenUrl затягивает приложение более 10 секунд
Ответы
Ответ 1
Поскольку нет надлежащей документации о том, как это работает, трудно определить причину этого.
Позвольте мне выдвинуть теорию.
-
Открытие приложения из браузера вызывает контекстный переключатель; от браузера до App Store. Так что в первый раз это будет стоить некоторое время, в то время как в последующие времена оно будет открываться быстрее, поскольку оно будет открыто из кеша.
-
Если вы считаете, что AppStore использует соединение Keep-alive между iOS AppStore в устройстве и iOS AppStore Server, то при первом открытии сокета на сервере будет казаться выше, чем в последующие моменты, когда последующий запрос будет повторно использовать одно и то же соединение.
-
Если приложение будет удалено из кеша, снова потребуется некоторое время для открытия приложения, и будет небольшая сетевая задержка, так как приложение потеряет файл cookie для подключения keep-alive, затем приложение должно было бы перенести стоимость открытия магазина.
-
Есть и другие факторы, такие как Safari, висящие, что приводит к некоторой задержке. Вы можете прочитать, как Safari можно испортить здесь.
-
iOS не содержит сборку мусора, только такие вещи, как ARC (автоматический подсчет ссылок). У каждого свои преимущества и недостатки. Иногда эти недостатки могут возникать и вызывать некоторые проблемы; ничто не должно быть исключено. Например, утечка памяти или сбой приложения могут оставить оборванные указатели.
-
Технически использование itms-apps
должно дать небольшое преимущество перед обычным URL-адресом iTunes, потому что itms-apps
должен сузить поиск; itms-apps
означает iTunes Music Store-приложения.
Обычным URL-адресом iTunes может быть книга (iBook), музыка (iTunes), приложение (Appstore) и т.д., Поэтому iOS, возможно, придется решить, какое приложение запускаться.
Надеюсь, это поможет.