Facebook Uygulama Geliştirme: İzin Alma ve Duvara Yazma-2
Daha önce fırsat bulduğum bir anda yazdığım örnek kodları Facebook Uygulama Geliştirme: İzin Alma ve Duvara Yazma başlığı altında paylaşmıştım. Fakat ayrıntılı açıklamaya vaktim olmadığı için sadece kodlar üzerinde gösterip yayınlamıştım. Fırsat bulmuşken bu yazıda, aynı kodları daha ayrıntılı bir şekilde anlatmak istedim.
Facebook Php Sdk'sını indirdiğinizi ve şu yazıya göre facebook üzerinden uygulamanızı oluşturduğunuzu varsayıyorum.
Facebook, yaptığınız sayfaları gelişmiş bir iframe mantığı ile kendi sayfası üzerinden gösteriyor. Bu demektir ki yaptığınız uygulama hem kendi sunucunuz üzerinde hemde facebook sayfası üzerinde çalışacaktır. Yaptığım örnek uygulama hem kendi sunucusundan (burada) hemde facebook üzerinden (burada) çalışacaktır. Tavsiyem öncelikli olarak kendi sunucunuzda test etmeniz. Böylelikle sorunlara daha çabuk müdahale edebilirsiniz.
Uygulama Sınıfı Oluşturma
Facebook.php dosyasını çağırıp gerekli tanımlamaları yapıyoruz. Ardından yeni bir facebook sınıfı tanımlayıp uygulamamızın çekirdeğini oluşturuyoruz.
include_once "../facebook/facebook.php";
$fbconfig['appid' ] = ""; //api id
$fbconfig['secret'] = ""; //api secret
$fbconfig['baseurl'] = "http://apps.facebook.com/fbpostwall/index2.php"; //uygulama yolu
//uygulamayı tanımlıyoruz
$facebook = new Facebook(array(
'appId' => $fbconfig['appid'],
'secret' => $fbconfig['secret'],
'cookie' => true,
));
$fbconfig['baseurl'] değişkeni, uygulamanın herhangi bir işlem yaptıktan sonra hangi url'ye yönleneceğini belirtiyor. Örneğin üye giriş yaptıktan sonra tekrar bu adrese dönecektir.
Kullanıcı Girişini ve İzinleri Kontrol Etme
$facebook->getUser() ile açık olan oturumu kontrol ediyoruz. Eğer oturum açıksa true değeri dönecek, açık değilse false dönecektir. Eğer oturum açık değilse, facebook sınıfını kullanarak bir giriş urlsi oluşturup kullanıcıyı o adrese yönlendiriyoruz.
//kullanıcının oturumunu sorguluyoruz. Oturum varsa true, yoksa false dönecektir.
$user = $facebook->getUser();
//kullanıcıya giriş bağlantısı yolluyoruz
$loginUrl = $facebook->getLoginUrl(
array(
'scope' => 'email,offline_access,publish_stream', // scope değeri istediğimiz izinler
'redirect_uri' => $fbconfig['baseurl']
)
);
$logoutUrl = $facebook->getLogoutUrl();
Adresi oluştururken kullanıcıdan hangi izinleri istediğimizi ve giriş yapıldıktan sonra hangi adrese dönüleceğini belirtiyoruz. İzinleri daha sonra ayrıntılı şekilde anlatacağım. Burda email adresine(email), oturum açık olmadan bilgilere erişme(offline_access) ve duvarına yazma(publish_stream) izinlerini istedik. $logoutUrl ise çıkış bağlantısı.
Kullanıcı Bilgileri Okuma
$facebook->api("/me") ile kullanıcının izin verdiği bilgilerinin tamamını array olarak alıyoruz. Ben array'dan kullanıcının adını(first_name) yazdırdım ve arrayı aynen ekrana bastırdım.
//kullanıcı bilgilerini alıyoruz
$userInfo = $facebook->api("/me");
echo "Hoşgeldiniz,".$userInfo["first_name"].". <br />Çıkış yapmak için <a href='$logoutUrl'>tıklayınız</a><br />";
echo "Okunan Bilgileriniz:<br />";
echo '<pre>';
print_r($userInfo);
echo '</pre><br />';
Kullanıcının Duvarına Yazma
Bir önceki yazıdan farklı olarak kullanıcının duvarına bir eklenti(bağlantı,resim vb) yazdıracağım.
Sayfa her yenilendiğinde post edilmesin diye bir bağlantı ile aynı sayfaya get ile bir değer yollayıp o değer ile güncellemeyi gerçekleştiriyorum. $facebook->api("/me/feed", 'post', '') kalıbı kullanıcının kendi duvarına yazı göndermemizi sağlıyor.
Gönderilecek eki array olarak gönderiyoruz.
echo "<a href='".$fbconfig['baseurl']."?tt=1'>Durumunuzu güncellemek için tıklayın</a>";
if(isset($_GET['tt'])){
//kullanıcının duvarına yazdırıyoruz.
try {
$statusUpdate = $facebook->api("/me/feed", 'post', array(
'message' => "sezercik.net demo uygulaması",
'link' => 'http://sezercik.net',
'picture' => 'http://www.sezercik.net/template/default/img/logo2.png',
'name' => 'Sezercik.net',
'description'=> 'sezercik.net demo uygulaması ile post edilmiştir.'
));
} catch (FacebookApiException $e) {
d($e);
}
if (isset($statusUpdate)) {
echo "<br />Durum ".$statusUpdate['id']." idsi ile güncellendi.";
}
}
Uygulama demosu için tıklayın.
Güncellenmiş çalışma dosyası çin tıklayın.
Mesela bir video uygulaması yaptınız, kullanıcı videoyu izlediği anda yukardaki tekniği uygulayarak kullanıcının videoyu kendi duvarında paylaşmasını sağlayabilir ve uygulamanızın reklamını yapmış olmasını sağlayabilirsiniz. Şimdilik sadece php ile yazıyorum. FBJS ile daha dinamik uygulamalar oluşturmak mümkün.
Aynı konuyu daha ayrıntılı anlatmaya çalıştım. Sürç-ü lisan ettiysem affola.

Aga Bi Zahmet Msn mi Eklesen Yardım eTsen Olr mu ? Birde Özrdilerm Kontrol Etmeden Önceki Yazıya Yorum Yaptm :) bu konuyla ilgili bir şeyler soracamda
Mertcan
27 haziran, 21:2
iframeden fbml ye nasıl geçicez hala bulamadım :/
rüştü
28 haziran, 10:6
@rüştü facebook artık sadece iframe destekliyor. Daha önceden açtığın uygulamalarda fbml görürsün, ama yeni açtığında sadece iframe seçeneği görünür. Iframe kullanmak daha mantıklı, html olarak kodlayıp daha sonra facebook düzenien uyarlayabilirsin. yukarda ki ekte gerekli düzenlemeleri yaparak sunucuna attığında çalışması gerekli.
Sezer
28 haziran, 13:28
@sezer hmm.. o zaman boşuna uğraştım desene :) şimdi ben bu izinleri aldırttım diyelim. kullanıcı bilgilerini nereden göreceğim acaba? sql`e kayıt etmiyor mu izin verdiklerinde? bir de bununla ilgili bir yazı yazarsanız süper olucak. çok çok teşekkürler. cevap bekliyorum
rüştü
28 haziran, 13:45
Anlatım gerçekten çok iyi olmuş. İnternetteki birçok karmaşık sayfadan çok çok daha iyi. Bana bu durum güncellemeyi yönetici olduğum sayfaya nasıl uygulayacağımı anlatabilirmisiniz?
Sinan
1 Temmuz, 11:34
@rüştü, $userInfo = $facebook->api("/me"); echo $userInfo["first_name"]; gibi bilgilerini ekrana yazdırabilirsin. $userinfo bir array ve içerisinde izin aldığın bilgiler yer alır.
@sinan, yönetici olduğun sayfa için uygulamana izin vermen gerekli. Daha sonrasında $user olarak sayfa id'ni tanımladığında sayfanın duvarına yazacaktır.
Sezer
2 Temmuz, 11:38
Hocam malesef duvara yazdiramadim :(
Ahmet
4 Temmuz, 2:25
Merhaba öncelikle bu güzel yazılarınız için teşekkür ediyorum. Sormam gereken bir şey var. echo $userInfo[``link``]; komutu ile kullanıcının profil adresini ekrana yazabiliyoruz. Uygulama yapıp sayfama ekleyeceğim ve bu seferde sayfanın adresini yazdırmam gerekiyor. Bunun için komut olarak ne vermeliyim? Teşekkürler.
sami
9 Temmuz, 18:51
Sezer bey index2.php de bulunan duvara yazdırma komutları varya ``Durumunuzu güncellemek için tıklayın``a tıklandığında kullanıcının duvarında yayınlanıyor. index2.php ye girildiğinde otomatik olarak kullanıcının profiline gitmesini istiyorum. Bu nasıl olacak? Tıklamadan...
Ahmet
9 Temmuz, 19:37
@Sami, sayfanın adresini base_url olarak tanımladığınız değeri verebilirsiniz. Tabi demek istediğiniz buysa.
@Ahmet, if(isset($_GET['tt'])){ kısmından aşağısı duvara yazmayı sağlayan kodlar. if(isset($_GET['tt'])){ kısmını ve en alt satırdaki kapatma parantezini silerseniz sayfa yüklendiği an duvara yazılacaktır.
Sezer
10 Temmuz, 0:5
uygulamamın api id ile secret kodunu girdim ama izin isteği sayfası çıkmadı bir hata meydana geldi yazıyor nedendir :(
serdar
10 Temmuz, 0:44
tamam o adımı geçtim şimdide böyle diyor ....sayfa yüklenirken hata oluştu. Boş yanıt alındı.
serdar
10 Temmuz, 0:54
sezer hoca ben hala çözemedim olayı neden boş yanıt alındı diyo :(:(
serdar
10 Temmuz, 2:9
@serdar aldığınız hata facebook uyarısı mı, yoksa tarayıcı hatası mı? Eğer facebook sayfası içerisinde hata mesajı alıyorsanız yönlendirmelerde sorun vardır. Tarayıcı hatası ise şayet, php kodlarınızda bir hata vardır. Yaptığınız uygulamayı facebook üzerinde değilde kendi sunucunuzda çalıştırdığınızda hatayı daha net görebilirsiniz.
Sezer
10 Temmuz, 11:11
Sezer hoca herşey tamam yaptım çoook teşekküler. şimdi 4 tane sorum var cevaplarsan sevinirim 1- giriş yapmak için tıklayın deyince neden facebook logosu çıkıyor ona tıklamadan yada görünmeden izin sayfasına direk gitmesinin yolu yokmu? 2- duvara post ettikten sonra üye id si falan çıkıyor onun yerine başka bir sayfaya girmesi mümkün değilmi? 3- ilk açılış ekranında izin vermeniz gerekir yazısı yerine bir resim gösterip resime tıklayarak izin sayfasına göndermek mümkün değilmidir? 4- uygulamaya izin veren kullanıcılar için ilerde onlar bişey yapmadan biz direk duvarlarına link post etmemiz mümkünmü? bunları yanıtlarsan çok sevinirim çok teşekkürler devamlı takipçinim artık ;)
serdar
10 Temmuz, 11:16
@Serdar; anladığım kadarıyla html ve php bilginiz biraz az. İlk sorunuz javascript ile yönlendirmeden kaynaklanıyor. Onu araştırıyorum. ikincisinde kodlarda $statusupdate 'nin kontrol edildiği ifadeye header ile yönlendirme yapabilirsiniz.Üçüncüsü, evet $user değerini kontrol ettikten sonra yazı yerine bir resime bağlantı vererek izin isteyebilirsiniz. Son olarak 4. soruda evet, izin veren kullanıcıların id'leri ile duvarlarına uygulama olarak post edebilirsiniz. Umarım cevaplar yeterlidir. Dediklerinizi yapmak için temel php bilgisi gerekli. Kolay gelsin.
Sezer
10 Temmuz, 11:41
evet fazla bilgim yok :( kullanıcıların id`leri ile duvarlarına uygulama olarak post edebilirsiniz. demişsin hoca idleri benimmi kaydetmem gerekiyor ?
serdar
10 Temmuz, 11:48
Ayarlardan Auto-resize kısmını işaretledim. ama height kısmının daha da büyük olmasını istiyorum. bunu nasıl yapacağımı ayrıntılı bir şekilde anlatır mısınız?
ahmet
18 Temmuz, 18:44
Başardım Sezer Emegine Saglam Ayıptır Söylemesi 2 Gündür Uğraşıyorum.. :))
Özkan Pir
21 Temmuz, 15:19
Hocam http://apps.facebook.com/fbpostwall/ uygulamanızın indexi gibi nasıl yapabiliriz? Onun içeriğini mail olarak atabilirseniz sevinirim. Sağlıcakla
Mehmet
22 Temmuz, 0:21
Serdar; idleri kaydetmeye gerek yok. id'ler getAppUsers isimli bir arrayda tutuluyor.
Ahmet iframe genişliğini facebook javascript sdk ile FB.Canvas.setSize fonksiyonunu kullanarak ayarlayabilirsiniz.
Mehmet dediğiniz uygulamanın çalışma dosyaları bir önceki yazıda (burda) mevcut.
Kolay gelsin.
Sezer
24 Temmuz, 9:35
s.a ya kaç gündür uğraşıyorum uygulamam da bi sayfa ismini çıkartamadım arkadaş yaaa yardım edin biriniz bilen varsaa... fb:name ile online olan kullanıcı uygulamyı ziyaret edince ismini yazdırıyorum ama uygulamam başka bi sayfada ekli ve uygulamamı hangi sayfa kullanıyorsa o sayfanın isminin çıkması lazım ama yapamadım bilen varmı bir kod vs. vs. Çok dua ederim ya :(( facebook.com/by.eskaza buradayım ulaşın lütfen...
mustafa
24 Temmuz, 20:31
İyi günler bu uygulamada kullanıcı sayfaya girip durumumu güncelle dediği an kullanıcının duvarında ilgili link paylaşlıyor. Benim yapmaya çalıştığım şey ise 3,4 vs.. kullanıcının duvarında birşey paylaşmak yani uygulamayı yapan kişi tarafından başka kullanıcıların sayfasın birşey nasıl paylaşabiliriz.
tolgahan
5 Ağustos, 17:9
Tolgahan, dediğiniz konu offline post etme olayı. Şu an siteyle ilgilenemiyorum, ancak bu hafta içerisinde konu hakkında bir yazı yazmayı planlıyorum. İnş o zaman daha yardımcı olabilirim.
Sezer
7 Ağustos, 21:33
Bir şekilde yapmayı başardım yanlız uygulamanın adı yazıyor mesala deneme uygulaması aracılığıyla şunu paylaştı şeklinde. Şimdi bunu kaldırmak için uğraşıyorum. Konu hakkında yazınızı bekliyorum. Kolay gelsin.
tolgahan
8 Ağustos, 9:30
Güzelmiş teşekkürler
Kemal
8 Ağustos, 16:6
Tolgahan, "uygulama aracılığıyla" ibaresini kaldırmak sanırım olmuyor. Araştırmak gerek.
Kemal, ben teşekkür ederim, kolay gelsin.
Sezer
11 Ağustos, 17:40
Bazıları yapmış bulunca burda paylaşacam kolay gelsin ben
tolgahan
11 Ağustos, 17:43
Hocam bu kodlarda bir terslik olabilir mi acaba işlemiyor da
Kemal
11 Ağustos, 17:46
hangi kodlarda ayrıca gtalka eklesene ordan konuşalım
tolgahan
11 Ağustos, 17:48
Uygulamayı kullanabilmek için giriş yapmış ve uygulamaya izin vermiş olmalısınız. Uygulamaya izin vermek/oturum açmak için buraya tıklayın. Diye çıkan yazıda tıkladıktan sonra Facebook logosu olan başka bir sayfa çıkıyor. Orayı tıklayınca izinleri istiyor ama orada tıklamayı sağlayacak bir uyarı yok. O Sayfaya müdahale etme şansımız varmı?
Mesut AYDIN
13 Ağustos, 15:59
@tolgahan, gtalk kullanmıyorum, dediğiniz kodları burda paylaşırsanız herkes faydalanır.
@Kemal, kodlarda bir hata yok. Zira örnek uygulamada kullanılan kodları aynen paylaştım. Api bilgilerinizi doğru girdiğinizden emin olun.
@Mesut, kodlarda izin vermek için buraya tıklayın ifadesinde bağlantıya target="_top" alt elementini eklediğinizde istediğiniz gibi olacaktır. Örnek uygulamayıda düzenledim.
Sezer
13 Ağustos, 21:10
Uygulamayı kullanan kişilerin listesini nasıl alabilirim. Uygulamaya giriş yapanları veri tabanına kaydediyorum ama kullanıcı uygulamayı silerse bende hala kayıtlı kalacak. kullanıcı listesini sürekli güncel tutmam lazım. getAppUsers anladığım kadarıyla sadece uygulamayı kullanan kişinin arkadaşlarını getiriyor. 5 saattir arıyorum bulamadım. Bir de uygulamayı kulllanan kişilerin izinlerini kontrol edemiyorum. uid yerine kendi id mi yazınca oluyor. Ama uygulamaya kayıtlı kullanıcının izinlerini göremiyorum. fikri olan var mı?
Bahadır
30 Ağustos, 23:23
Uygulama düzenlemenin yeni ara yüzünde geliştiricilerin nasıl gizleniceğini bi türlü bulamadım bir bilgin varmı acaba uygulamanın profil sayfasının bilgilerinde geliştirici olarak görünmek istemiyorum yardımcı olabilirmisin şimdiden tşkederim
Şahin
7 Eylül, 13:3
aciklamalar baya kisa onun icin yeni baslayanlar icin tam ne denilmek istendigi belli degil, örnegin php sdk ye kendi serverimiza mi yüklüyoriz veya Facebook üzerinden uygulamaya mi ekleniyor bunlar anlatilmamamis. Kolay gelsin
Fatih
8 Kasım, 14:53
@Bahadır; veritabanında kullanıcıların access_token'lerini de kaydet. uid ile gönderirken access_token ifadesini de gönderirsen o kullanıcının uygulamana verdiği tüm yetkileri kullanabilirsin.
@Şahin, geliştirici paneline baya bi kurcaladım, bende bulamadım. Ama uygulama ayarlarında Roles kısmında developers olarak kimseyi atamazsan ismin yazmıyor galiba. Kendini sadece Administrator olarak eklersin, olabilir.
@fatih, php-sdk dediğimiz şey php dosyası. Kendi uygulama sayfana çağırarak kullanıyorsun. Php ile uygulama yapabilmek için en azından temel php bilgisine sahip olman gerekli.
Sezer
8 Kasım, 21:6
Ben yönetici olduğum sayfalardan birinin duvarına rahatlıkla yazırmayı başardım. Ancak sayfa duvarına sayfanın adı ile değilde benim Adım ve Soyadım ile gönderi atıyor. Sayfanın adıyla nasıl yapabiliriz.
Sinan
9 Kasım, 14:55
@Sinan Sayfa Ayarları kısmında Ayarların Sekmesinden Paylaşım Tercihleri: Tikini işaretle dene bir Belki Olur :)
Mert Can
9 Kasım, 21:47
Sinan, Mertcanın dediğini deneyebilirsin. Eğer facebook hesabını sayfa olarak kullanırsanda, sayfa olarak post edecektir. Ya da bunu yapmak istemem dersen sayfanın access_token'ini post ederken göndermen gerek. Sayfanın access_token'ini nasıl alacağım dersen eğer, eski developer sayfasından direk alabiliyordun, değiştiğinden beri kurcalayamadım, bulduğumda paylaşırım.
Sezer
9 Kasım, 23:26
Fatal error: Class `Facebook` not found in /home/alanadi/domains/alanadi.org/public_html/facebook/Facebook.php on line 7 bunu nasıl aşabilirim üstadlar :(
Gürcan
20 Kasım, 18:47
@Gürcan, belliki facebook.php'yi include ederken yolu yanlış vermişsin. Kodlarının başına facebook.php yi include etmen gerekli.
Sezer
20 Kasım, 19:23
hocam msn adresim linux-tr@linux.net yardımcı olurmusunuz sizin tarif ettiğiniz şekilde yaptım fakat o satırda hata veriyor lütfen bir bakabilrseniz çok müteşekkir kalacağım
Gürcan
20 Kasım, 19:32
@gürcan msn eklerim fakat pek fazla açamıyorum. Php bilgin olduğunu varsayarak, include yolunu gösterirken ya hata yapıyorsun, ya da sunucu kaynaklı bir problemin var.
oluşturdugun dosyanın dizininde facebook diye bir klasör olduğunu ve içinde facebook.php dosyasının olduğunu düşünürsek, oluşturduğun dosyanın başına include("facebook/facebook.php"); satırını eklemelisin. En azından temek php bilgin yoksa yardımcı olamayacağım, üzgünüm.
Sezer
22 Kasım, 23:50
Merhabalar.. uygulamamızdaki kullanıcı girişi için atanacak hash numarasını neye göre belirliyoruz? Mesela kişinin e-posta adresine göre mi? Örneğin bu link bir facebook uygulamasına ait sunucum.com/oyun/?id=100002560761662&h=<em>bde4baa05d72a2e2a6826093ec6d5ffa</em> sunucum.com adresinden sonraki id ve hash numaraları orjinaldir :) nasıl yapabiliriz bi yardımcı olursan çoook çok mutlu olcam :)
Vedat
23 Aralık, 10:31
Tam olarak bahsettiğiniz kullanıcı izin almadıysa alması için giden url den bahsediyorsanız eğer $loginUrl ile facebook api kendisi belirliyor. Biraz daha açık yazabilirseniz daha iyi yardımcı olabilirim.
Sezer
23 Aralık, 22:12
uygulamayı önerirken Request_ids ini veritabanına nasıl kayıt ettiririz bir bilgin varmı acaba ?
Sahin
29 Ocak, 1:51
$_get ile request_id yi alıp veritabanına kayıt ettirebilirsin.
Sezer
29 Ocak, 21:59
hocam Parse error: syntax error, unexpected T_STRING, expecting `)` in /home/webhayal/public_html/begen/index2.php on line 61 hatası 61. satırda `description`=> `Abone` war sonuna `description`=> `Abone`, koyarak yapıorum olmuo normal halıyle olmuo bir bkarmsnz
ahmet
2 Şubat, 14:42
hatada `description`=> `Abone` den sonra ) gelmesi gerek diyo. Kodlarını bi kontrol et, yazıdakilerle karşılaştır.
Sezer
3 Şubat, 11:4