FACEBOOK UYGULAMA YAPMA
Facebook uygulaması yapmak, Facebook for Developers panelinde App ID alıp Graph API ve OAuth akışıyla kullanıcı yetkisi almak demektir. Süreç App ID oluşturma, izin scope'u tanımlama ve App Review onayı olmak üzere üç ana basamaktan oluşur.
Facebook for Developers Hesabı Neden Ayrı Bir Şey?
Normal Facebook profili sosyal kullanım içindir. Geliştirici tarafı ise developers.facebook.com alt domaininde ayrı bir konsol olarak çalışır ve normal hesabınızı "geliştirici" olarak yükseltmenizi ister. Bu yükseltme tek tıkla olur ama ardından telefon doğrulaması ve bazen kimlik doğrulaması istenir. Geliştirici hesabı olmadan ne uygulama oluşturabilirsiniz ne de Graph API çağrılarına izin veren bir App ID alabilirsiniz.
Konsola girdiğinizde üç ana sekme görürsünüz. My Apps oluşturduğunuz uygulamaların listesidir; Docs resmi dokümantasyonu açar; Tools içinde ise Graph API Explorer, Access Token Debugger ve Webhooks test ortamı yer alır. Explorer çoğu zaman ilk yarım saatte en çok zaman geçirilen sekmedir — gerçek bir kod yazmadan API çağrılarını deneyebilirsiniz. Meta for Developers ana sayfası tüm bu araçların güncel sürümlerini barındırır.
App Oluşturma Akışı Nasıl İşliyor?
My Apps ekranında Create App düğmesi sizi iki ekranlık bir sihirbaza alır. İlk ekranda use case seçimi yapılır. Use case, uygulamanızın ne işe yarayacağını platforma önceden bildirir; alacağınız izinler de buna göre filtrelenir.
- Authenticate and request data from users with Facebook Login: Sadece login akışı kurmak isteyen web/mobil uygulamalar için.
- Other: Birden fazla ürünü (Login + Pages + Messenger gibi) tek uygulamada birleştirmek istediğinizde seçilir; izinler tek tek eklenir.
- Games: Facebook üzerinde oynanan veya skor paylaşan oyunlar için ayrı bir kanal.
- Business: Sayfa, reklam, WhatsApp Business gibi kurumsal varlıklara erişen entegrasyonlar için.
İkinci ekran uygulama adını, iletişim e-postasını ve hesabınızı bağlamak istediğiniz Business Portfolio'yu sorar. Business Portfolio zorunlu değildir; bireysel proje için boş bırakılabilir. Onay verildiği anda uygulamanız development mode'da oluşur — sadece siz ve eklediğiniz test kullanıcıları ona erişebilir. App Dashboard açıldığında sol menüde App Settings > Basic, Use Cases, App Roles ve App Review bölümlerini görürsünüz.
App ID ve App Secret Nasıl Saklanır?
Dashboard'a girer girmez sayfanın üstünde 15 haneli sayısal bir App ID ve onun altında App Secret alanı görürsünüz. App ID gizli değildir — istemci tarafı JavaScript SDK'sına bile gömülür. App Secret ise asla tarayıcıya veya mobil binary'ye gömülmemelidir; sunucu tarafında ortam değişkeni olarak tutulur.
# .env (sunucu tarafı)
FB_APP_ID=981234567890123
FB_APP_SECRET=8c0a4f2e1b9d7a3f5e6c8d2b1a4f7e3c
FB_REDIRECT_URI=https://siteniz.com/auth/facebook/callbackApp Secret sızdığında saldırgan sizin uygulamanız adına token üretebilir. Sızma şüphesi varsa Dashboard üzerinden Reset düğmesi ile yeniden oluşturmak gerekir; eski Secret ile alınmış uzun ömürlü token'lar geçersiz olur. Bir başka iyi alışkanlık appsecret_proof'tur: her Graph API çağrısında access token'ı App Secret ile HMAC-SHA256 imzalayıp gönderirsiniz, Meta bu imzayı kontrol eder. Mobil token çalınsa bile saldırgan Secret'ı bilmediği için API çağrısı atamaz.
Graph API Çağrıları Nasıl Yazılır?
Graph API REST tabanlıdır — https://graph.facebook.com/v19.0/ kök URL'ine GET, POST veya DELETE atarsınız. Kaynak yolu kullanıcının ya da varlığın ID'sidir, fields parametresi hangi alanların döneceğini belirler.
// Node.js — kullanıcı profilini çekme
const accessToken = process.env.FB_USER_TOKEN;
const fields = 'id,name,email,picture.type(large)';
const response = await fetch(
`https://graph.facebook.com/v19.0/me?fields=${fields}&access_token=${accessToken}`
);
const profile = await response.json();
console.log(profile.id, profile.name);Çağrıyı kodla yazmadan önce Graph API Explorer'da denemek zamandan kazandırır — alanlar yanlış, izin eksik veya token'ın yaşı dolmuşsa hata mesajı net olur. Hata yapısı her zaman aynıdır:
{
"error": {
"message": "Unsupported get request. Object with ID 'me' does not exist...",
"type": "GraphMethodException",
"code": 100,
"fbtrace_id": "Ax8pQrZ..."
}
}Kod 100 genellikle alan adı veya ID hatasını; kod 190 token'ın geçersiz olduğunu; kod 4 ise rate limit aşımını gösterir. Üretim kodunda bu kodlara göre retry mantığı yazılır. Sunucu tarafı entegrasyonlarda Node.js çoğu zaman tercih edilir; daha derin örnekler için Node.js eğitim programı Graph API gibi REST entegrasyonlarını proje üzerinden ilerletir.

Facebook Login ile OAuth Akışı Nasıl Kurulur?
Facebook Login, OAuth 2.0 üzerine kuruludur. İki yaygın akış vardır.
- Server-side flow (authorization code): Tarayıcı kullanıcıyı Facebook'a yönlendirir, kullanıcı izin verince Meta sizin redirect URI'nize tek kullanımlık bir
codebırakır. Sunucunuz bu code'u App Secret ile birlikte token endpoint'ine gönderir ve access token alır. Token sunucu RAM'inde veya veritabanında kalır, istemciye gitmez. - Client-side flow (implicit / SDK): JavaScript SDK
FB.login()çağrısı bir popup açar, kullanıcı izin verir, access token doğrudan tarayıcıya döner. Kurulum hızlıdır ama token istemci tarafındadır — saldırı yüzeyi büyür.
Web projelerinde authorization code akışı her zaman tercih edilmelidir. Redirect URI App Settings > Use Cases > Customize altında izinli URL listesine eklenmek zorundadır; aksi halde Meta "URL Blocked" hatası fırlatır.
// 1. Yönlendirme URL'i
const authUrl = `https://www.facebook.com/v19.0/dialog/oauth?` +
`client_id=${process.env.FB_APP_ID}&` +
`redirect_uri=${encodeURIComponent(process.env.FB_REDIRECT_URI)}&` +
`state=${csrfToken}&` +
`scope=email,public_profile`;
// 2. Callback'te code'u token'a çevir
const tokenRes = await fetch(
`https://graph.facebook.com/v19.0/oauth/access_token?` +
`client_id=${process.env.FB_APP_ID}&` +
`client_secret=${process.env.FB_APP_SECRET}&` +
`redirect_uri=${encodeURIComponent(process.env.FB_REDIRECT_URI)}&` +
`code=${req.query.code}`
);
const { access_token, expires_in } = await tokenRes.json();State parametresi CSRF saldırılarına karşı zorunludur — session'da rastgele bir değer üretip callback'te eşleştirmezseniz saldırgan başka birinin Facebook hesabını sizin sisteminize bağlayabilir. Tarayıcı tarafı entegrasyonun yapısını daha iyi anlamak için JavaScript eğitim programı OAuth ve fetch API çağrılarını uygulama içinde gösterir.
İzinler ve Scope Yönetimi Nasıl Çalışır?
Her Graph API çağrısı bir veya daha fazla permission scope'a bağlıdır. Scope'lar iki sınıfa ayrılır:
- Public izinler:
email,public_profile— App Review gerektirmez, herhangi bir kullanıcıya hemen sorulabilir. - Advanced izinler:
pages_show_list,pages_read_engagement,publish_to_groups,ads_managementgibi — yalnızca uygulama sahibi ve test kullanıcılarına sorulabilir; canlıya çıkmadan önce App Review'dan geçer.
Önemli ayrım şudur: kullanıcı her izni reddedebilir. email isteyen bir uygulamada bile kullanıcı "Devam Et" diyebilir ama e-postayı paylaşmayabilir. Backend bunu kontrol etmeli, eksikse yumuşak hata göstermelidir.
// Hangi izinler verilmiş?
const permRes = await fetch(
`https://graph.facebook.com/v19.0/me/permissions?access_token=${accessToken}`
);
const { data } = await permRes.json();
const granted = data
.filter(p => p.status === 'granted')
.map(p => p.permission);
if (!granted.includes('email')) {
// E-postasız akış: kayıt formunda email iste
}App Review başvurusunda her ileri izin için ne için kullanacağınızı anlatan kısa bir video ve test giriş bilgisi sunulur. İncelemeci uygulamayı gerçekten açar, akışı görür, onaylar. Reddedilirse gerekçeyle birlikte tekrar başvurabilirsiniz.
Geliştirme Modundan Canlı Moda Nasıl Geçilir?
Yeni uygulama Development modunda doğar. Bu modda yalnızca App Roles altında listelenen kişiler (developer, admin, tester) login olabilir. Diğer kullanıcılar "This app is in development mode" hatası alır. Canlıya geçmek için üç koşul tamamlanmalıdır.
- Business verification: Kurumsal izinler isteniyorsa şirket tüzel belgeleri yüklenir; bireysel uygulamada gerekmez.
- Privacy Policy URL: App Settings > Basic altında veri kullanım politikası URL'i zorunludur; localhost veya boş bırakılamaz.
- Data Use Checkup: Yılda bir defa hangi izinleri hangi amaçla kullandığınızı yeniden onaylarsınız; aksi halde token'lar kısıtlanır.
Bu üç adım tamamlanınca App Settings > Basic sayfasının üst köşesindeki App Mode anahtarı Live'a çevrilir. Geçişten sonra log'ları izlemek için App Dashboard > Analytics altında çağrı hacmi, hata oranı ve token süresi metriklerini takip edebilirsiniz. Hata oranı yüzde birin üstüne çıkarsa Meta uyarı yollar; yüzde beş üstü sürekli kalırsa otomatik kısıtlama uygulanır.
Sık Sorulan Sorular
Facebook uygulaması yapmak için programlama bilmek şart mı?
API çağrısı atan veya login akışı kuran bir uygulama için programlama zorunludur — JavaScript, PHP, Python veya benzeri bir dilde HTTP istek atabilmek gerekir. Sadece Facebook Sayfası yönetmek isteyenler için kod yazmadan kullanılan üçüncü taraf araçları vardır; ama bunlar "Facebook uygulaması" değil, mevcut platform üzerinden çalışan otomasyon araçlarıdır.
App ID ile App Secret arasındaki fark nedir?
App ID uygulamanızın kimliğidir ve gizli değildir — istemci kodunda bulunabilir. App Secret ise OAuth token alışverişinde kullanılan parolanızdır ve yalnızca sunucu tarafında saklanır. Secret sızarsa saldırgan uygulamanız adına token üretebilir; bu yüzden GitHub'a commit edilmemesi ve ortam değişkeni olarak tutulması gerekir.
Test ortamında neden e-postam görünmüyor?
Birkaç sebebi olabilir. İlki kullanıcının izin ekranında e-posta alanını manuel kaldırmış olmasıdır. İkincisi izin scope'una email eklemeyi unutmuşsunuzdur. Üçüncüsü kullanıcının Facebook hesabında doğrulanmış e-posta yoktur — bu durumda Graph API alanı null döner. Permissions endpoint'i hangisinin geçerli olduğunu söyler.
Graph API'nin sürüm numarası neden değişiyor?
Meta her yaklaşık üç ayda yeni Graph API sürümü yayınlar (örnek: v18.0, v19.0). Eski sürümler iki yıl boyunca desteklenir, sonra deprecate edilir. Uygulamanız sürüm bağımlı şekilde yazılmalıdır — URL'de sürüm numarası sabit tutulur, asla "latest" gibi etiket kullanılmaz. Yeni sürüm çıkınca changelog okunup migrasyon planlanır.
App Review ne kadar sürer?
Sade izinler (pages_show_list, pages_read_engagement gibi) tipik olarak iki-yedi iş günü içinde sonuçlanır. Hassas izinler (ads_management, business_management) iki-üç haftaya kadar uzayabilir ve ek belge ister. İncelemeci uygulamayı gerçekten açar, akışı dener; çalışmayan veya video ile uyuşmayan bir giriş ekranı doğrudan red sebebidir.
Access token ne kadar süre geçerli kalır?
Üç tür token vardır. Kısa ömürlü kullanıcı token'ı yaklaşık iki saat yaşar — login akışından çıkar çıkmaz alınır. Uzun ömürlü token altmış güne kadar geçerlidir ve kısa token'dan exchange ile elde edilir. Page access token uzun ömürlü kullanıcı token'ından üretildiğinde süresiz olabilir; bu yüzden sunucu botları genellikle page token üzerinden çalışır.
Localhost üzerinden test edebilir miyim?
Evet, ama OAuth redirect için HTTPS gereklidir. localhost bu kuralın istisnasıdır — Meta http://localhost ve farklı portları kabul eder. Üretim domain'i için ise Let's Encrypt veya başka bir CA üzerinden geçerli sertifika zorunludur. Tünel araçları (ngrok, cloudflared) gerçek domain testlerinde işe yarar; verdiği HTTPS URL'i geçici olarak redirect URI listesine eklenir.
Facebook for Developers ekosistemi başlangıçta dağınık görünür ama akış tek bir mantığa oturur: App ID kim olduğunuzu söyler, izinler ne yapabileceğinizi belirler, App Review ise canlıya çıkış için son kapıdır. Bu üç parçayı yerli yerine koyup Graph API çağrılarını net hata kodlarıyla yönetmek, uygulamanızın hem ilk haftalardaki test süreçlerinde hem aylar sonra trafik geldiğinde sağlam kalmasını sağlar.



