25 Ekim 2014 Cumartesi

FacebokClient sınıfı

Sosyal medya alemini kasıp kavurmaya devam eden Facebook sadece kullanıcıları değil biz geliştiricileri de düşünerek bir çok SDK’yı bizlere sunuyor bu gün sizlere FacebookClient sınıfının metotlarından bahsedeceğim öncelikle projemize Facebook SDK’yı projeye dahil edelim.

Ben bu yazıyı yazdığımda version 6.8.0 sürümü aktif sizde dilerseniz bu sürümü veya üst sürümlerini kullanabilirsiniz.

Solution Explorer kısmından References sağ tıklayıp Manager NuGet Packages tıplayıp search kısmına Facebook sdk yazıyoruz ve Install diyoruz.
Facebook sdk’yı projeye dahil ettikten sonra yeni bir sınıf oluşturup bir önceki makalede almış olduğumuz App ID ve App Secret keylerini bu sınıfta kullanacağız.
Dört tane private değişkenimiz olucak bunlar
AppId  ve SecretId
CallBackUrl= developers.facebook.com da  uygulamanıza girip Settings > Advanced sayfasında Deauthorize Callback URL kısmına yazmış olduğunuz Url bu değişkene yazıcaz böylece biz kendi web projemizden gönderdiğimiz link facebook a gidip app id ve secret kontrol edip tekrar vermiş olduğumuz url’ye yönlendirilcek…
Ve son değişkenimiz…
Scope= Kullanıcının hangi bilgilerine ihtiyaç duyduğumuzu bu değişkende belirticez kullanıcı da size bu bilgileri almanız için izin vericek. Biz bu örnekte sadece user_about_me  ve email  Access tokenslerini kullanıcaz. Bu sayfadan diğer tokensleri görebilirsiniz.
Buradan sonrasını kodların üst kısımlarında açıklama şeklinde devam edicez...
  //facebooktan gelen kullanıcı bilgilerini yükleyeceğimiz nesnemiz…
    public class FacebookProfile
    {
        public string Id { get; set; }
        public string Name { get; set; }
        public string LastName { get; set; }
        public string Mail { get; set; }
    }
  public class FacebookService
    {
        // facebook app id
        private string AppId = "783828931674793";
        //facebook app secret id
        private string AppSecret = "45d1e79ef55576f3601a651fe9ddfc64";

        // Facebook login için kullanıcıyı facebook'a yönlendirirsiniz. Daha sonra kullanıcı gerekli
        // izinleri verdikten sonra facebook o kullanıcıyı size yönlendirir. CallBackUrl ile
        //siz facebook'a kullanıcıyı şu adresime yönlendir diyorsunuz.
        private string CallbackUrl = "http://localhost:57871/Home/FacebookSayfa";

        // Kullanıcının hangi bilgilerine ihtiyaç duyduğunuzu scope ile belirtirsiniz ve
        // kullanıcı da size bu bilgileri alabilmeniz için izin verir.
        private string Scope = "user_about_me,email";

        // Sdk'in sağladığı sınıftır.
        FacebookClient fb = new FacebookClient();

        // Bu metod ile kullanıcıyı yönlendireceğiniz facebook url'i oluşur
        public Uri CrateLoginUrl()
        {
            return fb.GetLoginUrl(
                                new
                                {
                                    client_id = AppId,
                                    client_secret = AppSecret,
                                    redirect_uri = CallbackUrl,
                                    response_type = "code",
                                    scope = Scope,

                                });
        }

        // AccessToken facebook'un size verdiği erişim kodudur. OAuth konusuna bakarsanız ne olduğunu daha iyi anlayabilirsiniz.
        public dynamic GetAccessToken(string code, string state, string type)
        {
            dynamic result = fb.Post("oauth/access_token",
                                  new
                                  {
                                      client_id = AppId,
                                      client_secret = AppSecret,
                                      redirect_uri = CallbackUrl,
                                      code = code
                                  });
            return result.access_token;
        }

        // Kullanıcı bilgileirni çektiğimiz metod
        public FacebookProfile GetUserInfo(dynamic accessToken)
        {

            var client = new FacebookClient(accessToken);
            var profile = new FacebookProfile();

            // "/me" yerine kullanıcının facebook id'sini de yazabilirsiniz. Ama zaten "me", o an uygulamayı kullanan kullanıcının kendisi oluyor.
            dynamic me = client.Get("/me");

            //Facebooktan gelen bilgileri oluşturduğumuz nesnemize yüklüyoruz  ve return ediyoruz
            profile.Name = me.first_name;
            profile.LastName = me.last_name;
            profile.Id = me.id;
            profile.Mail = me.email;
            return profile;
        }
    }
Sınıfımızı oluşturduktan sonra Mvc projemizde 2 action oluşturup bu metotları çağıralım.
Controller actionlarımız ilk olarak FacebookLogin actionu çağırıcağız o action facebook’a gidip ordan FacebookSayfa Actionuna düşecek ordanda View sayfamızda bilgileri yazdıracağız.

  
public ActionResult FacebookSayfa(string code, string state, string type)
        {
            //Facebook Service sınıfımızı tanımlıyoruz
            FacebookService fb = new FacebookService();

            //facebooktan return olduktan sonra bize 3 adet değer geliyor code,state ve type bunları GetAccessToken metotduna gönderiyoruz buda bize geriye AccessToken kodunu döndürüyor
            string token = fb.GetAccessToken(code, state, type);

            //tokeni tekrar GetUserInfo metotduna gönderiyoruz ve buda bize kullanıcı bilgilerinin bulunduğu FacebookProfile nesnemizi geri döndürüyor
            FacebookProfile profile = fb.GetUserInfo(token);
            return View(profile);
        }
        public ActionResult FacebookLogin()
        {
            //Facebook Service sınıfımızı tanımlıyoruz
            FacebookService fb = new FacebookService();
            //facebook url'yi oluşturup o url'ye yönlendiriyoruz
            string url = fb.CrateLoginUrl().ToString();
            return Redirect(url);
        }
Projeyi çalıştırıp http://localhost:57871/Home/FacebookLogin dediğim zaman facebook sayfasına yönlendirip benden BlogTest şu bilgilere erişebilecek izin veriyormusunuz diye panel açıldı buna tamam diyorum ve tekrar kendi localhostuma bu sefer FacebookSayfa actionuna yönlendiriliyor ve kullanıcı bilgilerini çekiyoruz.

Tekrar locallimize yönlendirdikten sonra modelden aldığımız bilgileri sayfaya yazıyoruz. Eyer daha farklı bilgilere ulaşmak istiyorsanız score kısmına eklemeniz ve FacebookProfile  nesnemize propertiesi yeterli olacaktır.

Bu bilgilerle ister facebook id ye göre sitenize üye yapabilirsiniz veya yorum kısmına direk bu isim ad soyad da yorum yapıldı yada score kısmını değiştirip kullanıcının resimlerini durumlarını vb. bilgilerini sitenizde kullanabilirsiniz.

24 Ekim 2014 Cuma

FacebooK SDK APİ Key Almak

 Facebook geliştirici platformu’nun İlk yayınladığı Mayıs 2007 tarihinden bu yana git gide büyüyerek 1 milyondan fazla geliştiricisinin bulunduğu son günlerde hemen hemen her sitede bir beğen düğmesinin veya facebook’ta paylaş düğmesinin yada üyelik formunu doldurmadan siteye facebook hesabınız ile giriş yapabilmenizi sağlayan Facebook SDK konusuna değinmek istiyorum. Ama bundan önce facebook apimizin olması gerekmektedir öncelikle...

Facebook APİ Key Almak

Öncelikle https://developers.facebook.com adresine girerek Apps sekmesinin altındaki Register as a Devoloper seçeneğini seçiyoruz.

Daha sonra açılan panelde bize facebook platformu politikası ve facebook gizlilik ilkelerini kabul etmemizi söylüyor bu seçeneği aktif yaparak devam ediyoruz.
Kayıt olabilmemiz için bizden doğru bir telefon numarası istiyor telefon numarasınız girdikten sonra sms ile veya aranarak onay koduna erişebilirsiniz. Benim açtığım hesap aktif olmadığı için ilk önce sms yoluyla aktif ettim.

Şuan başarılı bir şekilde aktivasyonu yaptık şimdi app keyi alabiliriz..
Tekrar Apps sekmesinden bu sefer Add a New App seçeneğini seçiyoruz ve açılan panelde oluşturacağımız api internet uygulaması olacağı için İnternet Sitesi seçeneğine tıklıyoruz..
Burada ise bizden apinin adını koymamızı istiyor ben BlogTest ismini vereceğim sizde dilediğiniz bir ismi verebilirsiniz. Ve yazdıktan sonra Create New Facebook App ID düğmesine basıyoruz..
Şimdi oluşturacağımız appnin kategorisini seçmemizi istiyor. Kullanacağınız yere göre bir seçeneği seçebilirsiniz pekte önemi yok açıkçası. J Seçtikten sonra Create App ID düğmesine basıyoruz.

Açılan sayfada alt tarafta facebook sdkyı javascript ile kurmaya yönelik örnek vermiş ben bir sonraki makalede .net tarafında Facebook.FacebookClient sınıfı ile bağlantımızı sağlayacağız.
Sayfanın en altında web siteniz hakkında kısmına Site URL’si ve  Mobil Site URL’Sİ kısımlarını dolduruyoruz localhostta çalışan arkadaşlar localhost urlsini yazsınlar ancak visual studio 2010 ve alt sürümlerde proje her açıldığında IIS Express tarafından farklı bir url verilmektedir öncelikle bunu sabit bir porta taşımanız gerekmektedir. Bunun içinde projenizde Solution Explorer kısmından projenize sağ tıklayıp properties seçeneğini seçiniz ve sol taraftan web sekmesine gelerek altaki resmimdeki gibi Specific Port verebilirsiniz. Böylece Portu sabitlemiş olursunuz.

Bu işlemden sonra projeyi run ederek açılan sayfadan urlyi alıp aşağıdaki gerekli yere yazıp ileri diyebilirsiniz.
Ve api kayıt işlemimiz gerçekleşti. Sayfayı yenileyerek tekrar Apps sekmesinde vermiş olduğunuz api adını görebilirsiniz ve onu seçerek api bilgilerini görebilirsiniz ancak apiniz kendi hesabınızda çalışacaktır fakat farklı kullanıcılar bu apiyi kullandıklarında hata alıcaklardır. Bu hatayı önlemek için apinize girerek Settings sekmesini seçinip oradaki App Domains ve Contact Email bilgilerini giriniz. En altaki Save Changes düğmesine basınız…
Son olarak da Status & Review sayfasından apinizi aktif etmeniz gerekmektedir. Aktif ettikten sonra App ID ve App Secret keyiniz aktif olacaktır bunları bir sonraki makalede FacebookClient sınıfı ile kullanmayı görüceksiniz.
Sonuç olarak sıfırdan bir facebook api key oluşturmayı ve bu api keyi aktif hale getirmeyi görmüş olduk ama unutmayın ki başta localhost url’si verdiğimiz için ne kadar aktif etsek de kullanıcılar bizim localhosta bağlanamayacaktır için şuan sadece kendiniz kullanabilirsiniz eyer bir sunucuda kullanmak istiyorsanız url kısımlarına o sunucunun adresini girmeniz gerekmektedir. Bir sonraki makalede görüşmek dileği ile…





23 Ekim 2014 Perşembe

is ve as Operatörleri kullanımı

Aslında bakarsanız nereden başlayacağımı bilemiyorum çünkü bu makale blog sitemde yazdığım ilk makale olacak. :) Eğer talep olursa devamında farkı konularda yazmayı düşünüyorum bu yüzden geri bildirimleriniz benim için önemli olacaktır...

Normalde veri tiplerini dönüştürmeyi sıklıkla kullanırız. ToString, ToInt32, ToDateTime vb. gibi fakat nesneler üzerinde tip dönüşümlerini nasıl sağlayabiliriz? İşte bu makalede sizlere bunu nasıl sağlayabileceğimizi ve bu dönüşümlerin uyumlu olup olmadığını nasıl kontrol edebileceğimizi anlatmaya çalışacağım. Çok fazla uzatmadan kodlara geçelim isterseniz..
is Operatörü
İs operatörü çalışma zamanında bir nesnenin başka bir tipe dönüşmesinin uyumlu olup olmadığını kontrol eder.
Kullanım Şekli : Kontrol_Edilecek_Tip is Kontrol_Edilen_Tip 
Return Tipi :Eğer kontrol edilecek tip istenilen türe dönüşümü uyumlu ise True uyumlu değil ise False değer döndürecektir.

Dilerseniz bir örnekle konuyu pekiştirelim…
 
namespace ConsoleApplication2
{
    class Program
    {
         class Araba
        {
            public string Model { get; set; }
            public decimal Fiyat { get; set; }
        }
         class Kitap
         {
             public string Adi { get; set; }
             public string Yazari { get; set; }
         }
        static void Main(string[] args)
        {
            Araba araba = new Araba();
            araba.Fiyat = 54.250M;
            araba.Model = "BMW";

            Kitap kitap = new Kitap();
            kitap.Adi = "Bu işte bir yalnızlık var";
            kitap.Yazari = "Tuna Kiremitçi";

            bool kontrolEt = kitap is Araba;
            Console.WriteLine("Kitap is Araba :{0}",kontrolEt);

            kontrolEt = araba is Araba;
            Console.WriteLine("Araba is Araba :{0}", kontrolEt);

            araba = null;

            kontrolEt = araba is Araba;
            Console.WriteLine("Araba is Araba :{0}", kontrolEt);


            Console.ReadKey();
        }

    }
}
Araba ve Kitap adında 2 tane class oluşturduk ve birer nesne oluşturup veri girdik
bool kontrolEt = kitap is Araba; burada yukarda oluşturduğumuz kitap nesnesini is operatörü ile araba nesnesine dönüşüp dönüştüremiyeceğimizi kontrol ettik
Kitap nesnesi Araba nesnesi olmadığı için False değerini aldık.
kontrolEt = araba is Araba; bu kısımda ise araba nesnesi arabaya dönüşümünü kontrol ettik. Ve arabanın arabaya dönüşümü True sonucunu aldık.

peki bu nesnenin null olma durumunda ne gibi sonuç alırdık ? ilginçtir ki boş durumda da bize False değerini verecektir. Bunun sebebi null değer atadığımız zaman bellekten nesnenin bilgisi silindiği için False değeri aldık. Biz bir nevi null is Araba yazmış bulunuyoruz bu sebepten dolayı False değerini aldık.
Ekran çıktısı aşağıda.

as Operatörü
As operatörü uygun türler arasında dönüşümü sağlar. As operatörünün üretmiş olduğu değer referans türündendir.
Kullanım Şekli : dönüştürülecek_tip as dönüşecek_tip veya (dönüşecek_tip)dönüştürülecek_tip  şeklinde de kullanılabilir.
Return Tipi :dönüştürülecek tip olarak geriye döner
Kodlar..
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {
         class Araba
        {
            public string Model { get; set; }
            public decimal Fiyat { get; set; }
        }
         class Kitap
         {
             public string Adi { get; set; }
             public string Yazari { get; set; }
         }
        static void Main(string[] args)
         {
             Araba araba = new Araba();
             araba.Fiyat = 54.250M;
             araba.Model = "BMW";

             Kitap kitap = new Kitap();
             kitap.Adi = "Bu işte bir yanlızlık var";
             kitap.Yazari = "Tuna Kiremitçi";

             object objectTur = kitap;

             Kitap kitap2 = objectTur as Kitap;

             Console.WriteLine(kitap2.Adi);

             Console.ReadKey();
        }

    }
}

Direkt object objectTur = kitap; dan devam etmek istiyorum. Aslında bakarsanız burada Boxing ve Unboxing işlemleri gerçekleşiyor fakat bunları başka yazıda derinlemesine ele almakta fayda var. Kitap türünü object türüne atadık ve yeni bir kitap2 adında bir kitap nesnesi oluşturup objectTur isimli değişkeni as operatörü ile Kitap nesnemize döndürdük. Bir çeşit convert işlemi gerçekleştirmiş bulunmaktayız..
Peki ya aşağıdaki gibi bir kod satırında ne gibi bir durumla karşılaşacaktık.
Kitap kitap2 = araba as Kitap;

Şeklinde bir hata ile karşılaşacaktık burada kısaca araba tipinin kitap tipine dönüştürülemediğini anlatılmak istenmekte.

Bazı durumlarda çalışma esnasında da hata ile karşılaşmamak için şu şekilde bir kullanımda gerçekleştirilebilir.
object objectTur = kitap;
            if (objectTur is Kitap)
            {

                Kitap kitap2 = objectTur as Kitap;
                Console.WriteLine(kitap2.Adi);
            }
if ile  referans üretilecek tipin is operatörü yardımı ile tür dönüşümünün uyumlu olup olmadığını kontrol edebiliriz.
Sonuç
Sonuç olarak bu yazımda sizlere is ve as operatörlerinin kullanımları ve istisnai durumlarda ne gibi mesajlar alacağımızdan bahsetmeye çalıştım. C# genel bilgisi olanlar için iyi bir yazı olacağını düşünüyorum.
Başka bir yazıda görüşmek dileğiyle…