Web Intents

- autor: tsissput

Użytkownicy nowoczesnych aplikacji internetowych mają potrzebę współdzielenia między nimi tworzonych i znajdywanych przez siebie informacji częściej, niż kiedykolwiek przedtem. Spodziewają się możliwości bezproblemowej wymiany danych, takich jak zdjęć, ciekawych wpisów na blogach, filmików, piosenek czy użytecznych linków. Niestety w większości przypadków, to właśnie do linków ogranicza się możliwość udostępniania treści z jednych witryn do drugich. Każdy serwis posiada własne API, czyli sposób dostępu do danych użytkowników i treści danego portalu. Mimo, że dostęp do tych danych przeważnie realizowany jest zgodnie z ideą webserwisów (SOAP Web Services, REST), to już ich faktyczna reprezentacja i sposób interakcji często zależy od specyfiki danych i przyjętych koncepcji twórców.

Powoduje to niemożliwość łatwej integracji usług i danych pochodzących z wielu różnych serwisów tak, aby móc korzystać z nich w naszej własnej aplikacji. Liczba zewnętrznych aplikacji, z którymi będzie w stanie współpracować nasze dzieło, zależy więc od czasu spędzonego na poznawaniu, implementacji i integracji dostępu do ich interfejsów. W praktyce, często ograniczamy się do najpopularniejszych i najbardziej znaczących, nie dając użytkownikom pełnego wyboru.

Web Intents zostały stworzone po to, aby rozwiązać powyższe problemy. Jest to swego rodzaju framework, specyfikacja katalogu usług i komunikacji między aplikacjami internetowymi. Usługi rejestrują się jako zdolne do przetworzenia w określony sposób pewnych danych na rzecz aplikacji, która to zgłasza żądanie wykonania pewnej akcji reprezentowanej przez czasownik (udostępnij, wyślij, edytuj itd.). Akcja wykonywana jest przez usługę wybraną przez użytkownika, co z jednej strony upraszcza życie programistom, z drugiej oddaje większą kontrolę osobom korzystającym z aplikacji.

Wygląda znajomo? Identyczną filozofią kieruje się system operacyjny Google Android, w którym aplikacje pochodzące od różnych dostawców mogą spełniać podobne funkcje i być w stanie operować na współdzielonych danych. Na poniższej grafice, fakt wybrania przez użytkownika zdjęcia do udostępnienia znajomym powoduje wyświetlenie listy aplikacji, które potrafią to uczynić. Do nas należy wtedy wybór tej właściwej, w zależności od tego, jak konkretnie chcieliśmy udostępnić nasze zdjęcie.


Rejestracja i użycie intencji, na przykładzie edytowania zdjęcia przez zewnętrzną aplikację, jest bardzo prosta.

Rejestrujemy usługę na stronie dostawcy w sposób deklaratywny, dzięki odpowiedniemu tagowi (w sekcji <head> strony z naszą aplikacją świadczącą usługę), na przykładzie intencji zajmującej się edycją zdjęć:

<intent  action="http://webintents.org/edit" type="image/*" href="edit.html" />
gdzie action to forma czasownikowa, opisująca akcję do wykonania (wymagane), type to typ danych MIME (opcjonalny), a href to strona do której mamy zostać przekierowani, jeśli wybierzemy daną intencję (opcjonalnie). Po odwiedzeniu strony z takim tagiem, nasza przeglądarka zapamięta dostawcę, jako zdolnego do wykonania określonej akcji.

Użycie usługi w naszej aplikacji, sprowadza się do wykonania kodu (oczywiście w języku JavaScript):

var intent = new Intent();
intent.action = 'http://webintents.org/edit';
intent.type = 'image/*';
intent.data = [imgData];
window.navigator.startActivity(intent);

po czym użytkownik dokonuje wyboru konkretnego dostawcy. Od strony usługi, jej strona jest otwierana w nowym kontekście, gdzie może załadować dane przekazane wraz z intencją:

var intent = window.intent;
imageProcessor.src = intent.data;
imageProcessorForm.onsubmit = function() {
    // przekształcenia grafiki
    [...] 
    // odesłanie zmodyfikowanej grafiki do klienta
    intent.postResult(getImageData(imageProcessor));
};

Dane będące wynikiem przetwarzania otrzymamy po powrocie i załadowaniu strony w zmiennej window.intent.data. Możemy również wywołać intencję podając funkcję zwrotną, która zostanie uruchomiona po zakończeniu przetwarzania (na skutek intent.postResult() z powyższego kodu), jako argument dostaniemy jego wynik:

window.navigator.startActivity(intent, function(intentData) {
    var img = document.querySelector('img');
    // pokazujemy na stronie wynik przetwarzania
    img.src = intentData.data[0];
});

Na stronie http://webintents.org możemy znaleźć kilka predefiniowanych intencji, takich jak:

  • Discover
  • Share
  • Edit
  • View
  • Pick
  • Subscribe
  • Save

Cała idea Web Intents jest nowa i została zaproponowana przez Google. Nie jest ona jeszcze zaimplementowana w żadnej przeglądarce, dlatego do działania potrzebuje dołączenia pliku JavaScript, najlepiej pod postacią taga:

<script src="http://webintents.org/webintents.min.js"></script>

pozwala on na działanie intencji w przeglądarkach IE 8 i 9, FF 3 i nowszych, Chrome 5 i nowszym oraz Safari.

Nie tylko Google zajmuje się niniejszym tematem, inne firmy zaczynają nawiązywać współpracę w celu opracowania propozycji jednego, uniwersalnego API. Dzięki inicjatywie Mozilla Labs, podejmowane są różnorakie eksperymenty związane z ideą Web of Apps (która między innymi zawiera rozszerzenie do Firefoksa na kształt sklepu z aplikacjami). W ramach tej idei, rozwijane są tzw. Web Activities, czyli sposób realizacji koncepcji logicznego połączenia aplikacji webowych. To samo stosuje też Microsoft, ale z istniejących rozwiązań najsensowniejsza wydaje sie propozycja Google, być może z uwagi na ich doświadczenie przeniesione wprost z systemu Android.

Modularna i elastyczna architektura Web Intents pozwala nam na dowolne rozszerzanie istniejących możliwości zaproponowanych intencji. Możemy stosować nowe, bardziej szczegółowe lub nietypowe akcje (również specyficzne dla naszych usług, co niestety stwarza ryzyko powrotu do oryginalnego problemu, któremu intencje miały zaradzić). Nieobsługiwane dane możemy filtrować za pomocą ogólnie przyjętych i stosowanych typów MIME. Aby cała idea mogła sprawnie działać, usługi muszą tylko określić, że są w stanie wykonać daną akcję, aplikacja stwierdza tylko, że potrzebuje mieć tę akcję wykonaną, a użytkownik decyduje o tym, co mu najbardziej odpowiada.

Przykład z życia wzięty — Twitter Web Intents. Dzięki API udostępnianemu przez Twittera i opartemu o Web Intents, możemy wykorzystać dane z serwisu, na wzór opisanych w artykule intencji. Dzięki temu, nie ma potrzeby tworzenia dedykowanej Twitterowi aplikacji, rejestrować jej i prosić o uprawnienia do interakcji z naszym kontem. Do działania tego podejścia wystarczy, że użytkownik jest już zalogowany w swojej przeglądarce. Intencje wywoływane przez naszą aplikację powodują otwarcie okna pop-up, i po wykonaniu zadania, są one zamykane i powracamy do naszego serwisu.

Integracja intencji jest bardzo prosta, sprowadza się do kawałka JavaScriptu zagnieżdżonego w kodzie HTML naszej strony. Przykładowo, podstawowa manipulacja ćwierknięciami wyglądałaby następująco (nie zapomnijmy o dołączeniu odpowiedniego pliku JS):

<script type="text/javascript" src="//platform.twitter.com/widgets.js"></script>
 <p><a href="https://twitter.com/intent/tweet?in_reply_to=51113028241989632">Reply</a></p>
 <p><a href="https://twitter.com/intent/retweet?tweet_id=51113028241989632">Retweet</a></p>
 <p><a href="https://twitter.com/intent/favorite?tweet_id=51113028241989632">Favorite</a></p>

Tak oto, trzema prostymi linkami możemy zintegrować podstawowe funkcje Twittera z naszą stroną internetową. Poza powyższymi możliwościami odpowiedzi, przekazania dalej i dodania do ulubionych, możemy użyć analogicznych metod aby dodać nowy tweet (https://twitter.com/intent/tweet) oraz wyświetlić profil użytkownika wraz z możliwością rozpoczęcia śledzenia go (https://twitter.com/intent/user).

Autor: Adam Jodłowski (79148)

Przydatne linki:

http://webintents.org/

https://dev.twitter.com/docs/intents

Reklamy

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Zdjęcie na Google+

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s

%d blogerów lubi to: