Mam stronę HTML z przyciskiem Pobierz aplikację. Po kliknięciu przez użytkownika iOS przekierowuje użytkowników do sklepu App Store za pośrednictwem itms-services. Łącze użyłem tutaj jest:System iOS zawiesza się przed otwarciem URL App Store
window.location.replace("itms-apps://itunes.apple.com/app/id578505616");
Wygląda więc na przeglądarce mobilnej:
Facebook/Pinterest ma przeglądarkę w aplikacji, która prosi o zgodę użytkownika przed przekierować użytkownika na zewnątrz ich aplikacji w postaci pola Alert z aplikacją Anuluj lub Otwórz, która otwiera aplikację otwiera link zewnętrzny. Wygląda to tak:
wygląda to z okna Alert:
Zakładając, że użytkownik korzysta z urządzenia z systemem iOS. Oczekiwane zachowanie występuje po kliknięciu przycisku Otwórz aplikację, a użytkownik zostaje przekierowany do aplikacji App Store. Jednak widzimy około 10 sekund opóźnienia, zanim nastąpi faktyczne przekierowanie.
Zobacz wideo poniżej:
https://www.youtube.com/watch?v=_dgh7v-IsK8
https://www.youtube.com/watch?v=_LFHeRnBFgg
https://www.youtube.com/watch?v=82Y-kj-pMyw
Uwagi:
- I nie wydają się odtworzyć to w każdej chwili. Czasami jest to tylko odtwarzalne. Przepraszam!
- Gdy urządzenie zostanie opóźnione po raz pierwszy, wszystkie kolejne łącza do AppStores będą szybkie, z opóźnieniem około 1 dzień. Ponowne uruchomienie telefonu i/lub wyczyszczenie pamięci podręcznej przeglądarki i/lub ponowne zainstalowanie Facebook/Pinterest nie pomaga w odtworzeniu tego.
- Próbowałem zastąpić połączenie itms-apps: // z https://itunes.apple.com/us/app/trusper-tips-tutorials-how/id578505616?mt=8, ale od czasu do czasu wciąż odczuwaliśmy opóźnienie.
- Opóźnienie wydaje się być dokładnie 10 sekund.
Dlaczego występuje to opóźnienie? To wydaje się być kiepskim doświadczeniem użytkownika.
Moja obecna teoria mówi, że problem leży po stronie Apple. Powodem jest to, że po kliknięciu przycisku Otwórz aplikacja jest poza zasięgiem naszej strony internetowej, a także aplikacji Facebook/Pinterest. Zakładam, że po kliknięciu tego przycisku system iOS obsługuje rzeczywistą zmianę kontekstu z jednej aplikacji na drugą. W związku z tym sugeruje, że wywołanie systemowe faktycznie otwierające adres URL jest zawieszone lub wywołanie systemowe otwierające aplikację App Store to? Jednak nie byłem w stanie udowodnić, że którykolwiek z nich jest prawdziwy lub fałszywy. Czy ktoś ma lepsze wytłumaczenie?
[Edytuj 04/02/2015] Mogę potwierdzić, że ten problem nadal istnieje od dzisiaj na moim telefonie (iPhone 5S w/iOS 8.2). zrobiłem kilka dalszych badań i znalazłem ten artykuł, który moim zdaniem jest co sugeruje, że jest to związane z systemem iOS bug: OpenUrl freezes app for over 10 seconds
Dziękujemy za odpowiedź, ale doświadczyliśmy tego samego 10-sekundowego opóźnienia zarówno w aplikacjach itms-apps, jak i http. Jest to z pewnością prawdopodobne, że to zachowanie ma coś wspólnego z buforowaniem, ponieważ po zawieszeniu na raz, nie będzie zawieszał się ponownie przez około jeden dzień, bez względu na to, czy ktoś zabije aplikację, czy ponownie uruchomi telefon. Mimo to pamięć podręczna pomogła zmniejszyć wpływ błędu bazowego - nie wyjaśnia ani nie rozwiązuje tego problemu. Co więcej, mogę argumentować, że pamięć podręczna nie jest ogólnie przydatna do pozyskiwania nowych użytkowników - ponieważ 10-sekundowe opóźnienie już odwróciło wielu potencjalnych użytkowników. – ethangui
@ethangui - Tak, masz rację. Pamięć podręczna odgrywa kluczową rolę w przejściu między przeglądarką a sklepem app.Gdy aplikacja nie jest otwierana z pamięci podręcznej i będzie wolna. Jest to wspólne dla wszystkich i nic nie możemy zrobić o tym, ponieważ jest poza naszym zasięgiem. zobacz "[UIApplication sharedApplication] openURL:]' Opóźnienie jest w aplikacji na iOS, więc możemy wypróbować niektóre obejście Ale z przeglądarką możemy zrobić to zaprojektować stronę (która hostuje 'itms : // apps'), które nie zaszkodzi przeglądarce, biorąc pod uwagę wytyczne w http://goo.gl/KVaA6P. aby nie wprowadzać żadnych dodatkowych obciążeń powodujących opóźnienie. –
@ethangui - Możesz nawet zapewnić, że 'Caching i Etag' są zaimplementowane w twojej witrynie, aby uniknąć niechcianych zwrotów do serwera. Tylko myśl –