Linkek a történésekben, értesítésekben

Több helyen is leírtuk már, de nem részleteztük: a történésekben és az értesítésekben használhattok linkeket is. Megkötés, hogy ezek csak az iWiWen belülre mutathatnak, külső oldalra nem. A linkek előállítása nem feltétlenül triviális feladat, főként ha ki szeretnétek használni azt a lehetőséget, hogy az alkalmazásoknak paraméterek is átadhatók. Az alábbiakban egy példakódot is közzéteszünk, mely segítségével helyes linkek állíthatóak elő könnyedén.

Ha az iWiWen belülre szeretnénk linkelni, akkor célszerű relatív URL-eket használni. A rendszer ezeket, továbbá a http://iwiw.hu/ és http://sandbox.iwiw.hu/ címmel kezdődő linkeket engedi át. Ez utóbbi abszolút URL-ek használatát nem javasoljuk, mivel egy tévesen meghatározott domainből csak problémák lehetnek.

Leszámítva a profil oldalakra történő linkelést, egy történésben, értesítésben főként magára az alkalmazásra szeretnénk linkelni: ez egy /app/12345678 kinézetű URL-t jelent. A link egyébként /app/{appId}{-prefix|/|userId}{-prefix|?view-params=|viewParams} formátumú, amiből talán a legérdekesebb számotokra a viewParams paraméter. Ennek értéke JSON formátumban adható át, segítségével paraméterezhetjük az alkalmazást. Bár egy linket ennek ismeretében könnyedén előállíhatunk már, hogy még egyszerűbb legyen, egy függvényt is közzéteszünk:

if (typeof IWIW == 'undefined') { var IWIW = {}; }
IWIW.getApplicationLink = function(parameters) {
 return gadgets.views.bind(gadgets.config.get('views')['canvas'].urlTemplate, {
   appId: document.location.host.match(/(\d+)\./)[1],
   viewParams: gadgets.json.stringify(parameters)
 });
}

A függvény nem csinál mást, mint veszi a fentebb is bemutatott URL sablont, s behelyettesíti az alkalmazás azonosítóját (mely a Homokozóban és az éles iWiW-en ugyanaz lesz) és az átadandó paramétereket a gadgets.views.bind függvény segítségével. Az alkalmazás azonosítóját az aktuális URL-ből veszi, a sablont pedig egy OpenSocial konfigurációs változóból olvassa ki.

A használata elég egyszerű:

alert(IWIW.getApplicationLink({'aaa':'bbb'}));

A függvény persze okosítható, és átadható hogy a canvas vagy profil nézethez szeretnénk URL-t, vagy hogy melyik felhasználónak a nézetére szeretnénk linkelni, innen már talán nem nehéz ezeket implementálni, ha szükség van rá.

Ahogy korábban is írtunk már róla a requestNavigateTo bemutatása kapcsán, az átadott paramétereket a következőképpen olvashatjuk ki az alkalmazásban:

var params = gadgets.views.getParams();

Értesítés küldésnél például az alábbi formában használható a linkelés az üzenet BODY-jában, amennyiben egy adott tartalomra szeretnénk linkelni az alkalmazáson belül:

// felhasználó objektum, pl. ismerős lekérdezésből (newFetchPeopleRequest)
var user = ...;
// felhasználó keresztneve
var userName = user.getField(opensocial.Person.Field.NAME).getField(opensocial.Name.Field.GIVEN_NAME);
// felhasználó (pl. ismerős) lekérdezéséből jövő profil URL
var userProfile = user.getField(opensocial.Person.Field.PROFILE_URL);
// link az alkalmazásra, példaként egy contentId paraméterrel
var appLink = IWIW.getApplicationLink({'contentID': 87654321});
// az adott tartalom címe
var contentTitle = 'Boys Don\'t Cry';
// üzenet BODY összeállítása
var messageBody =
  '<a href="' + gadgets.utils.escapeString(userLink)+'">' +
  gadgets.utils.escapeString(userName) + '</a> ajánlja kedvencét: ' +
  '<a href="' + gadgets.utils.escapeString(appLink)+'">' +
  gadgets.utils.escapeString(contentTitle) + '</a>. Neked hogy tetszik?';

Figyeljünk rá, hogy csakis valid XHTML tartalmat lehet az üzenetben elküldeni. Tekintettel arra, hogy a felhasználó nevében szerepelhet HTML-nek nézhető tartalom (kisebb/nagyobb jelek, & karakter), illetve ez igaz lehet a linkekre, a linkelt tartalom címére is, ezért ezeket mindenképpen megfelelően kódolni kell!

10 megjegyzés - “Linkek a történésekben, értesítésekben”


  1. 1 Gábor

    Szuper bejegyzés, hiánypótló!

    Viszont a gadgets.views.requestNavigateTo(gadgets.views.getSupportedViews()['profile'],
    {}, AZONOSÍTÓ[pl. sandbox.iwiw.hu:n9yQxh21]); még mindig hibás, az mikor lesz javítva?

  2. 2 Daniel Fazekas

    Az ellen lehet valamit tenni, hogy a view paraméterek elvesznek, amennyiben olyasvalaki kattint a linkre, akinek még nem volt telepítve az alkalmazás, azaz először át kell esnie az addapplication engedélyezési folyamaton?

  3. 3 devblogger

    Gábor: rajta vagyunk a hiba javításán.

  4. 4 devblogger

    Daniel: ez egy ismert hiba, de valószínűleg indulásig nem lesz javítva, csak valamikor utána.

  5. 5 jilo

    köszönöm

  6. 6 zoli

    gadgets.utils.escapeString helyett gadgets.util.escapeString -et kell írni

  7. 7 zoli

    HELP!
    a relatív útvonalat helyesen visszakapom:
    /app/XXXXXXXXX?view-params={”aaa”:”bbb”}

    linkre kattintáskor viszont az alábbi urlre jutok:
    http://XXXXXXXXX.app.sandbox.iwiw.hu/app/XXXXXXXXX?view-params={%22aaa%22:%22bbb%22}
    ami 404 -et dob,

    viszont ez kellene helyette:
    http://sandbox.iwiw.hu/app/XXXXXXXXX?view-params={%22aaa%22:%22bbb%22}

    mi lehet a gond?

  8. 8 Szekeres Géza

    Hali,

    Profil oldalnak hogyan lehet paramétereket passzolni?
    Próbáltam a http://sandbox.iwiw.hu/pages/user/userdata.jsp?userID=14279276&view-params={%22getpage%22%3A%22oc_tab3%22} de semmi..

    Meg arra gondoltam hogy megoldható lenne profil oldalon az app elé egy taget berakni.. Így egyből odaugorhatnánk.

    Köszi,
    g

  9. 9 Szekeres Géza

    Bocsi, levágta az a html tagokat az előző commentem. Szóval egy -re gondoltam

  10. 10 Szekeres Géza

    na.. csak nem engedi…
    tehát egy ANCHOR tag NAME paraméterrel ahol NAME=APPID

Hagyj egy megjegyzést