Issuu on Google+


Tytuł oryginału: Programming Social Applications: Building Viral Experiences with OpenSocial, OAuth, OpenID, and Distributed Web Framework Tłumaczenie: Mikołaj Szczepaniak ISBN: 978-83-246-3944-1 © 2012 Helion S.A. Authorized Polish translation of the English edition of Programming Social Applications, 1st Edition ISBN 9781449394912 © 2011 Yahoo!, Inc. This translation is published and sold by permission of O’Reilly Media, Inc., which owns or controls all rights to publish and sell the same. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher. Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Wydawnictwo HELION dołożyło wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie bierze jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Wydawnictwo HELION nie ponosi również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. Wydawnictwo HELION ul. Kościuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: helion@helion.pl WWW: http://helion.pl (księgarnia internetowa, katalog książek) Pliki z przykładami omawianymi w książce można znaleźć pod adresem: ftp://ftp.helion.pl/przyklady/prapse.zip Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/prapse Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Printed in Poland.

• Kup książkę • Poleć książkę • Oceń książkę

• Księgarnia internetowa • Lubię to! » Nasza społeczność


Spis treci

Sowo wstpne ............................................................................................................ 15 1. Podstawowe pojcia zwizane z kontenerem aplikacji spoecznociowych ........... 21 Czym jest kontener aplikacji spoecznociowych? Profil uytkownika Znajomi i powizania uytkownika Strumie aktywnoci uytkowników Implementacja zastrzeonych i otwartych standardów Implementacja zastrzeona Implementacja typu open source Dlaczego w tej ksice zostan omówione otwarte standardy? Wbudowana aplikacja — tworzenie rozwiza w ramach czarnej skrzynki Wbudowane zabezpieczenia aplikacji Ataki XSS Zasada tego samego pochodzenia i starsze przegldarki Pobieranie plików bez wiedzy uytkownika Zabezpieczanie aplikacji Aplikacja zewntrzna — integracja danych serwisu spoecznociowego poza kontenerem Widoki aplikacji Widok domowy (may) Widok profilu (may) Widok kanwy (duy) Domylny widok (dowolny) Zagadnienia zwizane z uprawnieniami aplikacji Aplikacje strony klienckiej kontra aplikacje serwera Stosowanie systemów szablonów w warstwie znaczników Stosowanie mieszanego rodowiska serwera i klienta Opónianie adowania mniej wanej treci Kiedy dobra aplikacja okazuje si za? Przenona aplikacja z animacjami Niedopracowany widok

22 23 24 24 25 25 26 27 27 29 30 30 31 31 31 32 33 34 35 36 37 38 38 39 40 40 41 42

5

Kup książkę

Poleć książkę


Aplikacja kopiujca widoki Aplikacja prezentujca zbyt duo informacji Nierentowna aplikacja Aplikacja informacyjna Studia przypadków dla modeli aplikacji Studium przypadku: gra spoecznociowa ze znajomymi Studium przypadku: aplikacje sprzeday produktów Studium przypadku: aplikacje uwzgldniajce pooenie uytkownika Krótkie wskazówki na pocztek Naley zdefiniowa docelowych odbiorców Moliwie wczesne budowanie punktów integracji z serwisem spoecznociowym Budowanie z myl o elementach komercyjnych Tworzenie dopracowanych, atrakcyjnych widoków

43 43 44 45 46 46 50 53 56 57 57 57 58

2. Odwzorowywanie relacji uytkowników na podstawie grafu powiza spoecznociowych ...................................................59 Graf powiza spoecznociowych w internecie Stosowanie grafu rzeczywistych powiza spoecznociowych w wirtualnym wiecie Automatyczne dzielenie uytkowników na klastry Prywatno i bezpieczestwo Budowanie zaufania Udostpnianie prywatnych danych uytkownika: model opt-in kontra model opt-out Model udostpniania za zgod uytkownika (opt-in) Model wyczania udostpniania na wniosek uytkownika (opt-out) Zrozumienie modelu relacji Model ledzenia Model pocze Model grupowy Relacje kontra podmioty Budowanie zwizków spoecznociowych — analiza grafu powiza spoecznociowych Facebooka Budowanie na bazie rzeczywistych tosamoci Zrozumienie najskuteczniejszych kanaów komunikacji Budowanie grup uytkowników Unikanie grafów nieistotnych powiza spoecznociowych Wskazywanie lubianych i nielubianych podmiotów za porednictwem protokou OpenLike Integracja widgetu OpenLike Sposób prezentowania oznacze „Lubi to” Podsumowanie

6

_

59 61 62 62 63 63 63 64 65 65 66 67 71 72 72 73 74 74 75 75 76 76

Spis treci

Kup książkę

Poleć książkę


3. Tworzenie podstawowych elementów platformy aplikacji spoecznociowych ...................................................................... 79 Czego nauczysz si w tym rozdziale? Apache Shindig Konfiguracja kontenera Shindig Instalacja kontenera Shindig w systemie Mac OS X (Leopard) Instalacja kontenera Shindig w systemie Windows Testowanie instalacji kontenera Shindig Partuza Wymagania Instalacja kontenera Partuza w systemie Mac OS X (Leopard) Instalacja kontenera Partuza w systemie Windows Testowanie instalacji kontenera Partuza Specyfikacja gadetu OpenSocial w formacie XML Konfigurowanie aplikacji za pomoc wza ModulePrefs Elementy Require i Optional Element Preload Element Icon Element Locale Element Link Definiowanie preferencji uytkownika Wyliczeniowe typy danych Tre aplikacji Definiowanie widoków treci Tre wbudowana kontra tre zewntrzna Budowanie kompletnego gadetu

79 79 80 81 84 86 87 88 88 91 96 96 97 98 98 99 99 100 101 103 103 104 110 111

4. Definiowanie funkcji za pomoc odwoa JavaScriptu do elementów standardu OpenSocial .......................................................................115 Czego nauczysz si w tym rozdziale? Doczanie bibliotek JavaScriptu z funkcjami standardu OpenSocial Dynamiczne ustawianie wysokoci widoku gadetu Umieszczanie animacji Flash w ramach gadetu Wywietlanie komunikatów dla uytkowników Tworzenie komunikatu Okrelanie pooenia okien komunikatów Definiowanie stylów komunikatów i okien Zapisywanie stanu z preferencjami uytkownika Programowe ustawianie tytuu gadetu Integracja interfejsu uytkownika gadetu z podziaem na zakadki Podstawowy gadet Tworzenie zakadki na podstawie kodu jzyka znaczników Tworzenie zakadki w kodzie JavaScriptu Uzyskiwanie i ustawianie informacji na temat obiektu TabSet

115 116 117 118 119 120 123 125 127 129 130 131 131 132 134

Spis treci

Kup książkę

_

7

Poleć książkę


Rozszerzanie kontenera Shindig o wasne biblioteki jzyka JavaScript Budowanie kompletnego gadetu Przygotowanie specyfikacji XML gadetu Wywietlanie gadetu przy uyciu kontenera Shindig

136 140 140 144

5. Przenoszenie aplikacji, profili i znajomych .............................................................. 145 Czego nauczysz si w tym rozdziale? Ocena obsugi standardu OpenSocial Podstawowe elementy specyfikacji OpenSocial Specyfikacja podstawowego serwera API Specyfikacja podstawowego kontenera gadetów Specyfikacja serwera spoecznociowego interfejsu API Specyfikacja kontenera gadetów spoecznociowych Specyfikacja kontenera OpenSocial Tworzenie rozwiza dla wielu kontenerów i przenoszenie aplikacji Stosowanie mieszanego rodowiska klient-serwer Oddzielanie funkcji spoecznociowych od podstawowego kodu aplikacji Unikanie znaczników waciwych konkretnym kontenerom Przenoszenie aplikacji z Facebooka do kontenera OpenSocial Stosowanie ramek iframe dla konstrukcji niebdcych aplikacjami spoecznociowymi Wyodrbnianie logiki funkcji Facebooka Oddzielenie kodu znaczników (wizualizacji) od logiki programu Stosowanie punktów kocowych REST zamiast jzyka FQL Stosowanie implementacji z zasadnicz czci kodu po stronie serwera Personalizacja aplikacji na podstawie danych zawartych w profilu Obiekt Person Metody wymiany danych obiektu Person Pola dostpne w ramach obiektu Person Rozszerzanie obiektu Person Uzyskiwanie profilu uytkownika Promowanie aplikacji z wykorzystaniem znajomych uytkownika Generowanie da dotyczcych znajomych uytkownika Budowanie kompletnego gadetu Specyfikacja gadetu Kod jzyka znaczników Kod jzyka JavaScript Uruchamianie gadetu

145 145 147 148 148 149 149 150 150 151 151 151 152 152 153 153 153 154 154 154 155 160 183 189 191 192 193 193 194 195 197

6. Aktywno uytkowników, publikowanie powiadomie aplikacji i danie danych w kontenerze OpenSocial ............................................................ 199 Czego nauczysz si w tym rozdziale? Promocja aplikacji za pomoc strumienia aktywnoci w kontenerze OpenSocial Personalizacja aplikacji na podstawie powiadomie w strumieniu aktywnoci Generowanie powiadomie w celu zwikszania liczby uytkowników

8

_

200 200 201 202

Spis treci

Kup książkę

Poleć książkę


Pasywne i bezporednie publikowanie powiadomie aplikacji Bezporednie publikowanie powiadomie aplikacji Pasywne publikowanie powiadomie aplikacji Zrównowaone publikowanie powiadomie Generowanie da AJAX i da dostpu do danych zewntrznych Generowanie standardowych da dostpu do danych Umieszczanie treci w daniach danych Uywanie autoryzowanych da do zabezpieczania pocze Budowanie kompletnego gadetu

205 206 207 209 210 211 212 213 221

7. Zaawansowane techniki OpenSocial i przyszo tego standardu .........................225 Czego nauczysz si w tym rozdziale? Potokowe przesyanie danych Rodzaje da danych Udostpnianie danych dla da zewntrznych Korzystanie z potokowego przesyania danych po stronie klienta Obsuga bdów generowanych przez potok danych Parametry dynamiczne Szablony OpenSocial Alternatywny model kodu jzyka znaczników i danych Wywietlanie szablonów Wyraenia Zmienne specjalne Wyraenia warunkowe Przetwarzanie treci w ptli

czenie potokowego przesyania danych i szablonów Pozostae znaczniki specjalne Biblioteki szablonów Interfejs API jzyka JavaScript Kilka dodatkowych znaczników — jzyk znaczników OpenSocial Wywietlanie nazwiska uytkownika — znacznik os:Name Lista wyboru uytkownika — znacznik os:PeopleSelector Wywietlanie odznaki uytkownika — znacznik os:Badge

adowanie zewntrznego kodu HTML — znacznik os:Get Obsuga lokalizacji za pomoc pakietów komunikatów Biblioteki API protokou OpenSocial REST Dostpne biblioteki Przyszo standardu OpenSocial: obszary rozwoju Kontenery korporacyjne Mobilna rewolucja Rozproszone frameworki internetowe Standard OpenSocial i rozproszone frameworki internetowe Standard Activity Streams Protokó PubSubHubbub

225 225 228 233 234 237 238 240 241 243 247 248 250 253 258 260 262 265 270 271 271 272 272 272 275 275 276 276 277 277 277 278 278

Spis treci

Kup książkę

_

9

Poleć książkę


Protokó Salmon Protokó Open Graph Budowanie kompletnego gadetu

279 280 281

8. Zagadnienia zwizane z bezpieczestwem aplikacji spoecznociowych .............287 Czego nauczysz si w tym rozdziale? Wykonywanie zewntrznego kodu za porednictwem ramek iframe Bezpieczny model — projekt Caja Dlaczego warto uywa kompilatora Caja? Rodzaje ataków — jak Caja chroni uytkownika? Przekierowywanie uytkowników bez ich zgody ledzenie historii przegldarki uytkownika Wykonywanie dowolnego kodu za pomoc funkcji document.createElement Rejestrowanie klawiszy naciskanych przez uytkownika Konfiguracja kompilatora Caja Przetwarzanie skryptów za pomoc kompilatora Caja z poziomu wiersza polece Zabezpieczanie kodu HTML-a i JavaScriptu Zmiana docelowego formatu kodu Uruchamianie kompilatora Caja z poziomu aplikacji internetowej Stosowanie kompilatora Caja dla gadetu OpenSocial Dodawanie kompilatora Caja do gadetu Praktyczny przykad Wczesne wykrywanie niebezpiecznych elementów JavaScriptu za pomoc narzdzia JSLint Eksperymenty w rodowisku Caja Playground Wskazówki dotyczce pracy w rodowisku Caja Implementacja moduowego kodu — kompilatora Caja nie naley stosowa dla caego projektu Stosowanie wstpnie przetworzonych bibliotek JavaScriptu Nie naley uywa Firebuga dla przetworzonego kodu ródowego JavaScriptu Nie naley umieszcza zdarze w kodzie jzyka znaczników Centralizacja kodu JavaScriptu — stosowanie wycznie da danych i kodu jzyka znaczników Lejsza alternatywa dla kompilatora Caja: narzdzie ADsafe ADsafe kontra Caja — którego narzdzia uywa ? Jak zaimplementowa rodowisko ADsafe? Konfiguracja obiektu rodowiska ADsafe Obiekt DOM Wybór konkretnych wzów DOM za pomoc zapyta Praca z obiektami pakietów Doczanie zdarze Definiowanie bibliotek

10

_

287 288 288 289 289 290 290 291 291 293 295 295 300 301 303 303 304 305 306 306 307 308 309 309 311 312 313 314 314 315 317 321 327 328

Spis treci

Kup książkę

Poleć książkę


Budowanie kompletnego gadetu

ródo danych Sekcja nagówkowa: doczane skrypty i style Ciao: warstwa jzyka znaczników Ciao: warstwa jzyka JavaScript Ostateczny wynik Podsumowanie

329 330 330 332 332 334 335

9. Zabezpieczanie dostpu do grafu powiza spoecznociowych za pomoc standardu OAuth .................................................................................... 337 Punkt wyjcia — uwierzytelnianie podstawowe Implementacja uwierzytelniania podstawowego — jak to dziaa? Wady stosowania uwierzytelniania podstawowego Standard OAuth 1.0a Przepyw pracy w standardzie OAuth 1.0a Standard OAuth z perspektywy uytkownika kocowego Dwuetapowa autoryzacja OAuth kontra trzyetapowa autoryzacja OAuth Przykad implementacji trzyetapowej autoryzacji OAuth Narzdzia i wskazówki zwizane z diagnozowaniem problemów OAuth 2 Przepyw pracy w standardzie OAuth 2 Przykad implementacji: Facebook Przykad implementacji: danie dodatkowych informacji na temat uytkownika w procesie autoryzacji OAuth w serwisie Facebook Przykad implementacji: aplikacja z perspektywy uytkownika kocowego Wskazówki dotyczce diagnozowania problemów z daniami Podsumowanie

337 338 339 340 341 348 350 354 369 373 373 381 392 394 396 400

10. Przyszo serwisów spoecznociowych: definiowanie obiektów spoecznociowych za porednictwem rozproszonych frameworków sieciowych ................................ 401 Czego nauczysz si w tym rozdziale? Protokó Open Graph — definiowanie stron internetowych jako obiektów spoecznociowych Wzloty i upadki metadanych Dziaanie protokou Open Graph Implementacja protokou Open Graph Rzeczywisty przykad: implementacja protokou Open Graph w serwisie Facebook Praktyczna implementacja: odczytywanie danych protokou Open Graph ze róda w internecie Wady protokou Open Graph Strumienie aktywnoci: standaryzacja aktywnoci spoecznociowych Dlaczego warto zdefiniowa standard dla aktywnoci? Implementacja standardu Activity Streams

Spis treci

Kup książkę

401 402 403 403 404 410 413 419 420 421 421

_

11

Poleć książkę


Typy obiektów Czasowniki WebFinger — rozszerzanie grafu powiza spoecznociowych na podstawie adresów poczty elektronicznej Od finger do WebFinger: geneza protokou WebFinger Implementacja protokou WebFinger Wady protokou WebFinger Protokó OExchange — budowanie grafu udostpniania treci spoecznociowych Jak dziaa protokó OExchange? Zastosowania protokou OExchange Implementacja protokou OExchange Protokó PubSubHubbub: rozpowszechnianie treci Jak dziaa protokó PubSubHubbub? Zalety z perspektywy wydawców i subskrybentów Serwery hubów i usugi implementacji Biblioteki przepywu pracy Budowanie wydawcy w jzyku PHP Budowanie wydawcy w jzyku Python Budowanie subskrybenta w jzyku PHP Budowanie subskrybenta w jzyku Python Protokó Salmon: ujednolicenie stron konwersacji Dziaanie protokou Salmon Budowanie rozwiza na bazie protokou PubSubHubbub Ochrona przed naduyciami i spamem Przegld implementacji Podsumowanie

424 426 429 429 430 432 433 433 434 435 440 441 443 445 445 446 448 450 452 455 455 457 458 459 460

11. Rozszerzanie grafu powiza spoecznociowych za pomoc standardu OpenID ................................................................................... 461 Standard OpenID Klucz do sukcesu — decentralizacja Udoskonalenia wzgldem tradycyjnego logowania Dostp do istniejcej bazy danych uytkowników i grafu powiza spoecznociowych Czy ju teraz dysponuj implementacj standardu OpenID? Gdzie mam jej szuka ? Procedura uwierzytelniania OpenID Krok 1.: danie logowania przy uyciu identyfikatora OpenID Krok 2.: operacja odkrywania w celu wyznaczenia adresu URL punktu kocowego Krok 3.: danie uwierzytelnienia uytkownika Krok 4.: udostpnienie stanu sukcesu lub niepowodzenia Dostawcy OpenID Omijanie problemów odkrywania domen w standardzie OpenID

12

_

461 462 462 462 463 464 464 465 466 467 469 469

Spis treci

Kup książkę

Poleć książkę


Rozszerzenia standardu OpenID Rozszerzenie Simple Registration Rozszerzenie Attribute Exchange Rozszerzenie Provider Authentication Policy Extension Aktualnie tworzone rozszerzenia Przykad implementacji: OpenID Implementacja standardu OpenID w jzyku PHP Implementacja standardu OpenID w jzyku Python Typowe bdy i techniki diagnostyczne Niezgodno adresu URL wywoa zwrotnych Brak moliwoci odkrycia identyfikatora OpenID Podsumowanie

471 472 473 479 483 484 485 497 508 509 509 510

12. Uwierzytelnianie hybrydowe — wygoda uytkownika i peen dostp do profilu ..................................................511 Rozszerzenie hybrydy standardów OpenID i OAuth Istniejce implementacje Kiedy naley uywa standardu OpenID, a kiedy jego hybrydy ze standardem OAuth? Pytania, na które warto sobie odpowiedzie przed wybraniem waciwego rozwizania Zalety i wady: standardowa implementacja OpenID Zalety i wady: uwierzytelnianie hybrydowe Przebieg uwierzytelniania w modelu hybrydowym na bazie standardów OpenID i OAuth Kroki 1. i 2.: odkrywanie (pierwsze dwa kroki procedury OpenID) Krok 3.: akceptacja uprawnie przez uytkownika Krok 4.: przekazanie stanu akceptacji/odrzucenia dania OpenID i parametrów rozszerzenia hybrydowego Krok 5.: wymiana wstpnie zaakceptowanego tokenu dania na token dostpu Krok 6.: generowanie podpisanych da dostpu do chronionych danych uytkownika Przykad implementacji: OpenID, OAuth i Yahoo! Konfiguracja aplikacji: uzyskanie kluczy standardu OAuth na potrzeby procesu uwierzytelniania hybrydowego Implementacja uwierzytelniania hybrydowego w jzyku PHP Implementacja uwierzytelniania hybrydowego w jzyku Python Podsumowanie

511 512 512 512 513 514 515 516 516 517 519 520 521 521 522 533 546

Dodatek A Podstawowe zagadnienia zwizane z budow aplikacji internetowych .......547 Dodatek B Sownik poj .....................................................................................................563 Skorowidz .................................................................................................................. 567

Spis treci

Kup książkę

_

13

Poleć książkę


14

_

Spis treci

Kup książkę

Poleć książkę


ROZDZIA 6.

Aktywno uytkowników, publikowanie powiadomie aplikacji i danie danych w kontenerze OpenSocial

Do najwikszych wyzwa stojcych przed programistami budujcymi aplikacje spoecznociowe naley waciwa promocja tych aplikacji i efektywne korzystanie z zewntrznych róde danych. Prawidowe stosowanie zewntrznych róde danych jest warunkiem utworzenia bogatego zbioru funkcji, które przycign uwag uytkowników i pozwol zbudowa baz lojalnych klientów. Wielu programistów traktuje kwestie publikowania komunikatów aplikacji i analizy aktywnoci jako nieistotny szczegó — uwaaj oni, e architektura, która ma na celu zwikszanie bazy aktywnych uytkowników, nie ma wikszego znaczenia. Okazuje si jednak, e standardowe metody promocji aplikacji oferowane przez kontenery, czyli na przykad galerie, nie stanowi efektywnych form zachcania uytkowników do instalowania kolejnych rozwiza. W wielu przypadkach galerie s przepenione i nieczytelne — nierzadko obejmuj tysice aplikacji uporzdkowanych w taki sposób, aby na najcenniejszych, najwyszych pozycjach znajdoway si najbardziej popularne produkty. Z perspektywy nowego programisty taki ksztat galerii oznacza nie tylko konieczno konkurowania z wieloma aplikacjami, ale te wizj startu z najmniej atrakcyjnej pozycji. Sytuacja przypomina troch problem historii kredytowej — brak kredytów jest czsto traktowany na równi z nieterminowo spacanymi kredytami. Warto wic rozway promocj aplikacji z wykorzystaniem aktywnoci samych uytkowników, przy zastosowaniu przemylanego modelu udostpniania informacji o produktach. Takie rozwizanie umoliwia przekazywanie linków do aplikacji bezporednio w strumieniu codziennej aktywnoci uytkownika. Innym czynnikiem uatwiajcym przyciganie uwagi uytkowników jest regularnie odwieana, atrakcyjna tre aplikacji (uzyskiwana za porednictwem da danych). W ten sposób mona nie tylko podnie liczb uytkowników instalujcych aplikacj, ale take zwikszy ich aktywno .

199

Kup książkę

Poleć książkę


Czego nauczysz si w tym rozdziale? W rozdziale 5. omówilimy metody personalizacji i dostosowywania aplikacji na podstawie informacji zawartych w profilu uytkownika oraz techniki promocji z wykorzystaniem listy znajomych uytkownika. W tym rozdziale wspomniane zagadnienia zostan dodatkowo rozwinite — skoncentrujemy si na reprezentacji aktywnoci uytkowników w kontenerze OpenSocial i na technikach tworzenia aplikacji oferujcych szerokie moliwoci konfiguracji i dostosowywania (dziki bogatym ródom danych budowanym przy uyciu da do róde zewntrznych). W tym rozdziale zostan omówione nastpujce zagadnienia: x personalizacja stanu aplikacji pod ktem uytkownika na podstawie jego aktywnoci

spoecznociowej; x poszerzanie bazy uytkowników poprzez generowanie czynnoci; x wyjanienie modeli pasywnego i bezporedniego publikowania powiadomie aplikacji; x generowanie da danych niezbdnych do budowy bogatych róde danych i zwiksza-

nia liczby aktywnych uytkowników; x tworzenie uwierzytelnionych (podpisanych) da danych dla zapewnienia bezpieczestwa

(poprzez weryfikacj danych uwierzytelniajcych i róde danych). Po opanowaniu wymienionych zagadnie i technik bdzie mona przystpi do budowy aplikacji spoecznociowych dobrze przygotowanych do promocji wród uytkowników.

Promocja aplikacji za pomoc strumienia aktywnoci w kontenerze OpenSocial Jednym z najskuteczniejszych narzdzi w rkach programistów aplikacji spoecznociowych jest moliwo wysyania powiadomie (aktualizacji) do strumienia aktywnoci uytkownika. Strumie aktywnoci (patrz rysunek 6.1) jest centralnym obszarem powiadomie kierowanych do uytkownika aplikacji i jego znajomych. Strumie aktywnoci stanowi te gówny kana komunikacji z uytkownikami kontenera. Za porednictwem tego medium mona promowa aplikacj poprzez rozsyanie zacht trafiajcych do jak najwikszej liczby uytkowników. Oznacza to, e strumie aktywnoci umoliwia nieporównanie skuteczniejsze zwikszanie liczby uytkowników aplikacji ni zwyka galeria aplikacji.

Rysunek 6.1. Strumie aktywnoci OpenSocial obejmujcy obrazy i komentarze

200

_

Rozdzia 6. Aktywno uytkowników, publikowanie powiadomie aplikacji i danie danych w kontenerze OpenSocial

Kup książkę

Poleć książkę


W przypadku wikszoci kontenerów aplikacji spoecznociowych elementy strumienia aktywnoci obejmuj nastpujce dane: x tytu opisujcy czynno uytkownika; x link do róda aktualizacji (powiadomienia), na przykad do samej aplikacji; x opis obejmujcy dodatkowe informacje na temat danej aktualizacji lub zachta do dziaania

(na przykad do zainstalowania aplikacji przez pozostaych uytkowników); x opcjonalne elementy multimedialne, jak animacja czy obraz, które mog dodatkowo przy-

cign uwag uytkowników; x komentarze lub oznaczenia „lubi to” od znajomych uytkownika.

Tylko dobre zrozumienie skadników strumienia aktywnoci umoliwi programicie pene wykorzystanie potencjau tego strumienia. Standard OpenSocial udostpnia dwa narzdzia do operowania na powiadomieniach w strumieniu aktywnoci — pierwsze z nich umoliwia programistom wykorzystywanie istniejcych elementów strumienia do personalizacji aplikacji, drugie umoliwia generowanie nowych elementów strumienia w celu przycigania nowych uytkowników lub zwikszania zaangaowania dotychczasowych.

Personalizacja aplikacji na podstawie powiadomie w strumieniu aktywnoci Jeli profil obejmuje dane wybrane przez samego uytkownika, które w dodatku odzwierciedlaj sposób postrzegania uytkownika przez niego samego, strumie aktywnoci dobrze ilustruje to, co robi i co lubi ten uytkownik. Strumie aktywnoci obejmuje takie informacje jak wykaz instalowanych aplikacji, lista aktualizacji (powiadomie) tych aplikacji oraz informacje o statusie i profilu. Strumie aktywnoci jest te bezcennym ródem dodatkowych danych, które pozwalaj lepiej oceni internetowe zwyczaje, preferencje i uprzedzenia uytkownika. Strumie aktywnoci stosowany cznie z informacjami zawartymi w profilu uytkownika stanowi dla programisty wprost doskona okazj do przygotowania treci i reklam pod ktem konkretnego uytkownika. Strumie aktywnoci uytkownika jest jednym z najcenniejszych róde informacji w kadym serwisie spoecznociowym. Za porednictwem tego strumienia programista ma dostp do takich informacji jak to, kiedy uytkownik wysya wiadomoci, z kim si kontaktuje, co robi i z jakich aplikacji korzysta. Specyfikacja OpenSocial definiuje standardowe metody uzyskiwania tych szczegóowych danych: // uzyskuje dane o aktywnoci biecego uytkownika osapi.activities.get({userId: '@viewer ', count: 20}).execute(function(result){ if (!result.error){ var activities = result.list; var html = ' '; // buduje tytu i adres URL dla kadej odkrytej czynnoci for (var i = 0; i < activities.length; i++){ html += 'Tytu czynnoci: ' + activities[i].title + 'Adres URL czynnoci: ' + activities[i].url; } } });

Promocja aplikacji za pomoc strumienia aktywnoci w kontenerze OpenSocial

Kup książkę

_

201

Poleć książkę


Kompletny kod ródowy tego przykadu jest dostpny pod adresem ftp://ftp.helion.pl/ przyklady/prapse.zip.

W ramach tego dania wywoano metod osapi.activities.get(...), aby zasygnalizowa potrzeb pobrania strumienia aktywnoci uytkownika. Obiekt JSON, który przekazano za porednictwem parametru tej metody, reprezentuje identyfikator uytkownika (wskazujcy uytkownika aktualnie korzystajcego z aplikacji) oraz liczb oczekiwanych czynnoci (w tym przypadku równ 20). Po zwróceniu odpowiedzi dla tego dania mona przystpi do analizy i dowolnego wykorzystywania poszczególnych czynnoci.

Generowanie powiadomie w celu zwikszania liczby uytkowników Wiele kontenerów aplikacji spoecznociowych udostpnia przepenione, nieczytelne galerie, w których nowe aplikacje s spychane na najmniej atrakcyjne pozycje. W ten sposób twórcy kontenerów zapobiegaj przesanianiu podstawowych funkcji spoecznociowych przez okna dodatkowych aplikacji. Taki ksztat typowych galerii stanowi powany problem dla programistów aplikacji — skoro budowane aplikacje trafiaj do podzakadek lub innych trudno dostpnych miejsc w ramach kontenera, jak mona dotrze do nowych uytkowników? Jedn z najlepszych metod zachcania uytkowników do instalowania aplikacji jest promocja produktu za porednictwem strumieni aktywnoci uytkowników. Strumie aktywnoci to jedna z niewielu dróg docierania do uytkowników (jeli oczywicie sam kontener nie udostpnia atrakcyjnych miejsc dla okien aplikacji). Wikszo programistów, którzy zdecydowali si umieci w strumieniu aktywnoci nowe, odpowiednio atrakcyjne i przycigajce uwag powiadomienia, obserwowaa nieporównanie wikszy wzrost zainteresowania swoimi produktami ni po umieszczeniu tych samych aplikacji w galerii. Okazuje si, e specyfikacja OpenSocial definiuje prost metod jzyka JavaScript obsugujc umieszczanie nowych czynnoci w strumieniu aktywnoci. Za pomoc tej metody programista moe promowa swoj aplikacj, kierujc do uytkowników specjalnie przygotowane komunikaty.

Umieszczanie komunikatu w strumieniu aktywnoci uytkownika W kontenerze zgodnym ze standardem OpenSocial 0.9 do umieszczania aktualizacji (powiadomie) w strumieniu aktywnoci uytkownika suy metoda osapi.activities.create(...). Metoda umoliwia programicie atwe wysyanie komunikatów z aplikacji do strumienia aktywnoci lub dowolnego innego kanau przekazywania powiadomie, który jest obsugiwany przez dany kontener. Metoda osapi.activities.create(...) otrzymuje na wejciu jeden parametr — obiekt JSON zawierajcy parametry dania dotyczcego elementów strumienia aktywnoci (patrz tabela 6.1). Za pomoc parametrów opisanych w tabeli 6.1 mona zbudowa blok jzyka JavaScript umieszczajcy now aktualizacj w strumieniu aktywnoci uytkownika:

202

_

Rozdzia 6. Aktywno uytkowników, publikowanie powiadomie aplikacji i danie danych w kontenerze OpenSocial

Kup książkę

Poleć książkę


Tabela 6.1. Parametry dania elementu strumienia aktywnoci obsugiwane przez metod osapi.activities.create Parametr

Opis

activity

Obiekt Activity standardu OpenSocial definiujcy tre wysyanego powiadomienia.

auth

Obiekt AuthToken definiujcy rodzaj autoryzacji (na przykad HttpRequest.Authorization).

appId

acuch identyfikatora wskazujcy aplikacj, która wysaa dane powiadomienie (aktualizacj). Kontener moe uy tego identyfikatora do automatycznego wywietlenia w ramach powiadomienia szczegóowych informacji o aplikacji i linków prowadzcych na jej stron.

groupId

Identyfikator grupy, do której naley wysa nowe powiadomienie (na przykad @self).

userId

Identyfikator uytkownika, do którego ma zosta przypisana tworzona aktualizacja (na przykad @me, @viewer lub @owner). Ten parametr moe mie posta acucha lub tablicy acuchów.

// umieszcza nowe powiadomienie w strumieniu aktywnoci biecego uytkownika osapi.activities.create({ userId: "@viewer", groupId: "@self", activity: { title: "Moja aplikacja robi mnóstwo przydatnych rzeczy", body: "<a href='http://www.mysite.com'>Kliknij tutaj</a>, aby uzyska wicej informacji", url: "http://www.mysite.com/" } }).execute();

Kompletny kod ródowy tego przykadu jest dostpny pod adresem ftp://ftp.helion.pl/ przyklady/prapse.zip.

Aby wygenerowa powiadomienie (aktualizacj), w powyszym kodzie wywoano metod osapi.activities.create(...) i przekazano na jej wejciu odpowiednio przygotowany obiekt JSON. W ramach tego obiektu naley wskaza strumie aktywnoci, do którego ma trafi nowa aktualizacja (w tym przypadku bdzie to strumie biecego uytkownika aplikacji), grup docelow (tutaj self) oraz obiekt activity reprezentujcy tre powiadomienia. W powyszym kodzie obiekt activity zawiera tytu, adres URL wskazywany przez link w tytule oraz opis (ciao) aktualizacji. Ciao aktualizacji moe obejmowa niewielki podzbiór znaczników jzyka HTML, w tym <b>, <i>, <a> oraz <span>. Wykonanie tego kodu spowoduje umieszczenie nowej aktualizacji w strumieniu aktywnoci wskazanego uytkownika.

Ustawianie priorytetu aktualizacji Podczas umieszczania w strumieniu aktywnoci powiadomienia dla uytkownika naley zagwarantowa moliwo wysyania powiadomie aplikacji w imieniu samego uytkownika, nawet jeli ten uytkownik wprost nie przekaza aplikacji odpowiednich uprawnie. Takie dziaanie jest moliwe dziki priorytetom czynnoci. Aby ustawi priorytet powiadomienia, naley ustawi opcjonaln flag priority. To pole logiczne moe zawiera albo warto 0 (niski priorytet), albo warto 1 (wysoki priorytet). Stosowana warto powinna zalee od tego, czy uytkownik bdcy adresatem powiadomienia nada aplikacji odpowiednie uprawnienia. Innym wanym czynnikiem jest implementacja samego kontenera. Jeli programista zdefiniowa wysoki priorytet (1) i jeli uytkownik nie da aplikacji uprawnie do umieszczania aktualizacji w jego imieniu, aplikacja podejmie prób zaadowania mechanizmu uwierzytelniania, aby zapyta uytkownika o zgod na umieszczenie nowego Promocja aplikacji za pomoc strumienia aktywnoci w kontenerze OpenSocial

Kup książkę

_

203

Poleć książkę


elementu w strumieniu aktywnoci. Jeli programista ustawi niski priorytet (0) i jeli uytkownik nie da aplikacji niezbdnych uprawnie, aktualizacja zostanie zignorowana, a uytkownik nie zostanie zapytany o zgod na umieszczenie nowej aktualizacji w strumieniu aktywnoci. Ustawienie flagi priority wymaga umieszczenia odpowiedniej wartoci w obiekcie JSON przekazywanym podczas tworzenia dania: // umieszcza nowe powiadomienie z wysokim priorytetem w strumieniu aktywnoci biecego uytkownika osapi.activities.create({ userId: "@viewer", activity: { title: "Wicej informacji mona znale  na moim blogu", url: "http://www.nakedtechnologist.com/", priority: 1 } }).execute();

Kompletny kod ródowy tego przykadu jest dostpny pod adresem ftp://ftp.helion.pl/ przyklady/prapse.zip.

W powyszym przykadzie uytkownik, który nie nada aplikacji uprawnie do umieszczania powiadomie w swoim strumieniu aktywnoci, jest proszony o zgod na dodanie nowej aktualizacji. Pytanie o zgod moe by wywietlone, jeli na przykad uytkownik nie zezwoli danej aplikacji na dostp do swoich danych spoecznociowych lub jeli przeglda t aplikacj w trybie podgldu.

Wzbogacanie aktualizacji o treci multimedialne Doczanie elementów multimedialnych do powiadomie umoliwia wzbogacenie interakcji z treci umieszczan w strumieniu aktywnoci i duo skuteczniejsze przyciganie uwagi uytkownika ni w przypadku standardowego tekstu i linków. Stosowanie elementów multimedialnych jest wic wietnym sposobem zwikszania liczby odbiorców, którzy zdecyduj si na blisze poznanie i zainstalowanie promowanej aplikacji. danie wysania powiadomienia obejmuje opcjonalne pole mediaItems, w którym programista moe umieszcza obrazy, pliki audio i zapisy wideo wzbogacajce tre aktualizacji. Do tworzenia elementów multimedialnych w ramach kontenera OpenSocial suy metoda opensocial.newMediaItem(...), która otrzymuje na wejciu typ MIME definiujcy rodzaj dodawanej treci oraz adres URL samej treci, na przykad obrazu: // tworzy nowy element multimedialny dla obrazu var imageUrl = "http://www.mysite.com/image.jpg"; var mediaImg = opensocial.newMediaItem("image/jpeg", imageUrl); var mediaObj = [mediaImg]; // buduje list parametrów dla nowego powiadomienia var params = {}; params[opensocial.Activity.Field.TITLE] = "Wysanie obrazu"; params[opensocial.Activity.Field.URL] = "http://www.myserver.com/index.php"; params[opensocial.Activity.Field.BODY] = "Test: <b>1, 2, 3</b>"; params[opensocial.Activity.Field.MEDIA_ITEMS] = mediaObj; var activityObj = opensocial.newActivity(params);

204 _

Rozdzia 6. Aktywno uytkowników, publikowanie powiadomie aplikacji i danie danych w kontenerze OpenSocial

Kup książkę

Poleć książkę


// generuje danie utworzenia nowego powiadomienia osapi.activities.create({ userId: "@viewer", activity: activityObj }).execute();

Kompletny kod ródowy tego przykadu jest dostpny pod adresem ftp://ftp.helion.pl/ przyklady/prapse.zip.

Proces doczania obiektu reprezentujcego tre multimedialn w powyszym przykadzie skada si z trzech kroków. W pierwszym kroku naley utworzy nowy obiekt elementu multimedialnego za pomoc metody opensocial.newMediaItem(...), która tworzy odpowiedni struktur. Pierwszy parametr tej metody, w tym przypadku image/jpeg, reprezentuje typ MIME, czyli rodzaj tworzonych danych. Drugi parametr zawiera acuch adresu URL wskazujcego odpowiedni obraz. W powyszym przykadzie zastosowano typowe rozwizanie dla doczania treci multimedialnych do powiadomienia, czyli utworzono tablic obejmujc poszczególne pola nowego obiektu. W drugim kroku naley utworzy obiekt activity obejmujcy wszystkie dane skadowe, w tym obiekt treci multimedialnych. Parametry skadajce si na ten obiekt mona zdefiniowa w formie obiektu JSON lub za pomoc metody opensocial.newActivity(...), która generuje odpowiedni struktur. W roli podstawowych danych tekstowych obiektu powiadomienia uyto tytuu, ciaa i adresu URL. W powyszym kodzie dodano te element multimedialny za porednictwem pola opensocial.Activity.Field.MEDIA_ITEMS, któremu przypisano tablic zawierajc obiekt multimedialny utworzony w poprzednim kroku. Prezentowany kod wywouje nastpnie metod opensocial.newActivity(...), aby wygenerowa struktur nowego powiadomienia. W ostatnim kroku naley przygotowa danie utworzenia powiadomienia. Na wejciu metody create przekazano identyfikator uytkownika, do którego ma trafi powiadomienie (w tym przypadku bdzie to biecy uytkownik aplikacji), oraz utworzony wczeniej obiekt samego powiadomienia. Wymienione kroki wystarcz do wysania powiadomienia (aktualizacji) obejmujcego obraz. Wstawienie zapisu wideo lub strumienia audio wymaga przeprowadzenia identycznej procedury — naley tylko pamita o ustawieniu waciwego adresu URL i typu MIME dla prezentowanych danych.

Pasywne i bezporednie publikowanie powiadomie aplikacji Istniej dwie gówne kategorie metod promowania aplikacji spoecznociowych: bezporednie i pasywne publikowanie powiadomie. Wybór waciwego rozwizania zaley od okolicznoci, w jakich aktualizacja bdzie publikowana w imieniu uytkownika, oraz od tego, czy uytkownik ma wiadomo generowania tej aktualizacji. Istnieje kilka alternatywnych modeli publikowania powiadomie aplikacji. Jak ju wspomniaem, wielu programistów promuje swoje aplikacje, umieszczajc powiadomienia w strumieniach

Pasywne i bezporednie publikowanie powiadomie aplikacji

Kup książkę

_

205

Poleć książkę


aktywnoci uytkownika, tak aby odpowiednie komunikaty byy prezentowane wszystkim znajomym tego uytkownika. Programici stosujcy t metod s przekonani, e wicej powiadomie oznacza wiksz widoczno oferty. Przyjmijmy, e uytkownik ma zainstalowanych co najmniej pi aplikacji, a kada z nich wysya maksymaln moliw liczb powiadomie, które w dodatku s rozsyane do wszystkich znajomych tego uytkownika. Co bdzie, jeli kontener oferuje mechanizm ukrywania wszystkich tego rodzaju powiadomie, aby zapobiec zasypywaniu swojego strumienia aktywnoci natrtnymi ofertami? Okazuje si, e niemal wszystkie kontenery obsugujce aplikacje spoecznociowe umoliwiaj ukrywanie tego rodzaju powiadomie, zatem programici musz bardzo ostronie planowa dobór wiadomoci i czstotliwo ich wysyania. W takim przypadku naley rozway wybór bezporedniego lub pasywnego publikowania powiadomie. Obie opcje maj swoje zalety i wady, które zostan szczegóowo omówione w poniszych punktach.

Bezporednie publikowanie powiadomie aplikacji Bezporednie publikowanie powiadomie aplikacji polega na umieszczaniu w strumieniu aktywnoci komunikatów (aktualizacji) zalenie od czynnoci podejmowanych przez uytkownika, za jego wiedz i zgod. Uytkownik godzi si na ten model, akceptujc odpowiedni opcj, korzystajc z funkcji oferowanych przez t aplikacj lub wybierajc jak form nagrody lub wsparcia w ramach tej aplikacji. Podstawowym argumentem na rzecz mechanizmu bezporedniego publikowania powiadomie jest to, e uytkownik wie o dziaaniach podejmowanych przez aplikacj w jego imieniu i — tym samym — mniejsze jest prawdopodobiestwo wyczenia (ukrycia) powiadomie wysyanych przez aplikacj (w konfiguracji kontenera lub samej aplikacji) lub wrcz odinstalowania aplikacji z powodu utraty zaufania do jej dziaa. Utrzymanie relacji zaufania pomidzy uytkownikiem a aplikacj jest bardzo wane, jeli wokó tej aplikacji ma by budowana szersza spoeczno . Programista powinien robi wszystko, aby uytkownik by przekonany o moliwoci korzystania z aplikacji bez obaw o zoliwe czy ryzykowne dziaania. Najwiksz wad bezporedniego publikowania powiadomie aplikacji jest ograniczona liczba generowanych aktualizacji. Jeli aplikacja nie do skutecznie zachca uytkownika do dziaa, które powoduj wysyanie powiadomie, wikszo uytkowników nie bdzie godzia si na umieszczanie nowych elementów w swoich strumieniach aktywnoci, zatem przekaz promujcy aplikacj nie bdzie trafia do ich znajomych. Uytkowników kontenera aplikacji spoecznociowych bardzo szybko zniechca nadmiar powiadomie wysyanych do znajomych przez zainstalowan aplikacj. Poniewa wikszo kontenerów udostpnia funkcje blokowania umieszczania takich powiadomie w strumieniu uytkownika, programista, który w ten sposób chce promowa swoj aplikacj, musi stale mie na uwadze ryzyko przekroczenia akceptowanej liczby aktualizacji. Aby ograniczy to ryzyko, naley dobrze zaplanowa , jakie zdarzenia w ramach aplikacji bd stanowiy dobr okazj do jej promowania (zarówno z perspektywy uytkownika, którego strumie aktywnoci zostanie uyty, jak i z punktu widzenia znajomych tego uytkownika, którzy otrzymaj odpowiednie powiadomienia). Umieszczanie w strumieniu aktywnoci uytkownika zbyt duej liczby aktualizacji jest najkrótsz drog do cakowitego zablokowania powiadomie generowanych przez t aplikacj. Powiadomienia naley umieszcza w strumieniu aktywnoci z umiarem.

206

_

Rozdzia 6. Aktywno uytkowników, publikowanie powiadomie aplikacji i danie danych w kontenerze OpenSocial

Kup książkę

Poleć książkę


Bezporednie publikowanie powiadomie aplikacji polega na prezentowaniu zacht do dziaania, które przekonaj uytkownika do opublikowania aktualizacji aplikacji w jego strumieniu aktywnoci: <div id="msgNode"></div> <div id="shareMsg"> Przeka znajomym, e zaktualizowae swój profil i zarobie 5 dolarów w walucie aplikacji!<br /> <button onclick="addActivity();">Publikuj</button> </div> <script type="text/javascript"> // generuje danie utworzenia nowego powiadomienia function addActivity(){ osapi.activities.create({ userId: "@viewer", activity: { title: "Zaktualizowaem swój profil - kliknij, aby przeczyta o tych aktualizacjach", url: "http://www.container.com/myapp" } }).execute(function(){ // powiadomienie zostao opublikowane — wywietla si komunikat o pomylnym zakoczeniu operacji document.getElementById("msgNode").innerHTML = "Twoja wiadomo zostaa opublikowana"; document.getElementById("shareMsg").style.display = "none"; // kod dodajcy 5 dolarów waluty aplikacji do profilu uytkownika }); } </script>

Kompletny kod ródowy tego przykadu jest dostpny pod adresem ftp://ftp.helion.pl/ przyklady/prapse.zip.

Po rozoeniu tego przykadu na elementy skadowe atwo zauway , e uytkownik otrzyma komunikat tekstowy i przycisk z zacht do opublikowania informacji o aktualizacji swojego profilu. Kliknicie przycisku Publikuj powoduje, e odpowiednie powiadomienie jest umieszczane w jego strumieniu aktywnoci, a sam uytkownik otrzymuje potwierdzenie tej aktualizacji.

Pasywne publikowanie powiadomie aplikacji W przeciwiestwie do bezporedniego publikowania powiadomie pasywne publikowanie aktualizacji polega na umieszczaniu komunikatów w strumieniu aktywnoci uytkownika (i w jego imieniu) bez kadorazowego informowania i pytania o zgod tego uytkownika. Model pasywnego publikowania powiadomie mona obserwowa w takich aplikacjach jak FourSquare czy Gowalla, które rozsyaj informacje o miejscu pobytu uytkownika za kadym razem, gdy uytkownik loguje si w tych serwisach. Uytkownik co prawda ma wiadomo , e aplikacja umieszcza w strumieniu aktywnoci odpowiednie powiadomienia w jego imieniu (wczeniej wyrazi na to zgod), ale sam w aden sposób nie uczestniczy w procesie publikowania poszczególnych aktualizacji. Ta metoda publikacji powiadomie ma swoje zalety i wady. Uytkownik formalnie zezwoli aplikacji na publikowanie powiadomie w swoim imieniu, jednak programista aplikacji ma woln rk w kwestii wykorzystania tej zgody. Najwiksz zalet tego modelu jest pewno , e okrelone czynnoci uytkownika spowoduj opublikowanie waciwych powiadomie Pasywne i bezporednie publikowanie powiadomie aplikacji

Kup książkę

_

207

Poleć książkę


(w przeciwiestwie do modelu bezporedniej publikacji, gdzie jest wymagana kadorazowa zgoda uytkownika). Oznacza to, e aplikacja dziaajca wedug tego modelu moe publikowa znacznie wicej aktualizacji w nadziei na dotarcie do wikszej liczby odbiorców. Najwiksza zaleta tego modelu jest jednoczenie jego zasadnicz wad — ródem problemów jest liczba powiadomie wysyanych w imieniu uytkownika bez jego kadorazowej zgody i bez jego udziau w tym procesie. Takie dziaanie ma kilka negatywnych aspektów: x Uytkownik musi z wyprzedzeniem wyrazi swoje zaufanie do aplikacji, aby umoliwi

jej dostp do swojego profilu spoecznociowego i podejmowanie dziaa w jego imieniu. Naruszenie tej relacji zaufania poprzez wysyanie zbyt wielu aktualizacji moe spowodowa ukrycie wszystkich powiadomie, wycofanie zgody na publikacj aktualizacji w imieniu uytkownika lub wrcz cakowite odinstalowanie aplikacji. x Istnieje wiele aplikacji publikujcych liczne aktualizacje w strumieniach aktywnoci swo-

ich uytkowników. Wszystkie te aktualizacje s widoczne dla znajomych tych uytkowników. Jeli aplikacja umieszcza w strumieniu aktywnoci uytkownika zbyt wiele aktualizacji, jego znajomi najprawdopodobniej ukryj powiadomienia generowane przez t aplikacj lub wrcz j odinstaluj. Oznacza to, e zbyt dua liczba aktualizacji wie si z ryzykiem utraty potencjalnej bazy uytkowników. Warunkiem skutecznego publikowania powiadomie (niezalenie od wybranego modelu) jest umiar. Nie naley naduywa zaufania uytkownika i wysya zbyt wielu aktualizacji — w przeciwnym razie uytkownik bezpowrotnie straci zaufanie do aplikacji. Zdarzeniem wywoujcym pasywn publikacj powiadomienia moe by prosta aktualizacja profilu uytkownika, która powoduje umieszczenie odpowiedniego komunikatu w strumieniu aktywnoci: <!-- WSTAWI : elementy formularza niezbdne do aktualizacji profilu --> Zaktualizuj swój profil <button onclick="updateProfile();">Aktualizuj profil</button> <script type="text/javascript"> // funkcja aktualizujca profil uytkownika function updateProfile (){ // WSTAWI : skrypty generujce danie aktualizacji profilu uytkownika // generuje danie publikacji powiadomienia o aktualizacji profilu osapi.activities.create({ userId: "@viewer", activity: { title: "Zaktualizowaem swój profil - kliknij, aby przeczyta o tych aktualizacjach", url: "http://www.container.com/myapp" } }).execute(); </script>

Kompletny kod ródowy tego przykadu jest dostpny pod adresem ftp://ftp.helion.pl/ przyklady/prapse.zip.

Powyszy przykad pod wieloma wzgldami przypomina kod pokazany przy okazji omawiania bezporedniego publikowania powiadomie. Jedyna rónica polega na tym, e doda-

208 _

Rozdzia 6. Aktywno uytkowników, publikowanie powiadomie aplikacji i danie danych w kontenerze OpenSocial

Kup książkę

Poleć książkę


nie nowego powiadomienia jest teraz cile zwizane z aktualizacj profilu, a uytkownik nie jest informowany o umieszczeniu nowego powiadomienia w strumieniu aktywnoci (nie jest te pytany o zgod). Przykadowa aplikacja udostpnia wiele pól formularza, za porednictwem którego uytkownik moe zaktualizowa swój profil. Po wprowadzeniu zmian uytkownik moe klikn przycisk zapisujcy nowe ustawienia. Kliknicie tego przycisku powoduje wywoanie funkcji, która wysya na serwer danie aktualizacji profilu. Po wysaniu tego dania odpowiednie powiadomienie jest umieszczane w strumieniu aktywnoci uytkownika (w jego imieniu) bez adnej informacji czy ostrzeenia dla samego uytkownika.

Zrównowaone publikowanie powiadomie Jednym ze sposobów wykorzystania zalet obu modeli (bezporedniego i pasywnego publikowania powiadomie) i jednoczenie unikania ich wad jest próba zintegrowania obu rozwiza w ramach mechanizmu zrównowaonego publikowania powiadomie. Proponowana technika, jeli jest prawidowo stosowana, pozwala zagwarantowa publikacj okrelonej liczby powiadomie w zwizku z dziaaniami uytkownika, przy jednoczesnym zachowaniu relacji zaufania czcej aplikacj i tego uytkownika. Technika zrównowaonego publikowania powiadomie bazuje na kilku podstawowych zaoeniach. Programista powinien zacz od stosowania modelu pasywnego publikowania powiadomie i na podstawie zebranych dowiadcze okreli , które czynnoci uytkownika powinny powodowa publikowanie aktualizacji. Jeli powiadomienia publikowane w tym trybie s skojarzone z czstymi czynnociami, aplikacja zasypie strumie aktywnoci uytkownika (bez jego wiedzy) mnóstwem komunikatów. Pasywne publikowanie powiadomie naley stosowa tylko dla najwaniejszych dziaa, jak wykonanie przez uytkownika czasochonnego zadania, uzyskanie rzadkiej odznaki czy wprowadzenie istotnych zmian w jego profilu lub treci aplikacji. Takie rozwizanie pozwala jednoczenie zagwarantowa promocj pewnej liczby zdarze i wyeliminowa ryzyko zmonopolizowania strumienia aktywnoci uytkownika. Dla wszystkich pozostaych zdarze, które powinny powodowa umieszczanie komunikatów w strumieniu aktywnoci, naley stosowa technik bezporedniej publikacji powiadomie. Powiadomienia publikowane w tym trybie mog dotyczy zaprosze, prób o pomoc lub okrelon tre kierowanych do znajomych, udostpniania znajomym treci aplikacji itp. Zachty do dziaania mog by bardziej kuszce, jeli zawieraj informacje o korzyciach wynikajcych ze zgody na publikacj aktualizacji — moe to by zastrzyk wirtualnej gotówki lub dostp do rozmaitych ulepsze. Rozsdne gospodarowanie aktualizacjami i utrzymanie relacji zaufania czcej aplikacj z uytkownikiem moe bardzo uatwi budowanie bogatej bazy promocji aplikacji przy uyciu strumienia aktywnoci. W idealnych warunkach to uytkownicy bd promowali aplikacj wród swoich znajomych, publikujc powiadomienia dotyczce wykonywanych przez siebie czynnoci.

Pasywne i bezporednie publikowanie powiadomie aplikacji

Kup książkę

_ 209

Poleć książkę


Generowanie da AJAX i da dostpu do danych zewntrznych W trakcie normalnego funkcjonowania programu programista czsto staje przed koniecznoci modyfikacji kodu aplikacji lub rozszerzenia róde danych serwera (na przykad bazy danych) o now tre . Aby uproci to zadanie, specyfikacja OpenSocial definiuje metody obiektu http dostpne za porednictwem standardowej biblioteki JavaScriptu. Programici mog uywa tej metody do generowania da REST (GET, PUT, POST i DELETE) pomidzy aplikacj a serwerem w celu zmodyfikowania stanu dziaajcego systemu bez wpywu na doznania uytkowników. Do generowania tych da su nastpujce metody obiektu osapi.http: x osapi.http.get(url, parametry) x osapi.http.put(url, parametry) x osapi.http.post(url, parametry) x osapi.http.delete(url, parametry)

Oprócz adresu URL, na który ma zosta wysane danie http, na wejciu wymienionych metod mona dodatkowo przekazywa wiele rónych parametrów. Dostpne parametry opisano w tabeli 6.2. Tabela 6.2. Parametry da obiektu http Parametr

Opis

authz (acuch)

Metoda autoryzacji uywana podczas wysyania danych na serwer. Parametr moe mie warto none (domylnie), signed lub oauth.

body (acuch)

Stosowane tylko dla da PUT i POST. Dane wysyane na serwer w ramach dania.

format (acuch)

Format zwracanych danych. Parametr moe mie warto json (domylnie) lub text.

headers (acuch lub tablica acuchów)

Opcjonalne nagówki wysyane wraz z daniem danych.

oauth_service_name (acuch)

Element service w specyfikacji gadetu, który ma zosta uyty w tym daniu. Domyln wartoci tego parametru jest acuch pusty ("").

oauth_token_name (acuch)

Token standardu OAuth stosowany w tym daniu. Domyln wartoci tego parametru jest acuch pusty ("").

oauth_request_token (acuch)

Token wstpnie zaakceptowany przez dostawc (dla treci bdcej przedmiotem dania).

oauth_request_token_secret (acuch)

Tajny klucz skojarzony z tokenem request_token.

oauth_use_token (acuch)

Okrela, czy w daniu naley uy tokenu standardu OAuth. Parametr moe mie warto always, if_available lub never.

refreshInterval (liczba cakowita)

Okres, w którym kontener moe przechowywa zwrócone dane w swojej pamici podrcznej.

sign_owner (warto logiczna)

Okrela, czy danie powinno by autoryzowane (podpisane) i czy ma obejmowa identyfikator waciciela. Parametr domylnie ma warto true.

sign_viewer (warto logiczna)

Okrela, czy danie powinno by autoryzowane (podpisane) i czy ma obejmowa identyfikator biecego uytkownika. Parametr domylnie ma warto true.

210

_

Rozdzia 6. Aktywno uytkowników, publikowanie powiadomie aplikacji i danie danych w kontenerze OpenSocial

Kup książkę

Poleć książkę


Znaczna cz da dotyczcych danych, które nie wymagaj zabezpiecze, obejmuje zaledwie kilka z opisanych parametrów, w tym format, body (w przypadku da POST i PUT) oraz refreshInterval (w celu poprawienia wydajnoci). Parametry authz, sign_* oraz oauth_* stosuje si w sytuacji, gdy danie danych wymaga zabezpieczenia i gdy odbiorca musi potwierdzi tosamo nadawcy tego dania.

Generowanie standardowych da dostpu do danych Jeli budowany serwis wymaga bezpiecznego przesyania danych, dostp do zdecydowanej wikszoci tych danych bdzie si odbywa za porednictwem standardowych da serwera RESTful. Do generowania tych standardowych da suy wywoanie osapi.http.metoda, gdzie sowo metoda naley zastpi typem dania, czyli get, put, post lub delete. Poniewa omawiane rozwizania wymagaj stosowania funkcji biblioteki osapi jzyka JavaScript, naley doda wyraenie Require, aby byo moliwe korzystanie z metod generowania da. Po udostpnieniu wspomnianych metod mona przystpi do utworzenia praktycznego przykadu, który bdzie pobiera dane z zewntrznego róda i wywietla uzyskan w ten sposób tre w oknie aplikacji. Poniszy przykad kodu generuje danie GET wysyane do serwisu Flickr przy uyciu jzyka YQL (od ang. Yahoo! Query Language). danie zwraca fotografie pasujce do wyszukiwanego sowa Montreal. Otrzymane wyniki s nastpnie przetwarzane — kade zdjcie jest otaczane znacznikami <img> i wywietlane w ramach okna aplikacji: <?xml version="1.0" encoding="utf-8"?> <Module> <ModulePrefs title=" danie GET do serwisu Flickr za pomoc jzyka YQL"> <Require feature="osapi"/> </ModulePrefs> <Content type="html" view="canvas"> <![CDATA[ <div id="imgContainer"></div> <script type="text/javascript"> // Wywoanie zwrotne dla dania GET function requestCallback(response){ var photolist = response.content.query.results.photo, html = ""; // przeszukuje w ptli kolejne obrazy i tworzy znaczniki <img> for (var i in photolist){ if (photolist.hasOwnProperty(i)){ html += "<img src='http://farm" + photolist[i].farm + ".static.flickr.com/" + photolist[i].server + "/" + photolist[i].id + "_" + photolist[i].secret + ".jpg' alt='" + photolist[i].title +"' /><br />"; document.getElementById('imgContainer').innerHTML = html; } } } // generuje danie GET var url = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20flickr.photos. ´search%20where%20text%3D%22Montreal%22&format=json"; osapi.http.get({ "href": url,

Generowanie da AJAX i da dostpu do danych zewntrznych

Kup książkę

_

211

Poleć książkę


"format": "json" }).execute(requestCallback); </script> ]]> </Content> </Module>

Kompletny kod ródowy tego przykadu jest dostpny pod adresem ftp://ftp.helion.pl/ przyklady/prapse.zip.

W pierwszym kroku zdefiniowano specyfikacj gadetu niezbdn do uruchomienia tego przykadu, w szczególnoci element Require dla biblioteki osapi (w ramach elementu ModulePrefs). W kolejnym kroku utworzono sekcj Content wywietlajc widok kanwy aplikacji. Waciwe wykonywanie programu rozpoczyna si w dolnej czci sekcji Content. Zdefiniowano tam adres URL, na który zostanie wysane danie (w tym przypadku uyto adresu usugi YQL z acuchem wyszukiwania dla serwisu Flickr). Bezporednio potem wywoano metod our osapi.http.get(...), aby zainicjowa to danie. Na wejciu tej metody przekazano wspomniany adres URL (za porednictwem parametru href) i okrelono, e oczekiwanym wynikiem tego dania jest obiekt JSON. Ostatnim elementem tej czci kodu jest wysanie dania za pomoc metody execute(...). Na wejciu tej metody przekazano referencj do funkcji wywoania zwrotnego, która ma zosta wykonana po zwróceniu odpowiedzi dla dania. Po zakoczeniu przetwarzania dania nastpuje wywoanie funkcji requestCallback, która otrzymuje na wejciu (za porednictwem parametru) obiekt odpowiedzi. Dalsza cz kodu odpowiada za przetworzenie otrzymanych wartoci — uyta ptla for przeszukuje poszczególne obiekty na licie. Dla kadej fotografii znalezionej na licie jest generowany fragment kodu jzyka HTML ze znacznikami <img> i odwoaniem do odpowiedniego adresu URL w ramach serwisu Flickr. Po wygenerowaniu treci w formacie HTML dla wszystkich obrazów gotowy acuch jest umieszczany w wle div skonfigurowanym na pocztku sekcji Content.

Umieszczanie treci w daniach danych W niektórych przypadkach wraz z daniem naley wysa na serwer okrelon tre . danie moe dotyczy na przykad umieszczenia na serwerze nowych ustawie konfiguracyjnych uytkownika, czyli aktualizacji rekordu tego uytkownika w bazie danych: <label for="user"></label> <input type="text" name="user" id="user" /><br /> <label for="pass"></label> <input type="hidden" name="pass" id="pass" /> <button onclick="updateRecord();">Aktualizuj dane uytkownika</button> <div id="response"></div> <script type="text/javascript"> function updateRecord(){ // ustawia adres URL i wysyane dane var url = "http://www.mysite.com/updateUser.php"; var postData = "user=" + encodeURIComponent(document.getElementById("user").value) + "&pass=" + encodeURIComponent(document.getElementById("pass").value);

212

_

Rozdzia 6. Aktywno uytkowników, publikowanie powiadomie aplikacji i danie danych w kontenerze OpenSocial

Kup książkę

Poleć książkę


// wysya obiekt danych pod wskazany adres URL (danie POST) osapi.http.post({ "href": url, "body": postData, "format": "text" }).execute(function(response){ document.getElementById("response").innerHTML = "Wysano dane"; }); } </script>

Kompletny kod ródowy tego przykadu jest dostpny pod adresem ftp://ftp.helion.pl/ przyklady/prapse.zip.

W ramach dania POST umieszczono kod jzyka znaczników, aby umoliwi uytkownikowi podanie nazwy i hasa. Obie wartoci reprezentuj informacje, które zostan przekazane na serwer w celu zaktualizowania rekordu uytkownika. W powyszym kodzie zdefiniowano te wze div, w którym bdzie wywietlane potwierdzenie wysania dania. Kliknicie przycisku przez uytkownika spowoduje wywoanie funkcji updateRecord(). W ciele funkcji updateRecord() ustawiono adres URL, na który zostanie wysane danie, oraz wygenerowano pary klucz-warto dania POST na podstawie pól z danymi wejciowymi. Kolejne pary oddzielono znakiem &. I wreszcie przedstawiony kod generuje danie POST protokou HTTP za pomoc metody osapi. ´http.post(...) otrzymujcej na wejciu adres URL, format i dane, które maj zosta wysane w ramach tego dania. Metoda execute() generuje danie i wywouje funkcj zwrotn po jego przetworzeniu. Funkcja zwrotna umieszcza w wle div prosty komunikat o pomylnym przebiegu operacji.

Uywanie autoryzowanych da do zabezpieczania pocze W przypadku standardowych da protokou HTTP wysyanych za porednictwem aplikacji korzystajcej z metod obiektu osapi.http to kontener peni funkcj porednika i przekazuje bezporednio na serwer wszystkie parametry doczone do dania. W tym modelu kontener w aden sposób nie modyfikuje przekazywanych parametrów (patrz rysunek 6.2).

Rysunek 6.2. Uytkownik generujcy danie do zewntrznego serwisu internetowego za porednictwem kontenera bez autoryzacji OAuth

Generowanie da AJAX i da dostpu do danych zewntrznych

Kup książkę

_

213

Poleć książkę


W przypadku pobierania danych z zewntrznego róda, które nie wymaga stosowania zabezpiecze ani weryfikacji tosamoci uytkownika, opisany powyej model (z niezabezpieczonym transferem danych) w zupenoci wystarczy. Warto jednak przeanalizowa nieco inny scenariusz generowania dania. Przypu my, e zamiast pobiera przypadkowe, niewraliwe dane, generujemy danie POST, aby zaktualizowa na serwerze dane uytkownika. Wszystkie parametry przekazywane na serwer, w tym identyfikator uytkownika, s ustawiane w kodzie samej aplikacji. Poniewa danie nie jest w aden sposób zabezpieczone, kady uytkownik moe odczyta te dane za pomoc Firebuga lub tak zmodyfikowa danie, aby zmieni lub uzyska informacje o innym uytkowniku. Na rysunku 6.3 pokazano danie wysane na serwer, które sprawia wraenie w peni poprawnego, mimo e w rzeczywistoci przekazuje kontrol nad danymi uytkownika innemu, nieuprawnionemu uytkownikowi.

Rysunek 6.3. Zoliwy uytkownik generuje danie do zewntrznego serwisu, skutecznie podszywajc si pod innego uytkownika (wskutek braku autoryzacji OAuth)

Wanie takim przypadkom mona zapobiec, stosujc autoryzowane dania, które mona generowa za pomoc metod obiektu osapi.http standardu OpenSocial. Autoryzowane (podpisane) dania umoliwiaj programistom przekazywanie parametrów pomidzy aplikacj a serwerem, jednak w tym przypadku kontener aplikacji jest nieporównanie bardziej aktywny. Kontener, do którego trafia autoryzowane danie (patrz rysunek 6.4), sprawdza tosamo uytkownika wystpujcego w roli nadawcy i docza do dania odpowiedni identyfikator. Oprócz tego identyfikatora kontener dodaje do dania zaszyfrowany skrót, który umoliwia weryfikacj poprawnoci identyfikatora przez niezalen, zewntrzn usug.

Rysunek 6.4. Uytkownik generujcy danie do zewntrznego serwisu internetowego za porednictwem kontenera z wykorzystaniem autoryzacji OAuth

214

_

Rozdzia 6. Aktywno uytkowników, publikowanie powiadomie aplikacji i danie danych w kontenerze OpenSocial

Kup książkę

Poleć książkę


Dodatkowa weryfikacja oznacza, e atak polegajcy na próbie sfaszowania tosamoci uytkownika i wysania na serwer danych uwierzytelniajcych innego uytkownika zakoczy si niepowodzeniem, poniewa sfaszowane dane i tak zostan nadpisane przez dane uwierzytelniajce waciwego uytkownika. Jeli dane uytkownika zostan potwierdzone, w ramach dania mona dodatkowo przekaza takie parametry jak identyfikator biecego uytkownika i waciciela czy identyfikator aplikacji (patrz rysunek 6.5).

Rysunek 6.5. Zoliwy uytkownik generuje danie do zewntrznego serwisu, ale nie moe skutecznie podszywa si pod innego uytkownika z powodu zastosowania mechanizmu autoryzacji OAuth

W przypadku wygenerowania autoryzowanego (podpisanego) dania serwer docelowy zawsze otrzymuje nastpujce parametry: opensocial_owner_id

Unikatowy identyfikator waciciela aplikacji. opensocial_app_url

Peny adres URL aplikacji, która wygenerowaa dane danie. Poza wymienionymi powyej wymaganymi parametrami kontenery mog te wysya dodatkowe informacje uatwiajce weryfikacj, w tym: opensocial_viewer_id

Unikatowy identyfikator biecego uytkownika aplikacji. opensocial_instance_id

Okrela, czy kontener powinien obsugiwa wiele instancji tej samej aplikacji. Za porednictwem tego parametru naley przekaza identyfikator instancji aplikacji wysyajcej dane danie. Pomidzy parametrami opensocial_instance_id i opensocial_app_url mona wskaza instancj konkretnej aplikacji dziaajcej w kontenerze. opensocial_app_id

Unikatowy identyfikator aplikacji. Ten parametr suy przede wszystkim zachowaniu zgodnoci wstecz z wersj 0.7 specyfikacji OpenSocial. xoauth_public_key

Klucz publiczny uyty do podpisania danego dania. Jeli kontener nie stosuje kluczy publicznych do podpisywania da lub jeeli wykorzystuje alternatywne metody przekazywania kluczy w ramach da, ten parametr mona pomin .

Generowanie da AJAX i da dostpu do danych zewntrznych

Kup książkę

_

215

Poleć książkę


Oprócz wymienionych powyej parametrów na serwer mona dodatkowo wysya dane uwierzytelniajce standardu OAuth umoliwiajce weryfikacj autoryzowanych da. Do tej grupy parametrów nale: x oauth_consumer_key x oauth_nonce x oauth_signature x oauth_signature_method x oauth_timestamp x oauth_token

Samo wygenerowanie podpisanego (autoryzowanego) dania nie gwarantuje penej ochrony przed manipulacjami. Serwer docelowy dania musi jeszcze wykona dodatkowe kroki zwizane z weryfikacj autoryzowanego dania, aby potwierdzi poprawno nadesanych danych.

Generowanie autoryzowanego dania Utworzenie podpisanego (autoryzowanego) dania wymaga poczenia standardowej skadni da, któr stosowano ju we wczeniejszych przykadach, z parametrem authz: // generuje podpisane danie GET protokou HTTP osapi.http.get({ 'href' : 'http://www.mysite.com/editUser.php', 'format' : 'json', 'authz' : 'signed' }).execute(callback);

W ramach tego dania GET zdefiniowano adres URL, na który ma zosta wysane podpisane danie, wskazano format danych i — co najwaniejsze — okrelono, e danie ma by podpisane (parametr authz). Powyszy kod generuje wic podpisane danie GET protokou HTTP.

Weryfikacja podpisanego dania po stronie serwera Jak ju wspomniaem, samo wygenerowanie i wysanie podpisanego dania na serwer nie wystarczy do zagwarantowania poprawnoci tego dania. Zoliwy uytkownik moe podj prób faszowania take autoryzowanych da. Do weryfikacji podpisanych da pod ktem pochodzenia z waciwego róda programista moe wykorzysta podpis standardu OAuth. Weryfikacja da przy uyciu tego mechanizmu bdzie wymagaa kilku dodatkowych elementów: x Biblioteki OAuth (dostpnej na stronie http://code.google.com/p/oauth/) niezbdnej do wery-

fikacji da po stronie serwera. W tym przykadzie bdzie stosowana biblioteka PHP OAuth 1.0 Rev A (dostpna pod adresem http://oauth.googlecode.com/svn/code/php/). x Jeli kontener stosuje metod weryfikacji na bazie certyfikatu klucza publicznego, bdzie

potrzebny odpowiedni certyfikat. List certyfikatów z kluczami publicznymi dla wielu rónych kontenerów oraz adresy usug sprawdzania tych certyfikatów mona znale na stronie https://opensocialresources.appspot.com/certificates/. Wspomniany serwis naley jednak traktowa wycznie jako pomocnicze ródo, poniewa jego tre nie jest aktualizowana ani aprobowana przez twórców kontenerów. Aby zintegrowa najlepsze mechanizmy zabezpiecze, naley zapozna si z dokumentacj kontenera i znale najbardziej aktualny certyfikat klucza publicznego.

216

_

Rozdzia 6. Aktywno uytkowników, publikowanie powiadomie aplikacji i danie danych w kontenerze OpenSocial

Kup książkę

Poleć książkę


Weryfikacja podpisanego dania skada si z dwóch kroków. Po pierwsze, w kodzie po stronie klienta naley odpowiednio przygotowa podpisane danie na potrzeby skryptu po stronie serwera. Nastpnie trzeba przetworzy parametry przesane do skryptu po stronie serwera i sprawdzi ich poprawno za pomoc elementów biblioteki OAuth. Cay ten dwuetapowy proces zosta omówiony poniej.

Generowanie podpisanego dania w kodzie JavaScriptu Wygenerowanie podpisanego dania w warstwie kodu jzyka JavaScript (w ramach sekcji Content specyfikacji gadetu) spowoduje przekazanie danych uwierzytelniajcych biblioteki OAuth, kontenera i uytkownika w celu sprawdzenia poprawnoci dania po stronie serwera. Wygenerowanie takiego dania sprowadza si do utworzenia podpisanego dania osapi. ´http.get adresowanego do skryptu po stronie serwera (podobnie jak w podpunkcie „Generowanie autoryzowanego dania” we wczeniejszej czci tego podrozdziau): <?xml version="1.0" encoding="utf-8"?> <Module> <ModulePrefs title="Weryfikacja podpisanego  dania AJAX"> <Require feature="opensocial-0.9"/> <Require feature="osapi"/> </ModulePrefs> <Content type="html" view="canvas"> <![CDATA[ <div id="validationResponse"></div> <script type="text/javascript"> function dataCallback(response){ document.getElementById("validationResponse").innerHTML = " danie zweryfikowane jako: " + response.data.validation; } osapi.http.get({ "href" : "http://www.mysite.com/validate.php", "format" : "text", "authz" : "signed" }).execute(dataCallback); </script> ]]> </Content> </Module>

Kompletny kod ródowy tego przykadu jest dostpny pod adresem ftp://ftp.helion.pl/ przyklady/prapse.zip.

Sam gadet zawiera wyraenia Require dla dania osapi.http.get(...) i sekcj Content niezbdn do wykonywania tych skryptów. We wspomnianej sekcji Content umieszczono wze div, w którym bdzie wywietlany komunikat o wyniku weryfikacji (komunikat bdzie generowany przez funkcj wywoania zwrotnego oraz przez wywoanie zwrotne samego dania protokou HTTP). W aplikacji produkcyjnej naleaoby sprawdza komunikat i odpowiednio obsugiwa komunikat odesany przez serwer w kodzie skryptu. Jeli odpowied serwera jest prawidowa i obejmuje nowy kod jzyka znaczników, mona wstawi ten kod na stronie. Jeeli jednak odpowied jest nieprawidowa, naley wywietli stosowny komunikat o braku moliwoci realizacji dania (przynajmniej w danej chwili).

Generowanie da AJAX i da dostpu do danych zewntrznych

Kup książkę

_

217

Poleć książkę


Wywoanie metody osapi.http.get(...), które ma miejsce po wspomnianym wywoaniu zwrotnym, generuje podpisane danie GET do skryptu po stronie serwera.

Weryfikacja podpisanego dania po stronie serwera (algorytm RSA-SHA1 z certyfikatem klucza publicznego) danie przekazywane (za porednictwem odpowiedniej warstwy kontenera) do skryptu po stronie serwera — w tym przypadku funkcj skryptu peni plik http://www.mysite.com/validate. php — powinno obejmowa wszystkie parametry niezbdne do weryfikacji, czyli dane uwierzytelniajce kontenera, uytkownika i biblioteki OAuth. Wiele popularnych kontenerów aplikacji spoecznociowych stosuje certyfikaty z kluczami publicznymi do weryfikacji da przy uyciu algorytmu RSA-SHA1. W poniszym przykadzie danie zostanie sprawdzone z wykorzystaniem jednego z takich certyfikatów. Jeli kontener nie stosuje certyfikatów z kluczami publicznymi do weryfikacji da lub jeeli programista woli uy algorytmu HMAC-SHA1 zamiast RSA-SHA1, naley wygenerowa klucz tajny na poziomie kontenera i wykorzysta ten klucz w miejsce certyfikatu klucza publicznego. <?php require_once("OAuth.php"); class buildSignatureMethod extends OAuthSignatureMethod_RSA_SHA1 { public function fetch_public_cert(&$request) { return file_get_contents("http://www.fmodules.com/public080813.crt"); } } // konstruuje danie na podstawie parametrów POST i GET $request = OAuthRequest::from_request(null, null, array_merge($_GET, $_POST)); // tworzy now metod podpisu na podstawie utworzonej klasy i certyfikatu klucza publicznego $signature_method = new buildSignatureMethod(); // sprawdza podpis @$signature_valid = $signature_method->check_signature($request, null, null, $_GET ["oauth_signature"]); $response = array(); if ($signature_valid) { // sprawdza podpisane danie i wysya komunikat o pomylnej weryfikacji $response['validation'] = "valid"; } else { // sprawdza podpisane danie i wysya komunikat o niepowodzeniu weryfikacji $response['validation'] = "invalid"; } // wywietla obiekt odpowiedzi print(json_encode($response)); ?>

Kompletny kod ródowy tego przykadu jest dostpny pod adresem ftp://ftp.helion.pl/ przyklady/prapse.zip.

218

_

Rozdzia 6. Aktywno uytkowników, publikowanie powiadomie aplikacji i danie danych w kontenerze OpenSocial

Kup książkę

Poleć książkę


Wyraenie require_once(...) na pocztku tego przykadu wskazuje plik biblioteki OAuth, ktĂłry pobrano wczeniej ze strony http://oauth.googlecode.com/svn/code/php/. Warto na pocztku zwrĂłci uwag na skrypt weryfikacji w postaci klasy buildSignatureMethod. Wspomniana klasa rozszerza klas OAuthSignatureMethod_RSA_SHA1 zdefiniowan w pliku OAuth.php i zawiera zaledwie jedn funkcj odpowiedzialn za pobranie i zwrĂłcenie zawartoci pliku certyfikatu klucza publicznego. Danych zawartych w tym pliku nie naley pobiera za kadym razem, gdy jakie podpisane danie wymaga weryfikacji. Naley raczej doda te dane do pamici podrcznej kluczy indeksowanej wedug wielu parametrĂłw przekazywanych do skryptu po stronie serwera. Zawarto tej pamici powinna by aktualizowana tylko w przypadku zmiany wspomnianych wartoci. Przekazywane parametry obejmuj: x xoauth_signature_publickey x oauth_consumer_key x oauth_signature_method

W kolejnym kroku skonstruowano nowy obiekt dania OAuth na podstawie parametrĂłw GET i POST przesanych w ramach dania protokou HTTP. Przekazane wartoci obejmuj parametry standardu OAuth i kontenera doczone do dania przez skrypt poredniczcy, ktĂłry wygenerowa to danie na poziomie kontenera. Obiekt dania OAuth zostanie uyty do weryfikacji przekazanego podpisu. Za pomoc klasy uzyskujcej certyfikat klucza publicznego mona zbudowa nowy podpis (na podstawie tego certyfikatu). Metoda check_signature(...) jest wywoywana w celu sprawdzenia przekazanego podpisu i zapisania wyniku weryfikacji. Zalenie od efektu weryfikacji skrypt zapisuje komunikat o sukcesie bd niepowodzeniu i odsya do skryptu po stronie klienta obiekt odpowiedzi w formacie JSON.

Weryfikacja podpisanego dania po stronie serwera (algorytm HMAC-SHA1) Jeli certyfikat klucza publicznego jest niedostpny dla kontenera, w ktĂłrym dziaa aplikacja, mona zastosowa alternatywny model weryfikacji podpisanych da po stronie serwera. Zamiast algorytmu RSA-SHA1 naley wĂłwczas uy algorytmu HMAC-SHA1. Zamiast posugiwa si certyfikatem klucza publicznego w roli metody weryfikacji dania, programista moe wygenerowa nowy obiekt dania OAuth na podstawie danych przesanych w ramach podpisanego dania: <?php require_once("OAuth.php"); $key = "TUTAJ NALE Y ZDEFINIOWA KLUCZ"; $secret = "TUTAJ NALE Y ZDEFINIOWA KLUCZ"; // Konstruuje nowy obiekt dania na podstawie biecego dania $request = OAuthRequest::from_request(null, null, $_REQUEST); $consumer = new OAuthConsumer($key, $secret, null); // inicjalizuje metod podpisu $sig_method = new OAuthSignatureMethod_HMAC_SHA1(); // sprawdza przekazany podpis OAuth $signature = $_GET['oauth_signature']; $valid_sig = $sig_method->check_signature( $request, $consumer,

Generowanie da AJAX i da dostpu do danych zewntrznych

Kup ksiÄ&#x2026;ĹźkÄ&#x2122;

_

219

PoleÄ&#x2021; ksiÄ&#x2026;ĹźkÄ&#x2122;


null, $signature ); // sprawdza, czy podpis zosta prawidowo zweryfikowany if (!$valid_sig) { // NIEPRAWIDOWY PODPIS — naley wygenerowa odpowiedni komunikat o bdzie } else{ // PRAWIDOWY PODPIS — program moe kontynuowa dziaanie } ?>

Kompletny kod ródowy tego przykadu jest dostpny pod adresem ftp://ftp.helion.pl/ przyklady/prapse.zip.

Podobnie jak w poprzednim przykadzie, powyszy kod zaczyna si od doczenia biblioteki OAuth jzyka PHP (dostpnej na stronie http://oauth.googlecode.com/svn/code/php/). Dziki temu mona utworzy wasny obiekt dania OAuth i obiekt odbiorcy (tzw. konsumenta), po czym sprawdzi przekazany podpis. Oprócz wspomnianej biblioteki w kodzie doczono odbiorc dania OAuth (obiekt odbiorcy dania OAuth zostanie skonstruowany na podstawie zmiennych reprezentujcych klucze). W kolejnym kroku naley skonstruowa obiekty dania OAuth i jego odbiorcy. W tym celu wywoujemy najpierw metod OAuthRequest::from_request(...), aby zbudowa obiekt dania. Za porednictwem pierwszych dwóch parametrów przekazano warto null, poniewa w tym przypadku wspomniane parametry nie s wymagane. Parametry te reprezentuj odpowiednio metod protokou HTTP i adres URL. Za porednictwem trzeciego parametru przekazano obiekt $_REQUEST zawierajcy wszystkie informacje na temat dania OAuth, które s niezbdne do skonstruowania nowego obiektu. W kolejnym kroku utworzono nowy obiekt OAuthConsumer, przekazujc na wejciu konstruktora klucz OAuth i klucz tajny. Trzecim parametrem tej metody jest adres URL wywoania zwrotnego dla procesu OAuth (w tym przypadku przekazano warto null). Kolejnym niezbdnym krokiem jest utworzenie nowego obiektu podpisu za pomoc wywoania konstruktora OAuthSignatureMethod_HMAC_SHA1(). Dziki temu bdzie moliwe porównywanie podpisu reprezentowanego przez ten obiekt z podpisem przekazanym w ramach autoryzowanego zdarzenia — na tej podstawie mona stwierdzi , czy drugi podpis jest prawidowy. Kolejny blok kodu rozpoczyna si od odczytania podpisu OAuth przekazanego w ramach autoryzowanego dania. Po odczytaniu tego podpisu nowy obiekt jest uywany do wywoania metody check_signature(...). Na wejciu tej metody (w roli listy parametrów) s przekazywane: obiekt dania OAuth i obiekt odbiorcy OAuth, warto tokenu (w tym przypadku jest niepotrzebna, std uyta warto null) i wreszcie podpis przekazany w ramach dania i bdcy przedmiotem porównania. Po wykonaniu wszystkich tych zada mona wreszcie uy zwróconej wartoci do sprawdzenia, czy weryfikacja podpisu przebiega pomylnie (tj. czy podpis przekazany w ramach dania by poprawny). Jeli tak, program moe kontynuowa przetwarzanie podpisanego dania. Jeli nie, kod powinien wywietli komunikat o bdzie.

220

_

Rozdzia 6. Aktywno uytkowników, publikowanie powiadomie aplikacji i danie danych w kontenerze OpenSocial

Kup książkę

Poleć książkę


Budowanie kompletnego gadetu Kompletny kod ródowy tego przykadu jest dostpny pod adresem ftp://ftp.helion.pl/ przyklady/prapse.zip.

Skoro dysponujemy ju wiedz niezbdn do praktycznego stosowania funkcji spoecznociowych gadetu, warto wykorzysta zdobyte umiejtnoci i opracowa prosty gadet. Gadet opracowany w tym podrozdziale bdzie wywietla strumie aktywnoci znajomych biecego uytkownika i zdjcia przypisane do ich profili oraz udostpnia uytkownikowi metod dodajc nowe powiadomienie do jego strumienia. Naley najpierw przygotowa kod znaczników nowego gadetu. W tym przykadzie bdzie potrzebna tylko lekka biblioteka osapi jzyka JavaScript, zatem naley j doda w budowanej specyfikacji. Programista musi te zdefiniowa widok, w którym bdzie adowany wze Content: <?xml version="1.0" encoding="UTF-8"?> <Module> <ModulePrefs title="Przykad dla rozdziau 6." description="Wywietla uzyskane informacje spoecznociowe i formularz dodawania aktualizacji"> <Require feature="opensocial-0.9"/> <Require feature="osapi" /> </ModulePrefs> <Content type="html" view="canvas"> <![CDATA[ <!-- tre widoku --> ]]> </Content> </Module>

Naley teraz umieci w wle Content odpowiednie style i kod jzyka znaczników. Na potrzeby tego przykadu zostan uyte style rozmieszczajce elementy na stronie oraz ustawiajce czcionk, kolory i odstpy. Kod jzyka znaczników zbuduje kontener podzielony na dwie kolumny. Lewa kolumna bdzie zawieraa ostatnie aktualizacje dotyczce znajomych uytkownika; prawa kolumna bdzie wywietlaa obrazy profili dwunastu sporód tych znajomych. Pod zdjciami znajduje si formularz, w którym uytkownik moe wpisa tytu, opis i adres URL przeznaczone do opublikowania w strumieniu aktywnoci: <style type="text/css"> div#gadget{ font:11px arial,helvetica,sans-serif; } div#gadget div.header{ background-color:#858585; color:#fff; font-weight:bold; font-size:12px; padding:5px; margin:5px; } div#gadget div#railRight{ width:360px; float:right; border:1px solid #858585; margin:0 0 15px 15px; padding:10px; background-color:#eaeaea; } div#gadget div#railRight div#friendLinks img{ border:0; margin:5px; width:50px; height:50px; }

Budowanie kompletnego gadetu

Kup książkę

_

221

Poleć książkę


div#gadget div#gadget div#gadget div#gadget

div#railRight form{ margin:10px 5px; } div#railRight form label{ font-weight:bold; } div#railRight form input{ width:300px; } div#updates{ margin-left:5px; margin-right:390px; } div#gadget div#updates div.header{ margin:0; } </style> <div id="gadget"> <div id="railRight"> <div class="header">Pozostae profile</div> <div id="friendLinks"></div> <div class="header">Wylij powiadomienie do znajomych</div> <form name="addActivity" onSubmit="return false;"> <label for="title">Tytu:</label><br /> <input type="text" name="title" id="title" /><br /> <label for="description">Opis:</label><br /> <input type="text" name="description" id="description" /><br /> <label for="url">Adres URL:</label><br /> <input type="text" name="url" id="url" /><br /><br /> <button onclick="socialController.addActivity();">Dodaj aktualizacj</button> </form> </div> <div id="updates"> <div class="header">Powiadomienia od Twoich znajomych</div> <div id="updateContent"></div> </div> </div>

Ostatnim skadnikiem tego gadetu jest warstwa kodu jzyka JavaScript. Sekcja skryptu obejmuje trzy funkcje odpowiedzialne za obsug pobierania i ustawiania danych spoecznociowych gadetu. Wspomniane funkcje s stosowane w roli konstruktorów róde danych spoecznociowych i mechanizmów promocji danych aplikacji wród znajomych biecego uytkownika: <script type="text/javascript"> var socialController = { // uzyskuje zdjcia (obrazy) przypisane do profili znajomych fetchProfile: function(insertID){ // generuje danie GET dotyczce profili dwunastu znajomych uytkownika osapi.people.get({userId: "@viewer", groupId: "@friends", count: 12}).execute(function(result){ var friends = result.list; var html = ''; // dla kadego znalezionego znajomego wywietla obraz bdcy linkiem do odpowiedniego profilu for (var i = 0; i < friends.length; i++){ html += "<a href='" + friends[i].profileUrl + "'><img src='" + friends[i].thumbnailUrl + "' /></a>"; } document.getElementById(insertID).innerHTML = html; }); }, // uzyskuje strumie aktualizacji dla znajomych fetchUpdates: function(insertID){ // generuje danie GET dotyczce strumieni aktywnoci trzydziestu znajomych uytkownika osapi.activities.get({userId: "@viewer", groupId: "@friends", count: 30}).execute(function(result){

222

_

Rozdzia 6. Aktywno uytkowników, publikowanie powiadomie aplikacji i danie danych w kontenerze OpenSocial

Kup książkę

Poleć książkę


var activities = result.list; var html = ''; // dla kadej czynnoci tworzy tytu bdcy linkiem do jej róda for (var i = 0; i < activities.length; i++){ html += "<p><a href='" + activities[i].url + "'>" + activities[i].title + "</a><br /></p>"; } document.getElementById(insertID).innerHTML = html; }); }, // umieszcza nowe powiadomienie w strumieniu aktywnoci biecego uytkownika addActivity: function(){ osapi.activities.create({userId: "@viewer", groupId: "@self", activity: { title: document.getElementById("title").value, body: document.getElementById("description").value, url: document.getElementById("url").value } }).execute(); } }; // inicjalizuje dania danych socialController.fetchProfile("friendLinks"); socialController.fetchUpdates("updateContent"); </script>

Funkcja fetchProfile() uzyskuje adresy URL i zdjcia przypisane do profili znajomych biecego uytkownika. Pobrane informacje s nastpnie uywane do utworzenia zbioru znaczników obrazów, które s umieszczane w kodzie jzyka HTML gadetu. Funkcja fetchUpdates() pobiera aktualizacje ze strumieni aktywnoci znajomych uytkownika, tworzy kod jzyka znaczników z tytuami w formie linków, po czym wstawia gotowy kod HTML-a do lewej kolumny aplikacji. Ostatnia funkcja, nazwana addActivity(), dodaje nowe powiadomienie do strumienia aktywnoci uytkownika (po wpisaniu tytuu, opisu i adresu URL w prawej kolumnie). Dwa ostatnie wiersze tego bloku kodu JavaScriptu wywouj funkcje pobierajce dane spoecznociowe i wypeniajce widok aplikacji (w czasie jej adowania). Podczas adowania gadetu zostan wywietlone wszystkie elementy spoecznociowe zdefiniowane w wzach div (patrz rysunek 6.6). Opisana aplikacja zawiera kilka podstawowych funkcji spoecznociowych, które mona z powodzeniem wykorzystywa do promocji wasnych aplikacji i dostosowywania ich dziaania do potrzeb uytkowników. Wystarczy zastosowa cho by cz sporód zaproponowanych rozwiza, aby lepiej odczytywa preferencje uytkowników, sprowokowa ich do promowania aplikacji w naszym imieniu i uwzgldni w aplikacji wykaz znajomych uytkownika w ramach serwisu spoecznociowego.

Budowanie kompletnego gadetu

Kup książkę

_

223

Poleć książkę


Rysunek 6.6. Przykadowy gadet dla rozdziau 6. ilustrujcy sposoby operowania na strumieniu aktywnoci i profilach spoecznociowych

224 _

Rozdzia 6. Aktywno uytkowników, publikowanie powiadomie aplikacji i danie danych w kontenerze OpenSocial

Kup książkę

Poleć książkę


Skorowidz

<meta>, 403 <os:ActivitiesRequest>, 232 <os:DataRequest>, 228 <os:HttpRequest>, 229 <os:PeopleRequest>, 229

A ActivitiesRequest, znacznik, 232, 233 Activity Streams, 18, 278, 421 czasowniki, 426, 427, 428, 429 opcjonalne atrybuty obiektu, 425 typy obiektów, 424, 426, 427 ActivityRequest, znacznik, 232 Address, obiekt, 184 addTab(), 130, 131 ADsafe, 18, 31, 312, 314 biblioteki, 328 doczanie zdarze, 327 GET, 321, 322 kontra Caja, 313 metody, 315 obiekt, 314, 315 obiekt pakietu, 321 q, metoda, 317 SET, 322, 323, 324, 325 wybór wzów DOM, 317 AJAX, 563 aktywno , 563 alignTabs(), 134 Apache, 558 instalacja w systemie Mac OS X, 559 instalacja w systemie Windows, 559, 560 Apache Shinding, Patrz Shinding aplikacje bdy, 40 gra spoecznociowa ze znajomymi, 46, 47, 48, 49, 50 informacyjne, 45

kopiujce widoki, 43 nierentowno , 44 odbiorcy, 57 promocja, 200 przenone z animacjami, 41 sprzeday produktów, 50, 51, 52 uwzgldniajce pooenie uytkownika, 53, 54, 55, 56 zbyt duo informacji, 43 App Engine, 562 instalacja, 562 ataki czowiek porodku, 482 metod powtarzania, 482 odgadywanie hase na bieco, 481 pobieranie plików bez wiedzy uytkownika, 31 podsuch, 482 podszywanie si pod mechanizm weryfikacji, 482 przechwytywanie sesji, 482 przekierowanie uytkowników bez ich zgody, 290 rejestrowanie naciskanych klawiszy, 291, 293 ledzenie historii przegldarki, 290, 291 wykonanie kodu za pomoc document.createElement, 291 XSS, 30 Attribute Exchange, 471, 473 adresy, 473 data urodzenia, 474 komunikatory, 476 nazwisko, 476, 477 obrazy, 475 poczta elektroniczna, 475 pozdrowienia audio i wideo, 474 pozostae dane osobowe i preferencje uytkownika, 478, 479 praca, 478 telefon, 477 witryny internetowe, 478 AX, Patrz Attribute Exchange

567

Kup książkę

Poleć książkę


B basic authentication, Patrz uwierzytelnianie podstawowe byskawiczny rozwój, 563 BodyType, obiekt, 185 bunch object, Patrz obiekt pakietu

C Caja, 18, 31, 151, 288, 289, 306 dodawanie do gadetu, 303 konfiguracja, 293, 294 kontra ADsafe, 313 uruchamianie z poziomu aplikacji internetowej, 301 uruchamianie z poziomu wiersza polece, 295 wymagania, 293 zabezpieczanie kodu HTML-a i JavaScriptu, 295 zmiana formatu kodu, 300 Caja Playground, 306 Content, sekcje, 103, 105, 106, 110 Context, zmienna, 248 createDismissibleMessage(), 123, 126 cross-site scripting, 30 ctype, parametr, 439, 440 Cur, zmienna, 249

D data pipelining, Patrz potokowe przesyanie danych DataRequest, znacznik, 228, 229 DELETE, 554, 555 displayTabs(), 134 document.createElement, 291 DOM, obiekt, 315, 317 metody, 316 drive-by download, 31

E Email, obiekt, 185 entity relationships, Patrz relacje z podmiotami Enum, obiekt, 186 enum, typ danych, 103

F Facebook, 66, 67, 69 graf powiza spoecznociowych, 72, 75 implementacja Open Graph, 410, 411 kanay komunikacji, 73 568 _

OAuth 2, 381, 382, 383 przenoszenie aplikacji do kontenera OpenSocial, 152 finger, polecenie, 429 flash, biblioteka, 118 FQL, 153

G gadet, 563 animacja Flash, 118, 119 dodawanie Caja, 303 dynamiczne ustawianie wysokoci widoku, 117 typy komunikatów, 120 tytu, 129 wywietlanie komunikatów, 119, 120, 121, 122, 123, 124, 125, 126 wywietlanie przy uyciu Shinding, 144 zakadki, 130, 131, 132, 133 zapisywanie stanu z preferencjami uytkownika, 127, 128 GET, 551 getBool(), 128 getCallback(), 135 getDataSet(), 234, 235 getIndex(), 136 getInt(), 128 getName(), 136 getNameContainer(), 136 getSelectedTab(), 134, 135 getString(), 128 getTabs(), 134, 135 Google, 68, 69 graf powiza spoecznociowych, 59, 60, 61, 72, 563

H hAtom, 556 hCalendar, 556 hCard, 556 HEAD, 555 hMedia, 557 hNews, 557 hProduct, 557 hRecipe, 557 hResume, 557 hReview, 557 HTTP, kody odpowiedzi, 549, 550 http, obiekt, 210, 213, 214 HttpRequest, znacznik, 229, 230 hunter selector, Patrz selektor myliwego

Skorowidz

Kup książkę

Poleć książkę


I iframe, 29, 30, 151, 152, 153, 288 IRI, 563

J Janrain OpenID, 497 instalacja, 497 JavaScript dwuetapowa autoryzacja OAuth, 351, 352, 353 interfejs API, 265, 266 umieszczanie zdarze w znacznikach, 309 wykrywanie niebezpiecznych elementów, 305 JSLint, 305, 306

K kanay komunikacji, 73 klaster jeden do wielu, 61 komunikat czasowy, 120, 122, 123 statyczny, 120, 121, 122 z moliwoci zamknicia, 120, 121 kontener, 21, 22, 23, 27, 28, 563 aktualizacje, 28 czas pracy, 28 profil uytkownika, 23 strumie aktywnoci, 23, 24, 25 uszkodzone funkcje, 28 zmiany obsugiwanych funkcji, 28 znajomi i powizania, 23, 24

L lokalizacja, 272, 273, 275 LRDD, 564

M message bundle, Patrz pakiety komunikatów metadane, 403 mikroformat, 556, 557 minimessage, biblioteka, 119 mmlib_table, 126 mmlib_xlink, 127 model grupowy, 67, 68, 69, 70 opt-in, 63, 64 opt-out, 64 pocze, 66, 67 ledzenia, 65, 66

ModulePrefs, wze, 97, 98 Icon, element, 99 Link, element, 100, 101 Locale, element, 99, 100 Optional, element, 98 Preload, element, 98, 99 Require, element, 98 My, zmienna, 249, 250

N Name, obiekt, 187 newDataRequest(), 189, 190 newFetchPersonRequest(), 190 NIST, poziomy pewnoci, 481

O OAuth, 18, 32, 337, 340, 341, 348, 349 OAuth 1.0a autoryzacja dwuetapowa, 350, 351, 352 autoryzacja trzyetapowa, 350, 354 brakujce lub powtarzajce si parametry, 369 diagnozowanie bdów, 369 dwukrotne kodowanie parametrów podpisu, 370 nieprawidowa metoda podpisywania da, 371 nieprawidowe punkty kocowe URI, 370, 371 pobranie tokenu dania, 343, 344 pobranie zweryfikowanego przez uytkownika tokenu dania, 345, 346 przepyw pracy, 341 utrata wanoci przez token, 372 uzyskanie klucza konsumenta i klucza tajnego, 341, 342 wymiana zweryfikowanego tokenu dania na token dostpu, 346, 347 OAuth 2, 373 diagnozowanie bdów, 396 Facebook, 381, 382, 383 komunikaty o bdach, 398, 399 parametry komunikatów o bdach, 398 przepyw pracy, 373 reagowanie na kody bdów, 397 ledzenie wanoci tokenu dostpu, 397 weryfikacja danych dania, 396 oauth_authorization_expires_in, 348 oauth_callback, 344 oauth_callback_confirmed, 344 oauth_consumer_key, 344, 347 oauth_expires_in, 344, 348 oauth_nonce, 344, 347

Skorowidz

Kup książkę

_ 569

Poleć książkę


oauth_signature, 344, 347 oauth_signature_method, 344, 347 oauth_timestamp, 344 oauth_token, 344, 347 oauth_token_secret, 344 oauth_verifier, 347 oauth_version, 344, 347 obiekt pakietu, 321 obiekt spoecznociowy, 564 OExchange, 18, 433 dziaanie, 433, 434 implementacja, 435, 437, 438 zastosowania, 434, 435 one-to-few cluster, Patrz klaster jeden do wielu Open Graph, 18, 280, 402, 403 dane audio, 408 dane geolokalizacyjne, 405 dane kontaktowe, 406 dane wideo, 407 dziaanie, 403, 404 implementacja, 404 implementacja w serwisie Facebook, 410, 411 wady, 419, 420 open source, 26, 547, 548 wady, 548 zalety, 547 OpenID, 18, 32, 461, 462, 463, 510 Attribute Exchange, Patrz Attribute Exchange bdy, 508, 509 decentralizacja, 462 dostawcy, 469 hybryda z OAuth, 511, 512, 514, 515, 516, 517, 519, 520 implementacja, 484 odkrywanie domen, 469, 471 Provider Authentication Policy Extension, Patrz Provider Authentication Policy Extension rozszerzenia, 471, 483 Simple Registration, Patrz Simple Registration uwierzytelnianie, 464 wady, 514 zalety, 514 OpenLike, 75, 76 integracja widgetu, 75 OpenSocial, 18, 145 Content, sekcje, 103, 105, 106, 110 jzyk znaczników, 270, 271 kontener gadetów spoecznociowych, 148, 149, 150 kontener OpenSocial, 148, 150 kontenery aplikacji zgodne ze standardem, 146 ModulePrefs, wze, 97, 98

570

_

podstawowy kontener gadetów, 147, 148 przyszo , 276 REST, 275 serwer podstawowego interfejsu API, 147, 148 serwer spoecznociowego interfejsu API, 149 serwer spoecznociowych elementów API, 147 specyfikacja, 147 specyfikacja w formacie XML, 96, 97 szablony, 240, 241, 243, 244, 245, 246 UserPref, wze, 97, 101, 102, 103 opensocial.newActivity(), 205 opensocial.newMediaItem(), 204 opensocial.Person.Field.ABOUT_ME, 160 opensocial.Person.Field.ACTIVITIES, 160 opensocial.Person.Field.ADDRESSES, 161 opensocial.Person.Field.AGE, 161 opensocial.Person.Field.BODY_TYPE, 162 opensocial.Person.Field.BOOKS, 162 opensocial.Person.Field.CARS, 163 opensocial.Person.Field.CHILDREN, 163 opensocial.Person.Field.CURRENT_LOCATION, 163 opensocial.Person.Field.DATE_OF_BIRTH, 164 opensocial.Person.Field.DRINKER, 164 opensocial.Person.Field.EMAILS, 165 opensocial.Person.Field.ETHNICITY, 165 opensocial.Person.Field.FASHION, 166 opensocial.Person.Field.FOOD, 166 opensocial.Person.Field.GENDER, 166 opensocial.Person.Field.HAPPIEST_WHEN, 167 opensocial.Person.Field.HAS_APP, 167 opensocial.Person.Field.HEROES, 168 opensocial.Person.Field.HUMOR, 168 opensocial.Person.Field.ID, 168 opensocial.Person.Field.INTERESTS, 169 opensocial.Person.Field.JOB_INTERESTS, 169 opensocial.Person.Field.JOBS, 170 opensocial.Person.Field.LANGUAGES_SPOKEN, 170 opensocial.Person.Field.LIVING_ARRANGEMENT, 171 opensocial.Person.Field.LOOKING_FOR, 171 opensocial.Person.Field.MOVIES, 172 opensocial.Person.Field.MUSIC, 172 opensocial.Person.Field.NAME, 172 opensocial.Person.Field.NETWORK_PRESENCE, 173 opensocial.Person.Field.NICKNAME, 173 opensocial.Person.Field.PETS, 174 opensocial.Person.Field.PHONE_NUMBERS, 174 opensocial.Person.Field.POLITICAL_VIEWS, 175 opensocial.Person.Field.PROFILE_SONG, 175 opensocial.Person.Field.PROFILE_URL, 175

Skorowidz

Kup książkę

Poleć książkę


opensocial.Person.Field.PROFILE_VIDEO, 176 opensocial.Person.Field.QUOTES, 176 opensocial.Person.Field.RELATIONSHIP_STATUS, 177 opensocial.Person.Field.RELIGION, 177 opensocial.Person.Field.ROMANCE, 177 opensocial.Person.Field.SCARED_OF, 178 opensocial.Person.Field.SCHOOLS, 178 opensocial.Person.Field.SEXUAL_ORIENTATION, 179 opensocial.Person.Field.SMOKER, 179 opensocial.Person.Field.SPORTS, 180 opensocial.Person.Field.STATUS, 180 opensocial.Person.Field.TAGS, 180 opensocial.Person.Field.THUMBNAIL_URL, 181 opensocial.Person.Field.TIME_ZONE, 181 opensocial.Person.Field.TURN_OFFS, 182 opensocial.Person.Field.TURN_ONS, 182 opensocial.Person.Field.TV_SHOWS, 183 opensocial.Person.Field.URLS, 183 opensocial.template, 266 opensocial.template.getTemplate(), 266 opensocial.template.process(), 267 opensocial.template.Template.render(), 267 opensocial.template.Template.renderInto(), 268 opensocial_app_id, 215 opensocial_app_url, 215 opensocial_instance_id, 215 opensocial_owner_id, 215 opensocial_viewer_id, 215 operatory porównywania, 248 Organization, obiekt, 187, 188 os:Badge, 270, 272 os:Get, 270, 272 os:Html, 260 os:If, 252 os:Name, 270, 271 os:PeopleSelector, 270, 271, 272 os:Render, 260, 261, 262 os:Repeat, 254 osapi.activities.create, 202, 203 osapi.people.get, 155, 192 osapi.people.getOwner, 158 osapi.people.getOwnerFriends, 159 osapi.people.getViewer, 156, 157, 191 osapi.people.getViewerFriends, 157 OSML, Patrz OpenSocial, jzyk znaczników OwnerRequest, znacznik, 231, 232

P pakiety komunikatów, 273, 274, 275 PAPE, Patrz Provider Authentication Policy Extension

parametry dynamiczne, 238, 239 Partuza, 18, 87, 88, 564 instalacja w systemie Mac OS X, 88, 89, 90 instalacja w systemie Windows, 91, 94, 95, 96 instalacja, testowanie, 96 wymagania, 88 PeopleRequest, znacznik, 229, 230, 231 Person, obiekt, 154 metody, 155 pola, 160 rozszerzanie, 183 ptle, 253, 254, 256, 257 zagniedone, 255 Phone, obiekt, 188, 189 PHP budowanie subskrybenta, 450, 451, 452 budowanie wydawcy, 446 OAuth 1.0a, 355, 357, 359, 360, 361, 362 OAuth 2, 383, 384, 385, 386 OpenID, 485, 486, 487, 488, 489, 490, 492, 493, 494, 495, 496 uwierzytelnianie hybrydowe, 522, 523, 525, 527, 528, 529, 530, 531, 532, 533 wze Open Graph, 413, 414, 415, 416 PHP, rodowisko, 560 instalacja w systemie Mac OS X, 560, 561 instalacja w systemie Windows, 561 phpMyAdmin, 92, 93, 94 POST, 552, 553 potokowe przesyanie danych, 225, 226 czenie z szablonami, 258 obsuga bdów, 237 po stronie klienta, 234 powiadomienia, generowanie, 202 bezporednie, 205, 206, 207 pasywne, 205, 207, 208 tre multimedialna, 204, 205 powizanie, 564 poziomy pewnoci NIST, 481 Provider Authentication Policy Extension, 471, 479 metody uwierzytelniania, 480 przegldajcy, 564 PubSubHubbub, 18, 278, 279, 440 dziaanie, 441, 442, 443 zalety, 443, 444 PUT, 553, 554 putDataSet(), 235 Python budowanie subskrybenta, 452, 454 budowanie wydawcy, 448 konfiguracja rodowiska, 562 OAuth 1.0a, 363, 364, 365, 366, 368, 369 OAuth 2, 387, 388, 389, 390, 392

Skorowidz

Kup książkę

_

571

Poleć książkę


Python OpenID, 497, 498, 499, 500, 501, 502, 503, 504, 505, 507 uwierzytelnianie hybrydowe, 533, 534, 535, 536, 537, 538, 539, 540, 542, 543, 545 wze Open Graph, 416, 418, 419

R registerListener(), 236 relacje bezporednie, 60, 61 porednie, 61 z podmiotami, 71 rel-directory, 557 rel-enclosure, 557 rel-license, 557 rel-nofollow, 557 rel-tag, 557 removeTab(), 135 renderOption, opcja, 300 REST, 551, 564 rozproszone frameworki internetowe, 277, 564 RPC, 564

S Salmon, 18, 279, 455 dziaanie, 455, 456 implementacja, 459 ochrona przed spamem, 458 same-origin policy, Patrz zasada tego samego pochodzenia selektor atrybutów, 318, 319 selektor myliwego, 317 selektor precyzyjnego wyboru, 318 selektor stanu, 319, 320 selektor waciwoci, 318 semantyka, 564 set(), 128 setSelectedTab(), 135 setTitle(), 129, 130 Shinding, 18, 79, 80, 565 instalacja w systemie Mac OS X, 81, 82, 83 instalacja w systemie Windows, 84, 85, 86 instalacja, testowanie, 86, 87 konfiguracja, 80 rozszerzanie o wasne biblioteki JavaScript, 136, 137, 138 wywietlanie gadetu, 144 sie semantyczna, 556, 564 sie spoecznociowa, 565

572

_

Simple Registration, 471, 472 pola, 472 SREG, Patrz Simple Registration strumie aktywnoci, 200, 201 personalizacja aplikacji, 201 promocja aplikacji, 200 umieszczanie komunikatu, 202, 203 Subversion, 557, 558 instalacja w systemie Mac OS X, 558 instalacja w systemie Windows, 558 SVN, 557 swapTabs(), 135 szablony, 240, 241, 245, 246 biblioteki, 262, 263 czenie z potokowym przesyaniem danych, 258 wywietlanie, 243, 244, 245

T TabSet, obiekt, 134 tokeny, 340 Top, zmienna, 250 Twitter, 65, 66 OAuth, 348, 349

U uprawnienia, 37, 38 dostpu do danych, 393, 394 dostpu do stron, 394 publikacji, 394 Url, obiekt, 189 UserPref, wze, 97, 101, 102, 103 UserPrefs, obiekt, 239 usugi sieciowe, 549 uwierzytelnianie podstawowe, 337, 338, 339 wady, 339, 340 uytkownicy lista wyboru, 271 odznaka, 272 podzia na klastry, 62, 63 strumie aktywnoci, 200, 201 udostpnianie prywatnych danych, 63, 64 uzyskiwanie profilu, 189, 191 wywietlanie nazwiska, 271 znajomi, 192

V ViewerRequest, znacznik, 231, 232 ViewParams, obiekt, 239

Skorowidz

Kup książkę

Poleć książkę


W WebFinger, 18, 429, 430 geneza, 429, 430 implementacja, 430, 432 wady, 432, 433 widoki aplikacji, 32 domowy, 33, 34 domylny, 36 duy, 33 kanwy, 35, 36 may, 32, 34 niedopracowanie, 42 profilu, 34, 35 waciciel, 565 wyraenia, 247 wyraenia warunkowe, 250, 251, 252

X XFN, 557 xFolk, 557 XHTML Friends Network, 557 xoauth_public_key, 215 XOXO, 557 XRD, deskryptor, 436 XRDS, 565 XRI, 565 XSS, ataki, 30

Y Yahoo!, 68, 69 OAuth, 348, 349, 350 YAML, 565 YAP, 565 YUI 2.8, biblioteka, 308, 309

Z zabezpieczenia, 29, 31 zasada tego samego pochodzenia, 30, 550 omijanie wymaga, 551 zmienne specjalne, 248 Context, 248 Cur, 249 My, 249, 250 Top, 250 znaczniki semantyczne, 556 zrównowaone publikowanie powiadomie, 209

dania danych, rodzaje, 228 danie bez nadzoru, 566

Skorowidz

Kup książkę

_

573

Poleć książkę


574

_

Skorowidz

Kup książkę

Poleć książkę



Programowanie aplikacji na serwisy spo eczno ciowe