Thursday, May 5, 2011

GAE ve Facebook Connect

GAE uygulamamizdan Facebook Connect iliskisini nasil kurariz? Java baglaminda bu konudan bahsettigimizde xd_receiver.htm sayfasini gormustuk. Bu dosya sitenin ana dizininde olmaliydi. GAE baglaminda bu sayfa nasil erisilir hale getirilir? Bu statik dosyayi GAE Python'a tanitmak icin app.yaml icinde
- url: /xd_receiver.htm
static_files: xd_receiver.htm
upload: xd_receiver.htm
tanimini yapmak lazim. Dosyanin icerigi degismiyor. Facebook sitesinden kullaniciniza ait gelistirme sayfasinda uygulamamizi tanitmis olmamiz lazim. Admin sayfasi surada:

http://www.facebook.com/developers/apps.php

Facebook Connect testini yapabilmek icin, mesela bizim pocketbudda.appspot.com adresini "yerele" yonlendiriyoruz, onun icin Ubuntu uzerinden /etc/hosts icinde

127.0.0.1 pocketbudda.appspot.com

tanimini yaptik (bu bir numara). Bu numara lazim cunku Facebook Uygulama konsolunda sitemizin gercek URL'ini kayit ettik, ve bu uygulama uzerinden localhost'ta test yapmak istiyorsak, 127.0.0.1 (yerel makinayi) sanki sitenin adresiymis gibi gostermemiz lazim, boylece tarayici uzerinde calisan Facebook Connect Javascript kodlari gercek site ile iletisimde olduklarini zannedecekler.

Bu tanimi yapinca da GAE uygulamamiz yerel makinada port 80 uzerinden calismali, cunku site isminde port tanimi yok. Bu degisimi yapinca bir problem daha cikiyor, duz dev_appserver.py isletmek port 80'e erisemez, belli port sayisi altindakiler Unix tarafindan korunurlar, o zaman gelistirme servisine root haklari vermek lazim. Onu halletmek icin de gelistirme servisini su sekilde baslatmali:

sudo python dev_appserver.py ~/kod/pocketbudda/app --port=80 --debug

En basit HTML kodu surada:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
<title>FQL Friend Demo</title>
</head>
<body>

<h1>
FQL Friend Demo
</h1>

<fb:login-button/>

<script
src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php"
type="text/javascript"></script>

<script type="text/javascript">
FB_RequireFeatures(["XFBML"], function()
{
FB.Facebook.init("[APP ID BURAYA]", "xd_receiver.htm");
FB.Facebook.get_sessionState().waitUntilReady(function()
{
var uid = FB.Facebook.apiClient.get_session().uid ;
var sql = "SELECT name, birthday FROM user WHERE uid IN " +
"(SELECT uid2 FROM friend WHERE uid1 = "+uid+")";
FB.Facebook.apiClient.fql_query(sql, function(result, ex) {
var userName= result[0]['name'];
alert(userName);
var bday = result[1]['birthday'];
alert(bday);
});
});
});
</script>

</body>
</html>
Bu sayfaya site ismini kullanip baglaninca kod arkadas listesine bakip ilk arkadasin dogum tarihini gosterecek.

No comments: