Php ile Facebook Iframe Uygulaması Geliştirme – Başlangıç

 bcakir
 16 Temmuz 2011

Merhaba arkadaşlar önceki makalemizde facebook mimarisinden, uygulama oluşturmak için nelere ihtiyacımız olduğundan ve uygulamamızı nasıl açacağımızdan bahsetmiştik. Bu makalede ise kodlamaya geçiyoruz. Kısaca bu makalede nelere değineceğimi açıklayayım. Kullanıcılardan uygulama izni alma işleminden, internet explorerda karşılaştılan session işlemi başlatma probleminin çözümünden bahsedeceğim. Uygulamamızın sonunda ise kullanıcı bilgilerini (idsini, ismini, mail adresini ve profil fotoğrafını) ekrana yazdıracağım. Bu işlemlerin hepsini kod üzerindeki yorum satırları (comment) ile ayrıntılı olarak açıklayacağım. Uygulamamıza başlamadan önce önceki makalemde de bahsettiğim Facebook Php SDK’sını buradan indiriyoruz. Zip dosyasının içerisinden çıkardıktan sonra uygulamamızın bulunacağı yere klasörün adını facebook-php-sdk (isimde başka değişiklik yapmayın ya da benim yazdığım SDK include adresini de değiştirin) yaparak yapıştırın. Şimdi kodlarımızı yazabiliriz.

<?php
//facebook php-sdk'yı include ettik
include_once "facebook-php-sdk/src/facebook.php";

//kullanacağımız uygulama değişkenlerini atıyoruz
$fbconfig['appid']="api idniz";
$fbconfig['secret']="api secret";
$fbconfig['baseurl']="facebook adresiniz (apps.facebook olan)";     

//uygulamayı oluşturuyoruz
$facebook = new Facebook(array(
'appId' => $fbconfig['appid'],
'secret' => $fbconfig['secret'],
'cookie' => true,
));

//açık olan kullanıcıyı arıyoruz
$user = $facebook->getUser();

//kullanıcının giriş yapması ve izin vermesini istiyoruz
$loginUrl = $facebook->getLoginUrl(
array(
    //kullanıcıdan istediğimiz izinler (scope ile)
    'scope'         => 'email,publish_stream',
    'redirect_uri'  => $fbconfig['baseurl']
    )
);

//giriş yapan kullanıcıya logout bağlantısı oluşturuyoruz
$logoutUrl = $facebook->getLogoutUrl();

// internet explorer da sorun yaratan session işlemi için
header('P3P: CP="CAO PSA OUR"'); ob_start(); session_start();

//tüm işlemlerimizi tanımladığımız $user değerine göre yapıyoruz
if ($user){
//kullanıcının temel bilgileri alınıyor
$userInfo = $facebook->api('/me');
}

//kullanıcıdan giriş izinleri istiyoruz
if (!$user) {
    //kullanıcı tanımlı değilse izin alma sayfasına gönderiyoruz
    echo "<script>top.location.href='$loginUrl'</script>";
}else{
    $u_id = $userInfo['id'];
    $u_name = $userInfo['name'];
    $u_mail = $userInfo['email'];
    $u_picture = "http://graph.facebook.com/".$user."/picture";
    //kullanıcı id, isim, mail ve fotoğrafını yazdırıyoruz
    echo "$u_id - $u_name - $u_mail - ";
    echo "<img src=\"" . $u_picture . "\" />";
}
?>

Bu uygulama ile facebook uygulama alanımıza (canvas page) kullanıcı bilgilerini yazmış olduk. Yazımın sonuna doğru yaklaşırken kullanıcı bilgileri isteme ile ilgili önemli gördüğüm bir noktaya değinmek istiyorum örnek ile açıklayarak. Örnek olarak hava durumu uygulaması yapmak istiyorsunuz. Bu uygulamada isterseniz facebookdan kullanıcının bulunduğu şehri alıp açılışta direk bulunduğu şehrin hava durumunu gösterebilirsiniz.  İsterseniz de almayıp kendisine hangi şehrin hava durumunu öğrenmek istediğini sorabilirsiniz. Eğer kullanıcıdan bulunduğu şehri almadan uygulama yapacaksanız; uygulama izni almanıza gerek kalmaz. Bunu neden belirtiyorum diye soracak olursanız; kullanıcılar ilk defa karşılaştıkları veya Zygna gibi firmalar tarafından yapılmayan uygulamalara güvenmeyip izin vermiyorlar. Buda yaptığınız uygulamanın kullanılmasını engelliyor. Ama tekrar belirteyim uygulama izni almazsanız da kullanıcı ile alakalı hiçbir bilgiye ulaşamazsınız. Yapacağınız uygulamaya göre buna karar verebilirsiniz. Uygulamanın bütün betiklerini içeren kaynak kodlarını buradan indirebilirsiniz. Bu makalede uygulama geliştirmeye başlamış olduk. İlerleyen makalelerde Php ile büyük uygulamalar geliştireceğiz. Sonraki makalelerde görüşmek dileğiyle.

 8.568 Okunma

Bu yazıya 41 yorum yapılmış.

  1. uygulama izni istemekte haklısın bencede iyice düşünülmeli

  2. Sonunda biri bu alandaki eksiği görüp kitap çıkarmış. bugün bu kitabı inceledim baya detaylı anlatılmış.

    • Kitap İbrahim Hızlıoğlu tarafından yazılmış büyük ihtimalle kaliteli bir içeriğe sahiptir. Ama kodlama yaparken basılı kitabın kullanımı biraz zor oluyor. Kitapta yer alan örneklerin cd si verilse, bence insanları daha çok satın almaya teşvik eder.

  3. merhaba,

    öncelikle teşekkür ederim emeğiniz için. Fakat neden ben yapamıyorum anlamıyorum sorunu bi türlü çözemedim idare edecek derecede de php dilinden de anlıyorum. Ama bu başlangıç bölümü olmuyor.

    Sorun; Yukarda verdiğiniz kodu aynen index.php olarak kaydediyorum app id ve secreti kendikilerimle değiştiriyorum SDK yıda indirip include ediyorum adres yolu filan tam kontrol ettim kaç kere ve dosyalarıda hosta atıyorum gel gör ki uygulama sayfama apps. olana gidiyorum ve bomboş sayfayla karşılaşıyorum hata filan vermiyor sadece uygulama sayfası boş duruyor. Uygulamamın canvas adres ayarları filan doğru yani aynı index.php sayfasının içine başka bi üç kelimelik cumle yazdığımda uygulama sayfasında çıkıyor ama sizin bu kodları yazdığımda çıkmıyor. Bu sorunu sadece ben mi alıyorun genel bi sorunmu :((( Yardım ederseniz sevinirim.

    • yukarıdaki işlemleri adım adım yaparsanız uygulamanızın çalışmamasına imkan yok. mutlaka bir şeyi gözden kaçırıyorsunuzdur. Uygulama birden fazla açmışsanız api id değerleri karışmış falan da olabilir. Ben size bu uygulamanın çalışır halinin linkini vereyim index.php sayfasını açıp api id, api secret ve facebook url değerinizi girin. Ama dediğim gibi bu değerlerin doğruluğunu kontrol edin, çünkü kodu ben de kullanıyorum ve garanti veririm %100 çalışıyor. Çalışır halini yazıya ekledim oradan indirebilirsiniz. Ayrıca izin problemi de olabilir. Uygulamanızı tamamen kaldırıp tekrar girmeyi deneyin.

  4. denedim hepsini adım adım uyguladım yeni uygulama açtım sildim başka doğrulanmış facebook hesabından da açtım da ama sonuc aynı herşeyi hata nereden kaynaklanıyor çözdüm sanırım.

    normal html veya php kodları gözüküyor yani mysql php kullandım index.php de çalısıyor. Fakat dediğim gibi app entegre ettiiğimde çalısmıyor yani kullanıcı bilgileri ve izinleri çıkmıyor sadece entegrenin dısındaki kodlar çalısıyor.

    grap abi explorer uygulamasında elle yeni izinler vermeye çalıstığımda bi hata alıyorum
    resimdeki hata ya bakarsanız eğer
    http://gununseyleri.byethost8.com/res.jpg

    ayrıca bedava host kullanıyorum ondan yani kendime ait bi domain hostum yok ama bu bişey farkeder miki sonuçta yine bi host ve domain yani çalısıyor. Ama resimdeki hata daki redirect uri: url….. dediği için bedava host oldugu için de olabilir diye düşünüyorum.

    bi süre sonra kendime ait bi host domain almayı düşünüyorum o zaman da da aynı hatayı verecek mi bakalım.

    Teşekkürler.

    • Hosttan kaynaklanıyor olabilir sorun. Eğer hostun CURL kütüphanesine izin vermiyorsa Facebook API ile iletişim kuramayabilirsin. İstersen Hostgator bedava kupon kullanarak (kupon ismine TURKIYE girmelisin) 0,1$ a 1 aylık deneme kullanımı alabilirsin. Resimdeki hatayı izin işlemlerini yapmadığından dolayı alıyorsun.

  5. öneriniz için teşekürler.

    hostgatoru daha öncede araştırdım karışık hoşuma gitmiyor ya yabancı firmalar üstelik pahalı ve yabancı para sıkıntısı oluyor ödemelerde filan o yüzden sadecehosting.com dan almayı düşünüyorum.

    İyi günler.

  6. bu izin kodunu uygulamaya giydirdigimizde aşırı bir yavaşlama ve bekleme oluyor. nedenini biliyor musunuz?

    • Uygulama izni facebook bilgilerini almak için gerekli, mâlesef bu kodu değiştirerek hızlandırma gibi bir şansımız yok. Kullanmadan uygulama yaparız ama facebook ile etkileşim kuramayız. Ama server hızı artarsa bu kodun işlenme süresi kısalır.

  7. bilgi için teşekkürler. fakat 20 saniyelik bekleme dogal mı sizce?

    • Bende o kadar bir süre beklemiyor 5 sn falan civarı. Kodda değişiklik yapmadıysan hızı çok yavaş.

  8. uygulama çalışıyor gerekli izinleri alıyorum fakat sadece isim ve id bilgilerini alabiliyorum email ve fotograf alanları boş geliyor. Çok defa denedim ama hep böyle sorun benden mi kaynaklanıyor yoksa api de değişen bir şeyler mi var ? Teşekkürler

    • Facebook Api için değişen bir şey yok. Uygulamayı sizin yorumunuzu görünce indirip tekrar denedim, herhangi bir sorun yok. Resmi ve mail adresini gösteriyor. Siz Facebook uygulamanızı kaldırıp, bu betiği hiç değiştirmeyin ve tekrar izin vererek bir daha deneyin.

  9. SSL bağlantısı hatası
    Sunucu ile güvenli bağlantı kurulamıyor. Bu durum sunucuyla ilgili bir sorundan kaynaklanabilir veya sahip olmadığınız bir istemci kimlik doğrulaması sertifikası gerekiyor olabilir.
    Hata 107 (net::ERR_SSL_PROTOCOL_ERROR): SSL protokolü hatası.

    bu hatayı alıyorum nasıl düzelteiblirim. teşekkürler

  10. Paylaştığınız bilgiler için teşekkur ederim..
    Uygulamayı denedim.
    Hata 107 (net::ERR_SSL_PROTOCOL_ERROR): SSL protokolü hatası.
    hatası vermekte.Nasıl düzeltebilirim??

  11. tamam oldu teşekkur ederim

  12. Kodları sizden örnek alarak bir sayfa oluşturdum. O sayfadan kullanıcının id sini alıp kendi veritabanıma kaydediyordum. Fakat yakın zamndan beridir çalışan kod çalışmamaya başladı. Problem şu; giriş yaptıktan sonra izinleri istiyor ve devam ettiğinizde explorer devamlı işlem yapıyor ve adres çubuğunda da şu ifade yer alıyor.
    http://www.siteadresim.net/gameengine/facegiris.php
    Yardım ederseniz sevinirim.

    • Uygulamanızda aldığınız hatanın neden kaynaklandığını anlayamadım. Yazıdaki kodları değiştirmeden tekrar uygulama yapmayı deneyin. Ayrıca, uygulamanızda yaptığınız değişikliklerden önce ve sonra adım adım çalışan yedek almayı ihmal etmeyin. Burada yer alan kodlar çalışıyor, tekrar kontrol edilmiştir.

      • $fbconfig[‘appid’],
        ‘secret’ => $fbconfig[‘secret’],
        ‘cookie’ => true,
        ));

        $user = $facebook->getUser();

        $loginUrl = $facebook->getLoginUrl(
        array(
        //’display’ => ‘popup’,
        ‘scope’ => ’email,offline_access’,
        ‘redirect_uri’=>$fbconfig[‘baseurl’]
        ));

        $logoutUrl = $facebook->getLogoutUrl();

        // internet explorer da sorun yaratan session iþlemi için
        header(‘P3P: CP=”CAO PSA OUR”‘); ob_start(); session_start();

        if(!$user)
        {
        echo(” top.location.href='” . $loginUrl . “‘”);
        }
        else
        {
        $userInfo = $facebook->api(“/me”);
        print_r($userInfo);
        }
        ?>

        Kodlarım yukarıdaki gibidir. Daha önce bu kodlar serverimde çalışıyordu. Servera tekrar sistem yüklendi ve ondan sonra problem başladı. Windows Server 2003 ve Php5 yüklü. Kullanıcı giriş ekranı geliyor çünkü $user ilk aşamada null. Kullanıcı adı ve parola girildikten sonra onayladığınızda sayfa sanki sonsuz bir döngüye giriyor. Çünkü $user yine null. Adres çubuğunda ise parametre olarak facebook serverdan gelen bir kod var. O kod her döngüde tekrar yenileniyor. Sayfa devamlı bir işlem içerisinde. Problemi anlayamadım. Sayfa web adresi kodlar içerisinde var.

        Yanıtınız için teşekkür ederim.

      • Kusura bakmayın kodun yukarısı çıkmamış appid secret id falan var.
        Adres ise: http://okey101.net/gameengine/facegiris.php

        • Uygulamanıza giriş yapabildim. Eğer sunucuyu değiştirdiklerinden sorun kaynaklanıyorsa, hosting firmanıza bir danışın.

          • Cevabınız ve ilginiz için teşekkür ederim.

            Şu anda uygulamam hostumuzun ana sayfasına yönlendiriliyor. Eski kodumda loginUrl sini oluştururken redirect_uri diye bir şey kullanmıyordum. Orada next ve cancel url leri vardı. Base url ne ise oraya onu yazıyordum. Giriş yaptıktan sonra oraya yönlendirme gerçekleşiyordu ve ben user id sini alabiliyordum. Fakat şimdi ana sayfam ne ise oraya yönleniyor ve parametrelerde state ve code diye iki değişken var, giriş işleminden sonra yönlendirmede problem var.
            Dün şöyle bir şey denedim Facebook uygulama ayarlarında canvas url değeri var. Bende orası boş idi, çünkü facebooktan uygulamam kullanılmayacak. Dün oraya base urlmi girdim (……/facegiris.php?) Bu durumda uygulama doğru bir şekilde facebook içerisinde iframe yönlendirme yaptı ve kullanıcı id sini aldım. Fakat önceden direk base url açılıyor idi.

            İyi çalışmalar kolay gelsin.

  13. facebook sayfama giriryorum ana sayfamda ve diger sayfam bombos hic birsey aktiv deil ne yapmam gerek

    • Facebook hayran sayfası uygulaması yapmıyorsun dimi? Eğer yukarıda yazanları ve uygulama açmayı doğru şekilde yaptım, uygulamayı görüntüleyemedim diyorsanız, aşağıdaki şekilde uygulamanıza gidebilirsiniz.
      apps.facebook.com/sizinuygulamaadınız

  14. ben sadece kendi laptopbumdan face giremiyorum sifreyi girdikten sonra bombos ana sayfam aciliyo hic birsey aktiv deil mesajlari bile okuyamiyorum,arkadaslara bakamiyorum

  15. öncelikle teşekkürler paylaşımlarınız yol gösteriyor. Ancak takıldığım bir nokta var. Burada geçen örnek kodlarla uygulamamı çalıştırdım gayet de hoş oldu fakat izin istersen e-posta adresi kişisel bazı bilgiler kullanılacaktır yazıyor daha sonra gelen sayfada bu uygulama sizin adınıza video paylaşabilir,fotoğraf yayınlabiir vs gibi bir uyarı çıkıyor. Bunu kaldırmak istiyorum. Çünkü insanlar bu izni görünce antipatik oalcaktır uygulama ve kimse kabul etmek istemecektir. Bu izni hangi yazılan koddan dolayı istiyor? Bunu nasıl kaldırabiliriz?

    • Uygulamana insanları sokmak için temel izinleri verdirmek gerekiyor. Bunu yapmaya mecbursun ama istersen ekstra izinleri boş bırakırsın. Ama bu da yapacağın uygulamada sana sınır koyar. Yani duvarında otomatik bilgi paylaşmak istiyorsan publish_stream almak zorundasın. scope kısmının karşısındaki tırnaklarının içini boş bırakırsan da sadece temel bilgiler için izin alırsın.

  16. bu izin isteme kodun da 5 6 kez refresh yaptıkdan sonra çek geç gelmeye başlıyor değerler. en sondada hiç gelmiyor.

    • Ben de herhangi bir sorun yok. Hızı da orta dereceli diyebilirim. Server hızını artırarak, işlem hızını falan artırabilirsin.

  17. Hata
    Bir hata oluştu. Lütfen daha sonra tekrar dene.
    yazıyor sadece index.php deki yerleri değiştirmek yetiyormu yoksa facebookphp-sdk nin içindedeki dosyalardada var api anahtarı istiyen yerler oralarıda değiştirecekmiyiz

    $fbconfig[‘appid’]=”4154545454154″;
    $fbconfig[‘secret’]=”1515515151515151477775″;
    $fbconfig[‘baseurl’]=”http://apps.facebook.com/deneme”;

    bu şekilde yapıyorum hata veriyor

    • index sayfasında bir şey değiştirme sadece izinler sayfasında api değerlerini girmen yeterli ama bu değerler facebook uygulamanın değerleri olmalı. Atmasyon bir değer girersen hata alırsın.

  18. Merhaba facebook kişi albümlerini çekebilirmiyiz böyle bir uygulama varmıdır yada sdk kullanarak bunu gerçekleştire biliyormuyuz ?

    • Kişi izin verirse, istediğin uygulamayı yapabilirsin. Yani, kullanıcı izin verirse kişi albümlerine erişip istediğin gibi bir albüm uygulaması yapabilirsin.

  19. Sayın bcakir,
    Öncelikle teşekkürler bütün adımları tamamladım.
    index.php bütün izinleri aldı ama sonrasında sanki bir döngüde gibi sürekli sayfa yeniliyor.
    uygulamamı apps.facebook.com/ansesnet olarak kurdum.

  20. Öncelikle sitenizi çok beğendim.Ben Facebook adresine belgesel yüklemek istiyorum.Dizimag tarzı bi sistem ile sitemde yayınlacağım ama nasıl olduğu çözemedim.Aşağıda verdiğim cümle temanın player panelinde ne olduğunu açıklayabilirmisiniz zahmet olmazsa 🙂

    Facebook PHP Adresi – Facebook videolarını çalıştırmak için kullandığınız PHP adresinizi giriniz.

  21. Öncelikle ellerine sağlık hocam cok guzel anlatım ve coktan beri arıyordum. Bende bu hatayı verdi:
    Fatal error: Cannot redeclare class FacebookApiException in /home/fullfoll/public_html/face/facebook-php-sdk/src/base_facebook.php on line 107
    Ne yapmam gerek?

  22. Merhaba, bu paylaştığın wordpress için mi bilmiyorum benim özel tasarımda kendi panelimi kullandığım çalışmada başlık yazı paylaşıyor. Resim sorunu çözemedim. Kodları aşağıda gösteriyorum, u dan icerik t den title başlığı seçiyor javascriptte oraya resimi nasıl ilave edebilirim. Yardımcı olabilir misin bilgin varsa teşekkürler.

    function fbs_click() {
    u = location.href;
    t = document.title;
    window.open(‘http://www.facebook.com/sharer.php?u=’ + encodeURIComponent(u) + ‘&t=’ + encodeURIComponent(t), ‘sharer’, ‘toolbar=0,status=0,width=626,height=436’);
    return false;
    }

    • meta property=”og:type” content=”blog” />
      meta property=”og:site_name” content=”Bcakir” />
      meta property=”og:title” content=”Php ile Facebook Iframe Uygulaması” />
      meta property=”og:image” content=”http://bcakir.com/wp-content/bc180.jpg” />

      Bağlantı verdiğin sayfada facebook tarafından algılanacak bu taglar olmalı. Resim için image kısmını kendi sitene göre düzenlemen yeterli. JavaScrit kullanmana gerek yok.

Yazı hakkında görüşlerinizi belirtmek istermisiniz?

Daha fazla Facebook
Kapat