Arról már szó esett a tegnapi blogbejegyzésben, hogy hogyan néz ki az iWiW alkalmazások váza, de arról még nem, hogy mit tud csinálni egy alkalmazás, milyen információkhoz fér hozzá, milyen egyéb technikai lehetőségei vannak.
Ha OpenSocial alkalmazást szeretnétek írni az iWiW keretein belül, a legfontosabb az OpenSocial dokumentáció könyvjelzőzése legyen. A jelenlegi aktuális változat melyet az iWiW is megvalósít, a 0.8.1-es verzió, az ehhez kapcsolódó írásokat és referenciákat érdemes az elejétől a végéig kiolvasni ha szeretnénk tisztában lenni a lehetőségekkel. Az iWiW célja a teljes 0.8.1-es verzió megvalósítása, most egy kivonatot szedtem össze a lehetőségekből. A részletekről szó esik majd még, de egy pár példán keresztül már most be szeretném mutatni az OpenSocial API használatát.
A főbb lehetőségek:
- kapcsolati háló, profil információk lekérdezése
- adatok tárolása és lekérdezése külső szerver nélkül
- kommunikáció a külvilággal
- történések küldése
Egy alkalmazás esetén nagyon fontos információ, hogy ki az OWNER és a VIEWER, vagyis ki a tulajdonos, és ki a néző. A legcélszerűbb az, hogy ha egy olyan példát képzelünk el, amikor egy ismerős/ismeretlen profiloldalán egy alkalmazást nézünk. A tulajdonos mindig az, aki feltelepítette az adott oldalra az alkalmazást, míg a néző az, aki megnézi. Ha a saját profil oldalunkon vagyunk és ott nézegetjük az alkalmazásokat, akkor mind a két szerepet mi vesszük fel, vagyis a tulajdonos és a néző is mi leszünk. Ebből sokminden következik, például lehetőség van arra hogy egy profiloldalra telepített alkalmazás mást mutasson a tulajdonosnak, mint kifele a látogatóknak, és még a látogatóknak is személyre szabhatja az üzenetet. Arra persze érdemes figyelni, hogy érthető legyen a különbség.
Az alkalmazás persze nem csak ezt a két információt éri el, hanem le tudja kérdezni a tulajdonos és a néző profil adatait (nem az összes profiladatot, csak néhányat), és az ő ismerőseiket. Ezek a lekérdezések úgynevezett aszinkron kérések a szerver felé, avagy egy függvényhívással elindítjuk a lekérdezést, és a válasz majd valamikor megérkezik. Ennek érdekében egy függvényt is át kell adnunk paraméternek ilyenkor, ami az adatok megérkezéskor fut le. Nézzünk erre egy rövid példakódot:
var App = {
// ezt a függvényt hívjuk meg az alkalmazás betöltődésekor
init: function() {
// egy adatlekérés objektumot hozunk létre
var req = opensocial.newDataRequest();
// a kéréshez hozzáadjuk az alkalmazás tulajdonosának lekérdezését, a választ
// "owner" néven fogjuk visszakapni
req.add(req.newFetchPersonRequest("OWNER"), "owner");
// egy csoportot definiálunk: az alkalmazás tulajdonosának az ismerősei
var usergroup = opensocial.newIdSpec({"userId": "OWNER", "groupId": "FRIENDS"});
// a kéréshez hozzáadjuk az előbb definiált csoport lekérdezését, a választ
// "ownerfriends" néven fogjuk visszakapni
req.add(req.newFetchPeopleRequest(usergroup, {}), "ownerfriends");
// elküldjük a lekérdezést, a függvény paramétere egy másik függvény,
// ami akkor kerül meghívásra, amikor a szervertől megérkezik a válasz
req.send(App.displayContent);
},
// ezt a függvényt hívjuk meg, amikor a szerverről megérkeznek az adatok
displayContent: function(data) {
var owner = data.get("owner").getData();
// például owner.getDisplayName()
var friends = data.get("ownerfriends").getData();
friends.each(function(friend) {
// például friend.getDisplayName()
});
}
};
Az alkalmazások jellemzően futásuk során információkat, adatokat tárolnak el a felhasználók tevékenysége kapcsán. Az OpenSocial API, és az iWiW megvalósítása erre lehetőséget kínál, vagyis nem feltétlenül kell külső szerverhez folyamodnunk ha adatokat szeretnénk letárolni. Az éppen aktuális limitációk Wiki oldalunkon elolvashatóak: kvóták, limitációk, jelenleg az alkalmazás felhasználónként 10 darab kulcs/érték párt tud letárolni, az értékek maximális hossza 500 karakter lehet. Az alkalmazás az éppen aktuális felhasználó (néző) adatait tudja írni, és bármely más felhasználóét melyekhez hozzáfér (tulajdonos és tulajdonos ismerősei, néző és néző ismerősei) korlátlanul olvasni. Kiemelten figyeljünk rá, hogy érzékeny információt az adatok ilyen jellegű publikussága miatt nem szabad letárolnunk! Az adatok tárolása és lekérdezése a következőképpen működik:
var App = {
// ezt a függvényt hívjuk meg az alkalmazás betöltődésekor
init: function() {
// egy adatlekérés objektumot hozunk létre
var req = opensocial.newDataRequest();
// a kéréshez hozzáadjuk az alkalmazás tulajdonosának lekérdezését, a választ
// "owner" néven fogjuk visszakapni
req.add(req.newFetchPersonRequest("OWNER"), "owner");
// egy csoportot definiálunk: az alkalmazás tulajdonosát (egyedül)
var ownergroup = opensocial.newIdSpec({'userId': 'OWNER', 'groupId': 'SELF'});
// a kéréshez hozzáadjuk a tulajdonos felhasználó utolsó látogatási időpontjának
// lekérdezését, a választ "ownerData" néven fogjuk visszakapni
req.add(req.newFetchPersonAppDataRequest(ownergroup, ['lastVisit']), "ownerData");
// a kéréshez hozzáadjuk a néző felhasználó utolsó látogatási időpontjának mentését
req.add(req.newUpdatePersonAppDataRequest("VIEWER", "lastVisit", new Date().getTime()));
// elküldjük a lekérdezést, a függvény paramétere egy másik függvény,
// ami akkor kerül meghívásra, amikor a szervertől megérkezik a válasz
req.send(App.responseReady);
},
// ezt a függvényt hívjuk meg, amikor a szerverről megérkeznek az adatok
responseReady: function(data) {
// az "owner"-ből lekérjük az alkalmazás tulajdonos azonosítóját
var ownerId = data.get("owner").getData().getId();
// az "ownerData"-ből pedig lekérdezzük az adatait (lastVisit)
var ownerData = data.get("ownerData").getData();
// utolsó látogatás időpontja ezután: ownerData[ownerId].lastVisit
}
};
// az alkalmazás betöltődésekor meghívandó függvényt adjuk át, hasonlít a
// weblapok onload függvényéhez
gadgets.util.registerOnLoadHandler(App.init);
Könnyen előfordulhat, hogy ez a tíz kulcs/érték pár, vagy az 500 karakteres limitáció nem lesz elég alkalmazásunknak. Ekkor külső szerveren történő adattároláshoz folyamodhatunk, ahol a szerverünk, szervereink korlátozhatják a tárolható mennyiséget. Ugyanígy külső adathoz folyamodhatunk akár saját, akár más szolgáltatások API-jait használva. Erre a gadgets.io.makeRequest függvényhívás szolgál. Az OpenSocial lehetőséget biztosít arra is, hogy a kimenő lekérdezésekkor a külső szerver azonosítani tudja a felhasználót biztonságosan, hiszen nem mindegy, hogy valaki ismerve a külső API elérhetőségét, milyen kéréseket indít az adott szerver felé, megpróbálva lekérdezni adatokat. A kérés indításakor egy paraméter, hogy az alkalmazás által indított lekérdezést az iWiW “aláírja” és átadja a felhasználó azonosítóját is. Ez az úgynevezett oAuth hitelesítés, a szerver oldali feldolgozásáról már írtunk a Wikiben: SignedRequest és oAuth. Az alkalmazásunkból így indíthatunk kéréseket (egyelőre az oAuth lehetőségeket nem bemutatva):
var App = {
// ezt a függvényt hívjuk meg az alkalmazás betöltődésekor
init: function() {
gadgets.io.makeRequest("http://feeds.delicious.com/v2/rss/popular/opensocial?count=10", App.responseReady, {
"CONTENT_TYPE": "FEED",
"NUM_ENTRIES": 10
});
},
// ezt a függvényt hívjuk meg, amikor a szerverről megérkeznek az adatok
responseReady: function(data) {
for(var i=0; i<data.data.Entry.length;i++) {
var item = data.data.Entry[i];
// például item.Title, item.Link
}
}
};
// az alkalmazás betöltődésekor meghívandó függvényt adjuk át, hasonlít a
// weblapok onload függvényéhez
gadgets.util.registerOnLoadHandler(App.init);
Végül, de nem utolsó sorban a történések küldése amiről szót ejtenék, erre az opensocial.newActivity szolgál. Mind az alkalmazások, mind pedig az iWiW alapszolgáltatásai a jövőben ilyen üzeneteket fognak küldeni, melyek a felhasználó kezdőlapján jelennek meg kivonatos formában, illetve egy külön oldalon részleteikben. A történések limitációit szintén a kvóták, limitációk oldalon lehet olvasni, egy alkalmazás felhasználónként 4 üzenetet tud kiküldeni naponta.
var activity = opensocial.newActivity({
"title": "Az alkalmazás üzenete"
});
opensocial.requestCreateActivity(activity, opensocial.CreateActivityPriority.HIGH);
Ennél az aktivitások sokkal többet tudnak, például lehet üzenet sablonokat definiálni, és paramétereket átadni, de az iWiW egyelőre a “title” és a “body” mezőket támogatja csak.
Legutóbbi hozzászólások