Facebook Davet Ederek Puan Kazan

 bcakir
 6 Kasım 2011

Merhaba arkadaşlar, sizlerden çok fazla davet ile gelen kişilere puan verdirme türünde sorular geliyordu. Bundan dolayıda, davetiye gönderene puan verdirme uygulaması yapacağım. Elbette, davet edilen kişi isteği kabul ederse puan verilcek. Uygulamamız temel işlevleri barındıracak ama bu mükemmel anlamına gelmesin. Siz uygulamayı kendinize göre geliştirir, yapmak isteyeceğiniz uygulamaya göre eksiklerini giderirsiniz. Bu uygulamayı iyice öğrenmek istiyorsanız, daha önce yazdığım request_ids ve arkadaş davet yazılarını iyice anlamanız gerekiyor, çünkü uygulamamızı bu makalelerin üzerinde geliştireceğiz. Yazımın içeriğini 3 bölüme ayıracağım. İlk bölümde uygulamaya gelen kişiye veritabanına kaydetmeyi ve davet isteğini göndermiş olan kişiye puan artırımınını yapacağım. İkinci bölümde arkadaş davet etme işlemini. Son bölümde ise yapılan davet isteklerini veritabanına kaydetmeyi yapacağım. Uygulamamızın içeriği bu şekilde olacak, sırasıyla geliştirmeye başlayalım.

<?php
//veritabanı bağlatısı
include("baglanti.php");

//ilk önce istek değerini almamız gerekiyor
if (isset($_GET['request_ids'])){
    $r_ids=$_GET['request_ids'];

    //veritabanı puan artırma
    $query = ("UPDATE kullanicilar SET puan=puan+1 WHERE k_id =
    (Select user_id From request_ids Where davet_istek='{$r_ids}')");
    $result = mysql_query($query, $baglan);

    //kullanılan davet isteğini silme
    $query = ("DELETE FROM request_ids Where davet_istek='{$r_ids}'");
    $result = mysql_query($query, $baglan);
}

//uygulama izni alma betiğini dahil ediyoruz
include("izinler.php");

//user daha önce kayıt olmuş mu
$result = mysql_query("SELECT count(k_id) FROM kullanicilar Where k_id='{$uid}'", $baglan);
while ($row = mysql_fetch_array($result)) {$sorgu = $row["0"];}
    if($sorgu < 1){
        //kullanıcı kayıtlı değilse kayıt ediyoruz
        $query = "INSERT INTO kullanicilar (k_id, puan) VALUES ('{$uid}', '0')";
        $result = mysql_query($query, $baglan);
        if(!$result){echo "Kayıt hatası";}
    }

//veritabanı bağlantısı sonlandırma
mysql_close();

//daha önce uygulamaya girenleri davet listesinde çıkarma
$uids='';
$fql='SELECT uid, name FROM user WHERE uid IN
(SELECT uid2 FROM friend WHERE uid1=me()) AND is_app_user=1';
$params=array(
    'method'=>'fql.query',
    'query'=>$fql
);
$result=$facebook->api($params);
foreach($result as $friend){
    if($uids==""){
        $uids=$friend['uid'];
    }else{
        $uids=$uids.','.$friend['uid'];
    }
}
?>

Yukarıda uygulamamaıza gelen kişinin varsa davet isteğini aldık ve bu isteği yapanın puanını 1 artırdık. Daha sonra da artırımını yaptığımız isteği sildik ve gelen kişiyi kendi veritabanımıza kaydettik. Yukarıda bulunan ve şimdi yazacağım davet istek kodlarını index.php olarak kaydedin.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Davetiye Puanı Uygulamsı</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<div id="fb-root"></div>
<script src="http://connect.facebook.net/en_US/all.js"></script>
<script>
FB.init({
    appId:"<?php echo $fbconfig['appid']; ?>",
    cookie:true,
    status:true,
    xfbml:true
});

function newInvite(){
    var receiverUserIds = FB.ui({
        method :     'apprequests',
        message:     'Ardakadaşını davet et',
        exclude_ids: "<?php echo $uids; ?>"
    },
        function(Ids) {
            var gidecekler="uid=<?php echo $uid; ?>&req_ids="+Ids.request_ids;
            gonder(gidecekler);
        }
    );
}

function gonder(gonderimler){
    $.ajax({
        type:'POST',
        url:'veri.php',
        data:gonderimler
    });
}
</script>
</head>
<body>
<div><a href="#" onclick="newInvite(); return false;">Arkadaş Davet Et</a></div>
</body>
</html>

Yukarıda ise davet isteği gönderme ve yapılan davet isteklerini veritabanına kaydettirme çağrısını yaptık. Son bölümde ise bu çağrının bağlı olduğu veri.php kısmını yapacağız.

<?php
//veri.php olarak kaydedin
//veritabanı bağlatısı
include("baglanti.php");

if(isset($_POST["uid"]) && isset($_POST["req_ids"])){
    //isteği gönderen kişi
    $i_gonderen=$_POST["uid"];
    //istek id değerleri
    $req_ids=$_POST["req_ids"];
    //birden fazla istek olabilir diye parçalıyoruz
    $req_ids=explode(",",$req_ids);

    //Veritabanına kayıt etme
    for($i=0;$i<count($req_ids);$i++){
        $query = "INSERT INTO request_ids (user_id, davet_istek) VALUES ('{$i_gonderen}', '{$req_ids[$i]}')";
        $result = mysql_query($query, $baglan);
    }
}

//veritabanı bağlantısı sonlandırma
mysql_close();
?>

Davet isteklerini veritabanımıza kaydederek uygulamamızın geliştirme işlemini bitirmiş olduk. Uygulamanın çalışması için veritabanı bağlantı betiğine, vertabanı bağlantısına ve uygulama izni alma betiğine ihtiyacınız olduğundan dolayı, bütün dosyaları buradan indirebilirsiniz. Böylece, bir tane daha Facebook Uygulama Geliştirme makalesinin sonuna gelmiş olduk. Yararlı olması dileğiyle, iyi bayramlar.
Not: Uygulamanın uyarı verdirmeli versiyonunu buradan indirebilirsin.

 2.830 Okunma

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

  1. Süpersin, emeğine sağlık. Kimse böyle gelişmiş uygulamarı paylaşmıyor bizimle. Bu yazıların devamını sabırsızlıkla bekliyorum.

    • Teşekkür ederim, zaman buldukça yazacağım yine.

  2. merhaba emeginiz için teşekkür ederim

    message: ‘Uygulamamı ziyaret et’, nerede gözüküyor acaba mesela ben yaptıgımda bildirigi gidiyor kabul ettikten sonra ise öyle sayfaya dönuyor ve uyarı gelmiyor.

    • Herhangi bir uyarı verdirmedim. massage kısmı arkadaş davet penceresinde gözüken tanıtım yazısı.

      • İlginiz için teşekkürler. rica etsem açılan arkadaş davet penceresinin boyutuyla oynanabiliyor mu bunu sizden öğrenebilir miyim?

        • Mâlesef onun hakkında bir bilgi yok dökumantasyonda.

        • Firefox-firebug ile divin sınıf,id ismine bakıp css ile stillendirmeyi dene. büyük ihtimalle olur dediğin.

  3. cok guzel yazi, fakata Ids.request_ids, undefined cikiyor. req ids gelmiyor…

    • Uygulama izini aldıysan hata vermemesi gerekiyor. Deneyerek yüklediğim için eminim uygulamada hata olmadığına.

      • Hizli yanit icin tesekkurler, tum izinler alindi oyuncunun dogum tarihinden her seye aliyorum, davetim de gidiyor fakat req id yi alamiyorum tek sorun o.

        bahsettigim gibi scriptinizde Ids.request_ids, undefined cikiyor. diger sayfanizdaki orneginizde de ayni sekilde receiverUserIds.request_ids undefined cikiyor.

        • Uygulamayı tekrar denedim sorun vermedi, sendeki hatanın neden kaynaklandığını anlayamadım. Uygulamaya, geriye uyarı verdirme kodu ekledim sorunsuz geri geldi request_ids değerleri. Ekran görüntüsüne buradan bakabilirsin. Uygulamanın uyarı verdirmeli versiyonunu buradan indirebilirsin.

          • ilginiz icin tesekkurler, verdiginiz son kodu da aynen uyguladim, fakat davet gidiyor, yine undefined degeri aliyorum,

            sanirim uygulama ayarlarinda bazi ayarlari degistirmek gerek ben de arastiriyorum.

          • izinler betiğinin içinde 3 tane facebook api değerlerini girin dediğim yeri doldurdun mu bu arada?

  4. evet her degismesi gereken yer vs ok, dedigim gibi davet vs her sey gidiyor karsi tarafa, karsi taraf tikliyor uygulamaya giriyor, tek sorun davet gonderen kisi request_ids degerini alamiyor yazdirdigimda undefined diyor.

  5. selam sayın Çakır,
    bir sorum olacaktı. Facebook fan sayfası varsayılan sekmesi ayarlamasını yapabiliyorum. yani sayfayı beğenmeyen ziyaretçiye varsayılan sekmeyi gösterebiliyorum. sekme sayfasında kişinin sayfayı beğenip beğenmediği görülebiliyor mu ? o sorgulamaya göre ekranda göstermek istediklerim var çünkü. yani önce üst kısımdan sayfayı beğenmesini söyleyen bi görsel hazırlayıp beğendikten sonra yine aynı sekmede bir uygulama açılmasını istiyorum. yardımcı olabilirseniz sevinirim.

    • Bu konuda herhangi bir çalışma yapmadım, bundan dolayı yapılışı hakkında yanlış yönlendirmek istemiyorum ama dediğiniz yapılıyor. Beğenirse sayfayı gösterebilir, beğenmezse giriş hakkı vermeyebilirsiniz.

  6. Betikleri inceliyorum da, davet edilen kişi sayfayı beğenirse ama aplikasyona onay vermezse, davet eden kişinin puanı artmıyor herhalde. Yanılıyormuyum?

    • Bu bir sayfa beğendirme uygulaması değil, Facebook’ta yer alan oyunlar mantığıyla çalışan bir uygulama. Bundan dolayı da, sayfayı beğenme ile alakalı bir şey içermiyor. Uygulamanın amacı, yeni bir kullanıcı getiren kişiye yani davet isteği yapan ve bu davet ile uygulamanın kullanıcı sayısı artırana puan verdirmek.

  7. Merhaba, uygulamanı bir kaç gündür inceliyorum, fakat şöyle bir sorun var, daveti alan kişi beğendirmek istediğim, sayfaya yönelmiyor tekrar app’a yöneliyor, halbuki ben daveti alan kişinin, sayfaya yönelmesini ve beğenmesini ve puan almasını, sonra kendisininde (isterse tabi) app’ı kullanarak başka arkadaşlarını davet etmesini istiyorum, fakat öyle birşey yapamıyorum, ne yapmam gerekli bilgilendirebilirmisin?

    • Bu uygulama, Facebook’ta yer alan oyunlar mantığıyla çalışan bir uygulama. Bundan dolayı da, sayfa beğendirme tarzı uygulamalar bu uygulamanın kapsamı dışarısında kalıyor. Sizin istediğiniz çok daha farklı yani sayfa içi uygulama. Sayfa içi uygulamalar konusuyla ilgilenmediğim için sizi yanlış yönlendirmek istemiyorum.

  8. veritabanına kayıt etmeyi denedim veritabanına request id yerine “undefined” kayıt oluyor. bunun sebebi nedir acaba.

    • Hata ile ben karşılaşmadığım için çözümü maalesef bulmam mümkün değil. Bir kişi daha aynı hatayı aldığını söylemişti ve sorunu bu bağlantıdaki kod ile çözmüş.

      • Üstte izin vermeden olmaz demiştiniz. Ben izin almadan yapıyorum zaten. İzin almadan davet gönderebilmem için ne yapmalıyım peki?

        • Yukarıda bulunan linki düzelttim. Bu uygulamanın maalesef uygulama izni almadan çalışması mümkün değil. Çünkü kişiye puan verdirme işlemini içeriyor. Eğer amacın sadece davet yaptırmak ise daha önce yazdığım bu yazıyı kullan ya da Fbml ile arkadaş davet diye arama yap.

  9. Uygulamayı facebook’a nasıl aktara biliyoruz?

  10. Hocam burdakı Ids.request_ids kodu calısmıyor sanırsam ordan post edılen verı gozukmemekte sadece kısının id adresı gelıyor bunun hakkında nasıl bır yol ızlememız gerekmekte??

    • Bir okurun yazdığına göre request_ids konusunda değişiklik olmuş. Maalesef facebook dökümantasyonuna yansımamıştı.


  11. bcakir:

    Bir okurun yazdığına göre request_ids konusunda değişiklik olmuş. Maalesef facebook dökümantasyonuna yansımamıştı.

    evet sorunu
    var requests = request_ids.join(‘,’);
    $.post(‘handle_requests.php’,{uid: , request_ids: requests},function(resp) {
    // callback after storing the requests
    });

    bu kod ile çözebiliriz, handle_requests.php dosyası içerisine de veri klasorunun ıcerıgını eklersek hıc bır sorun olmaz

  12. Öncelikle bu yazınız gerçekten çok işime yaradı çok teşekkür ederim size. Size sorum örneğin bir yarışma uygulaması düzenlesem bu sıralamaları kullanıcılara nasıl gösterebilirim?

    • Yarışma puanları gibi skorları kendi veritabanınıza kaydedip, buradan istediğiniz şekilde ve istediğiniz verileri kullanıcılarınıza kolayca gösterebilirsiniz.


  13. Serkan:

    Öncelikle bu yazınız gerçekten çok işime yaradı çok teşekkür ederim size. Size sorum örneğin bir yarışma uygulaması düzenlesem bu sıralamaları kullanıcılara nasıl gösterebilirim?

    mysql bilgisine ihtiyacın var ogrenmek ıstıyorsan gercekte yanı kopyala yapıştırla yapmak istemıyorsan yok bn oyle yapmak ıstıyrum dıyorsan mysq sıralama nasıl yaparım yaz google amcaya ordan bulursun

  14. Arkadaşlar merhaba; Facebook birçok şeyi güncellemiş örneğin normalde standart izinlerle kullanıcının herhangi bir sayfayı beğenip beğenmediğini öğrenebiliyorken şuan user_likes iznini almadan bunu başaramıyoruz.

    Benim Sorum ise şu bir kullanıcı bir kez uygulamayı kurdu ve izinleri verdi bu izinleri nasıl güncelleriz mesela başta almadığımız bir izni daha sonra nasıl alabiliriz.?

  15. Sayin Çakir ; Benım size bir sorum olucaktı . Örneğin bir uygulamamız var uygulama sıfır bir uygulama davet metodu facebook’ta arkadasın varsa davet penceresi acılır ve davet edilecek arkadaslar listelenir. İşte benım sorum burda baslıyor…
    [ Örneğin davet edicek kişi benim arkadaşım değil.. Ve Kişinin id’sine göre bir davet metodu oluyor mu? ]
    Şahsım adına böyle bir olay gercekleştide bu konu hakkında bir bilgi verirseniz sevinirim.

    • İstediğiniz yapılabilir fakat kişinin kendi arkadaşları dışında yapılan davet istekleri Facebook tarafından spam olarak sayılıyor. Kişisel olarak, spam olarak kabul edilen bir şeyin nasıl yapıldığını göstermeyi etik açıdan uygun bulmuyorum. Bundan dolayı bu konuda yardım edemeyeceğim.

  16. Üzgünüz, kullanmakta olduğun uygulama yanlış yapılandırılmış. Lütfen daha sonra tekrar dene

    bende böyle bir hata verdi nedir acaba cevabınız bekliyorum teşekkürler

    • Bu uygulamayı yaptıktan sonra facebook birçok değişiklik yaptı, sorun bundan dolayı kaynaklanıyordur. Ayrıca bu bir facebook sayfa uygulaması değil (facebook oyunları gibi çalışır). Bundan dolayı facebook sayfalarınızda kullanamazsınız.

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

Daha fazla Facebook, JavaScript, JQuery, MySQL, Php
Kapat