2015-03-25 23 views
39
  1. 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: Mobile webpage with Download button

  2. 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: Mobile webpage with Download button embedded in Facebook

wygląda to z okna Alert: FB embedded browser with alert box

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:

  1. I nie wydają się odtworzyć to w każdej chwili. Czasami jest to tylko odtwarzalne. Przepraszam!
  2. 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.
  3. 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.
  4. 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

Odpowiedz

4

Ponieważ nie ma odpowiedniej dokumentacji, w jaki sposób to działa, trudno jest określić przyczynę tego .

Pozwólcie mi rozwinąć teorię.

  • Otwarcie aplikacji z przeglądarki powoduje przełączenie kontekstu; rzeczywiście z przeglądarki do App Store. Tak więc po raz pierwszy kosztowałoby to trochę czasu, podczas gdy w późniejszych czasach będzie się otwierać szybciej, ponieważ zostanie otwarte z pamięci podręcznej.

  • Jeśli AppStore używa połączenia Keep-alive między iOS AppStore na urządzeniu i iOS AppStore Server po raz pierwszy otwarcie gniazda na serwerze wydaje się wyższe niż kolejne czasy, ponieważ kolejne żądanie będzie ponownie używać tego samego połączenia.

  • Jeśli aplikacja zostanie usunięta z pamięci podręcznej, ponowne otworzenie aplikacji zajmie trochę czasu, a opóźnienie w sieci będzie niewielkie, ponieważ aplikacja utraci plik cookie do podtrzymywania połączenia, a następnie aplikacja musiałby znieść koszt wstępny.

  • Istnieją również inne czynniki, takie jak zawieszenie przeglądarki Safari, które powoduje opóźnienie. Możesz przeczytać, jak Safari może być pomieszane here.

  • System iOS nie zbiera śmieci, tylko takie rzeczy jak ARC (automatyczne liczenie odwołań). Każda ma swoje zalety i wady. Czasami te wady mogą się pojawić i spowodować pewien problem; niczego nie można wykluczyć. Na przykład wyciek pamięci lub awaria aplikacji może pozostawić zwisające wskaźniki.

  • Technicznie, użycie itms-apps powinno dać niewielką przewagę nad prostym adresem URL iTunes, ponieważ itms-apps powinno zawęzić wyszukiwanie; itms-apps oznaczają iTunes Music Store-apps. Prostym adresem URL iTunes może być Książka (iBook), Muzyka (iTunes), App (Appstore), itp., Więc iOS może zdecydować, którą aplikację uruchomić.

Mam nadzieję, że to pomoże.

+0

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

+0

@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. –

+0

@ethangui - Możesz nawet zapewnić, że 'Caching i Etag' są zaimplementowane w twojej witrynie, aby uniknąć niechcianych zwrotów do serwera. Tylko myśl –

Powiązane problemy