HTML5 a reklamy natywne

Debata o aplikacjach mobilnych

Michael Mahemoff
Michael Mahemoff

Wprowadzenie

Aplikacje mobilne i HTML5 to obecnie 2 najpopularniejsze technologie, które w dużej mierze się pokrywają. Aplikacje internetowe działają w przeglądarkach mobilnych i mogą być też przepakowywane jako aplikacje natywne na różne platformy mobilne. Ze względu na szeroką gamę platform do obsługi oraz ogromne możliwości przeglądarek mobilnych deweloperzy zwracają się ku HTML5 jako rozwiązaniu typu „napisz raz, uruchamiaj wielokrotnie”. Czy to naprawdę możliwe? Nadal istnieją istotne powody, dla których warto tworzyć aplikacje natywne, i wielu deweloperów rzeczywiście wybiera tę drogę. Ten artykuł to debata na temat aplikacji natywnych i internetowych.

Bogactwo funkcji

Punkt: reklamy natywne mogą więcej

Funkcje mobilne można podzielić na 2 wymiary: działanie samej aplikacji i sposób, w jaki łączy się ona z ekosystemem urządzenia, np. w przypadku Androida byłyby to funkcje takie jak widżety i powiadomienia. Reklamy natywne doskonale sprawdzają się w obu tych obszarach.

Jeśli chodzi o wrażenia użytkownika, aplikacje natywne mają większe możliwości. Można łatwo uzyskać zdarzenia przesunięcia, a nawet zdarzenia wielodotykowe na platformach, które je obsługują. Zwykle mogą reagować na naciśnięcie klawiszy fizycznych, takich jak przycisk wyszukiwania i przyciski głośności na urządzeniu z Androidem. Mogą też korzystać ze sprzętu, takiego jak GPS i aparat. Za zgodą użytkownika niektóre platformy zapewniają nieograniczony dostęp do systemu operacyjnego. Spróbuj sprawdzić poziom naładowania baterii za pomocą HTML5.

Nie chodzi jednak tylko o wrażenia użytkownika aplikacji. System operacyjny taki jak Android zapewnia aplikacjom różne sposoby interakcji z użytkownikami i innymi aplikacjami. Na stronie głównej masz aktywne widżety. Masz powiadomienia, które wyświetlają się na pasku stanu urządzenia. Są też intencje, które pozwalają aplikacji ogłosić, że świadczy ona ogólną usługę, której inne aplikacje mogą czasami potrzebować.

Kontrargument: funkcje natywne można rozszerzać, a sieć i tak nadrabia zaległości

To prawda, że wiele funkcji w aplikacji jest po prostu poza zasięgiem aplikacji HTML5. Niezależnie od tego, jak dobre są Twoje umiejętności, jeśli aplikacja utknęła w piaskownicy bez interfejsu API aparatu, nie będzie mogła robić zdjęć. Na szczęście nie musisz być w tej piaskownicy. Jeśli naprawdę potrzebujesz, aby aplikacja internetowa robiła zdjęcia, możesz utworzyć aplikację natywną z wbudowanym widokiem internetowym, który zapewnia większość interfejsu użytkownika. Tak działa platforma PhoneGap typu open source: wypełnia lukę, udostępniając funkcje natywne jako usługi internetowe, które widok internetowy wywołuje za pomocą standardowego interfejsu API sieci. Gdy tworzysz taką aplikację hybrydową, możesz też korzystać z funkcji platformy, takich jak widżety, powiadomienia i intencje.

Tworzenie aplikacji hybrydowej – natywnej i internetowej – nie jest idealnym rozwiązaniem. Zwiększa to złożoność i dotyczy tylko aplikacji internetowych opakowanych jako aplikacje natywne, a nie tradycyjnych witryn, do których dostęp uzyskuje się z przeglądarki mobilnej. Ale może nie być potrzebne na długo. Standardy internetowe szybko się rozwijają, a nowoczesne przeglądarki mobilne dotrzymują im kroku. Na przykład pamięć offline, geolokalizacja, grafika canvas oraz odtwarzanie filmów i dźwięku są powszechnie obsługiwane przez nowoczesne smartfony. Nawet aparat zaczyna być obsługiwany – od Androida 3.1 można robić zdjęcia i nagrywać filmy przy użyciu standardów internetowych. Najnowsza przeglądarka na iOS obsługuje WebSocket do dwukierunkowego strumieniowania, a także wykrywanie orientacji urządzenia.

Ogólnie rzecz biorąc, urządzenia mobilne ewoluują. Internet jednak również szybko się rozwija. Wśród samych przeglądarek na komputery jest 5 głównych dostawców, którzy rozwijają standardy i dodają funkcje w błyskawicznym tempie. Przeniesienie tych funkcji na urządzenia mobilne nie jest łatwe, ale wiele z nich jest już dostępnych w przeglądarkach mobilnych.

Aplikacje natywne szybko się rozwijają, ale internet nadrabia zaległości.

Wydajność

Punkt: aplikacje natywne działają szybciej

Aplikacje natywne nie muszą borykać się z barierą środowiska wykonawczego sieci. Działają one blisko sprzętu i mogą korzystać z funkcji zwiększających wydajność, takich jak akceleracja GPU i wielowątkowość.

Kontrargument: środowiska wykonawcze sieci są obecnie znacznie szybsze, a większość aplikacji i tak nie potrzebuje takiej szybkości.

Stwierdzenie, że w ostatnich latach internet przyspieszył, byłoby niedopowiedzeniem. V8, czyli mechanizm JavaScriptu dostarczany z Chrome, był w momencie wprowadzenia na rynek dużym krokiem naprzód w zakresie wydajności sieci, a od tego czasu stał się jeszcze szybszy:

Wykres wydajności V8

Silniki renderowania grafiki również przyspieszyły działanie internetu, a teraz zaczyna się pojawiać akceleracja sprzętowa. Zobacz, jak przyspiesza działanie płótno z akceleracją sprzętową:

Wykres obiektu canvas z akceleracją sprzętową

Ponadto nowy interfejs Web Workers API umożliwia wielowątkowość, a nowocześni programiści stron internetowych mogą też korzystać z szeregu bibliotek zoptymalizowanych pod kątem wydajności i dobrze sprawdzonych technik optymalizacji wydajności. Większość z nich powstała z myślą o stronach na komputery, ale nadal są one przydatne w przypadku urządzeń mobilnych, którym poświęca się coraz więcej uwagi. Na przykład Steve Souders, guru w dziedzinie wydajności, ma stronę poświęconą narzędziom do mierzenia wydajności na urządzeniach mobilnych.

Nie wszystkie postępy w dziedzinie komputerów zostały jeszcze wprowadzone na wszystkich platformach mobilnych, ale trendy wskazują, że są one na dobrej drodze. Warto też zauważyć, że większość aplikacji mobilnych to nie najnowocześniejsze gry 3D, ale aplikacje informacyjne: wiadomości, poczta, rozkłady jazdy, sieci społecznościowe itp. Odwiedź kilka witryn z urządzenia mobilnego, np. Gmail, Amazon, Twitter, a przekonasz się, że wydajność internetu mobilnego jest więcej niż wystarczająca. Jeśli chodzi o gry, podstawowe można już tworzyć za pomocą Canvas 2D, a WebGL zaczyna pojawiać się na urządzeniach mobilnych – zobacz Firefoksa 4. Zanim stanie się powszechna, rośnie liczba platform, które kompilują aplikacje WebGL do aplikacji natywnych, które mogą korzystać z OpenGL, np. ImpactJS.

Środowisko programistyczne

Punkt: aplikacje natywne są łatwiejsze do opracowania

Aplikacje natywne używają zaawansowanych języków programowania (np. Java, Objective C, C++), które zostały zaprojektowane do tworzenia złożonych aplikacji i mają sprawdzoną skuteczność. Interfejsy API zostały zaprojektowane od podstaw, aby obsługiwać daną platformę. Możesz łatwo debugować aplikacje w emulatorach na komputery, które dokładnie odzwierciedlają urządzenie docelowe.

Tworzenie stron internetowych jest szczególnie trudne ze względu na ogromną różnorodność przeglądarek i środowisk wykonawczych. Gdy aplikacja jest uruchomiona, nie ma gwarancji, że funkcja X będzie dostępna. Nawet jeśli tak, to jak przeglądarka będzie ją implementować? Standardy można interpretować na różne sposoby.

Kontrargument: aplikacje internetowe są często łatwiejsze do opracowania, zwłaszcza jeśli są przeznaczone na wiele urządzeń.

Zacznijmy od podstawowej technologii. To prawda, że standardy internetowe powstały w czasach, gdy internet składał się głównie z dokumentów, a nie aplikacji, a JavaScript został stworzony i wdrożony w zaledwie 10 dni. Okazało się jednak, że mają znacznie większe możliwości, niż się spodziewano – twórcy stron internetowych nauczyli się wykorzystywać ich zalety i ograniczać wady, a wzorce są obecnie zrozumiałe dla skalowalnego projektowania. Co więcej, standardy nie stoją w miejscu, a takie rozwiązania jak HTML5, CSS3 i EcmaScript Harmony ułatwiają pracę programistom. To, czy wolisz C++, Javę czy JavaScript, jest kwestią preferencji, a także zależy od Twojej starszej bazy kodu. Ale obecnie możemy z pewnością uznać JavaScript za poważnego konkurenta.

Drugą stroną fragmentacji przeglądarek i środowisk wykonawczych jest fakt, że wszystkie te środowiska w ogóle istnieją. Jeśli tworzysz aplikację na Androida w języku Java, musisz ją w pełni przenieść na Objective C, aby obsługiwała iOS. Aplikację internetową wystarczy utworzyć raz, aby działała na Androidzie i iOS, nie wspominając o WebOS, BlackBerry, Windows Mobile i… cóż, przynajmniej w teorii. W praktyce musisz dostosować elementy do każdej platformy, jeśli chcesz, aby wszystko działało prawidłowo. Ale w przypadku aplikacji natywnych też trzeba to robić, bo jest wiele wersji i urządzeń.

Dobra wiadomość jest taka, że „fragmentacja” zawsze była obecna w internecie i istnieją dobrze znane techniki radzenia sobie z nią. Co najważniejsze, zasada progresywnego ulepszania zachęca deweloperów do kierowania aplikacji najpierw na podstawowe urządzenia, a następnie dodawania warstw funkcji specyficznych dla platformy, jeśli są dostępne. Pomaga też mantra wykrywania funkcji, a obecnie mamy wsparcie biblioteki od takich firm jak Modernizr, które wspierają elastyczne projektowanie witryn. Dzięki rozsądnemu wykorzystaniu tych technik możesz rozszerzyć zasięg na zdecydowaną większość urządzeń, nawet na starsze telefony z podstawową przeglądarką, a także na zegarki i telewizory, niezależnie od marki i systemu operacyjnego. Zobacz naszą prezentację wielu interfejsów na Google IO 2011, podczas której pokazaliśmy, jak dostosować stronę do różnych formatów (telefon z podstawową przeglądarką, smartfon, tablet, komputer, telewizor) przy użyciu wspólnej bazy kodu logiki i znaczników.

Wygląd i styl

Punkt: reklamy natywne pasują do wyglądu i stylu platformy

Jedną z cech definiujących każdą platformę jest jej wygląd i sposób działania. Użytkownicy oczekują, że elementy sterujące będą prezentowane w spójny sposób i będą działać tak samo. Niektóre idiomy różnią się w zależności od platformy, np. co się dzieje, gdy użytkownik wykonuje „długie przytrzymanie” (dotyka elementu przez kilka sekund)? Platformy mają standardowe idiomy dla takich rzeczy i nie można ich wszystkich spełnić za pomocą jednej aplikacji HTML5.

Ponadto wygląd i styl platformy są zarządzane przez jej natywną bibliotekę oprogramowania, której widżety zawierają wygląd i styl oczekiwany przez użytkowników. Wiele oczekiwanych elementów wyglądu i funkcji otrzymujesz „bezpłatnie”, korzystając z natywnego zestawu narzędzi.

Kontrargument: internet ma swój własny wygląd i możesz też dostosować interfejs internetowy do platform, które są dla Ciebie najważniejsze.

Jak wyjaśniliśmy w poprzedniej sekcji, tworzenie stron internetowych polega na napisaniu podstawowej wersji „uniwersalnej”, a następnie jej stopniowym ulepszaniu. Ulepszenia są zwykle oparte na funkcjach, ale możesz też ulepszyć aplikację, kierując ją na platformy, na których najbardziej Ci zależy. Jest to rodzaj „wykrywania przeglądarki”, który jest czasem źle widziany przez społeczność internetową, głównie dlatego, że istnieje tak wiele możliwych przeglądarek. Jeśli jednak masz 2 lub 3 platformy o bardzo wysokim priorytecie i chcesz podjąć dodatkowy wysiłek, aby konkurować z natywnymi alternatywami, może to być właściwa droga.

Jeśli chodzi o wersję podstawową, internet ma swój własny wygląd i styl. Można nawet powiedzieć, że każda platforma mobilna ma swój własny „wygląd i styl internetu” określony przez przeglądarkę domyślną i środowisko wykonawcze. „Wygląd i działanie strony internetowej” może być odpowiedni dla użytkowników, a nawet pozwala osiągnąć większy stopień spójności z przeglądaniem na komputerze, a także na innych urządzeniach, z którymi użytkownik może pracować. Poza tym istnieje wiele popularnych aplikacji, które nie obsługują natywnego wyglądu i interfejsu. Dotyczy to z pewnością gier (czy Twoja ulubiona gra mobilna wygląda i działa tak samo jak mobilny system operacyjny?), a nawet bardziej konwencjonalnych aplikacji, np. sprawdź popularniejsze natywne klienty Twittera na wybranej platformie, a zobaczysz szeroką gamę mechanizmów interfejsu użytkownika.

Widoczność kanału i treści

Argument: aplikacje natywne są łatwiejsze do znalezienia

Mechanizmy dystrybucji aplikacji, takie jak Android Market i Apple App Store, cieszą się w ostatnich latach ogromną popularnością i są główną siłą napędową całej branży mobilnej. Każdy deweloper może przesłać swoją aplikację natywną na platformę handlową, gdzie użytkownicy mogą ją znaleźć, przeglądając i wyszukując treści oraz otrzymując rekomendacje. Jeśli dobrze wykonasz swoją pracę, pozytywne oceny i komentarze przekonają użytkowników do kliknięcia przycisku instalacji.

Kontrargument: aplikacje internetowe są łatwiejsze do znalezienia

Internet jest prawdopodobnie najbardziej dostępnym medium, jakie kiedykolwiek powstało. W skromnym adresie URL mamy (przynajmniej teoretycznie) unikalny identyfikator wszystkiego, co kiedykolwiek zostało opublikowane w internecie, w tym wszystkich aplikacji opublikowanych na standardowych stronach internetowych. Wyszukiwarki ułatwiają odkrywanie tych treści, a inne witryny mogą do nich linkować, w tym katalogi aplikacji internetowych podobne do sklepów z aplikacjami mobilnymi. Każdy może udostępniać aplikacje internetowe znajomym, po prostu podając do nich linki w e-mailach i wiadomościach w sieciach społecznościowych. Linki można też wysyłać w SMS-ach. Użytkownicy urządzeń mobilnych będą mogli kliknąć link i uruchomić aplikację w przeglądarce na urządzeniu.

Nie mamy jeszcze takich samych platform, na których użytkownicy mogą oceniać i komentować aplikacje, ale to też się zmienia. Czytaj dalej…

Zarabianie

Punkt: reklamy natywne mogą generować przychody

„Sześciolatek tworzy aplikację podczas przerwy na lunch i sprzedaje miliard kopii po 3 dolary za sztukę”. Takie nagłówki pojawiają się ostatnio bardzo często, więc nic dziwnego, że deweloperzy, zarówno ci więksi, jak i mniejsi, szukają możliwości zarabiania na rynku aplikacji mobilnych. Platformy mobilne oferują deweloperom kilka sposobów na bezpośrednie pobieranie opłat za aplikacje. Najprostsza jest płatność jednorazowa, która odblokowuje aplikację na zawsze. Niektóre platformy oferują też mechanizmy płatności w aplikacji i subskrypcji, które są ściśle zintegrowane w spójny i bezpieczny sposób. Te nowsze formy płatności pozwalają deweloperom przekształcić hitową aplikację w długoterminowe źródło przychodów.

Oprócz płatności w aplikacji możesz zarabiać na tradycyjnych modelach internetowych, takich jak reklamy i sponsorowanie.

Kontrargument: zarabianie w internecie zawsze było możliwe, a możliwości w tym zakresie stale rosną.

Internet nie byłby motorem napędowym nowoczesnego przemysłu, gdyby nie było w nim wielu możliwości zarabiania. Chociaż bezpośrednie mechanizmy „płatności za użycie” nie rozwinęły się jeszcze na dużą skalę, istnieją różne nisze, w których rozwiązania „oprogramowanie jako usługa” oparte na subskrypcji stały się opłacalne. Przykłady to aplikacje Google, gama produktów 37Signals i wersje premium różnych usług poczty e-mail. Ponadto płatności bezpośrednie nie są jedynym sposobem na zarabianie na aplikacjach internetowych. Są to reklamy online, linki do witryn partnerskich, sponsorowanie, wzajemna promocja innych produktów i usług.

Mimo to programista stron internetowych może odczuwać pewną zazdrość, gdy czyta nagłówki o płatnościach. Nie możesz przesłać adresu URL do natywnych platform handlowych, więc co ma zrobić twórca stron internetowych? Wystarczy, że utworzysz natywną „aplikację opakowującą” – dla każdej platformy, na którą chcesz kierować reklamy, utwórz pustą aplikację natywną, która zawiera tylko widok internetowy. W widoku internetowym osadzasz prawdziwą aplikację. Następnie przesyłasz te aplikacje na różne platformy handlowe (i miejmy nadzieję, że zaczynasz zarabiać). Na głównych platformach handlowych są obecnie prawdopodobnie setki, jeśli nie tysiące aplikacji internetowych. Niektóre z nich są tak sprytnie zasymilowane, że nawet nie wiemy, że są to aplikacje internetowe.

Wadą jest konieczność kompilacji skrośnej na każdą platformę. W takiej sytuacji może pomóc istniejąca platforma, np. PhoneGap. Co więcej, powstają usługi internetowe, takie jak PhoneGap Build i Apparatio. Wystarczy, że wskażesz tym witrynom swoje repozytorium kodu, a otrzymasz aplikację na Androida, aplikację na iOS itd., gotowe do przesłania do odpowiednich sklepów. Nie trzeba instalować natywnych pakietów SDK na komputerze. Do utworzenia tych wszystkich aplikacji natywnych wystarczy edytor kodu i przeglądarka internetowa.

Czy platformy handlowe będą kiedykolwiek obsługiwać aplikacje internetowe bezpośrednio, bez konieczności ich natywnego opakowywania? Nie jest to jeszcze jasne. Wiemy, że w zeszłym roku Google wprowadziło Chrome Web Store i chociaż dotyczy to tylko komputerów, sklep ten wzbudził zainteresowanie innych dostawców przeglądarek i ogólnie wpisuje się w trend katalogów aplikacji internetowych, w tym niektórych prób związanych z urządzeniami mobilnymi. Koncepcja sklepu internetowego jest jeszcze w początkowej fazie rozwoju, ale pierwsze wyniki są obiecujące.

Podsumowanie

Fajnie byłoby ogłosić zwycięzcę, ale w tej chwili nie ma wyraźnego faworyta. Niektóre aplikacje najlepiej sprawdzają się w formie natywnej, a inne – w internecie. Stos internetowy ma prawdopodobnie większy potencjał, ale pod względem możliwości i jakości wykonania aplikacje natywne również szybko się rozwijają. Dopóki technologie internetowe nie staną się podstawą większości mobilnych systemów operacyjnych, aplikacje natywne zawsze będą ważnym elementem.

Jedną z technik wspomnianych w tym artykule są aplikacje hybrydowe, które dla niektórych deweloperów mogą być najlepszym kompromisem: widok internetowy tam, gdzie jest to możliwe, i komponenty natywne dla danej platformy tam, gdzie nie jest to możliwe.

Jeśli wybierzesz ścieżkę internetową, pamiętaj o standardach internetowych i zasadzie progresywnego ulepszania. Sieć to technologia, która wie, jak kierować reklamy na wiele urządzeń i systemów operacyjnych. Niezależnie od tego, czy nazwiesz to „fragmentacją”, czy „różnorodnością”, sieć to akceptuje, a programiści mogą korzystać ze wszystkich wcześniejszych wykorzystań pomysłu.