Expo Push API ile Bildirim Gönderme
Sunucunuzdan veya bir curl komutundan Expo Push API'ye bir bildirim yükünü POST edin, belirli bir cihaz token'ını hedefleyin ve teslimatı Expo kontrol panelinde doğrulayın.
Expo Push API ile Bildirim Gönderme, CoddyKit'te ücretsiz bir React Native Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, React Native Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. React Native Academy kursu toplamda 4 dersten oluşur.
Expo Anlık Bildirim Hizmeti
Expo Anlık Bildirim Hizmeti (EPNS), sunucunuz ile platforma özgü anlık bildirim ağ geçitleri (Apple APNs ve Google FCM) arasında yer alan bir aracıdır. İki ayrı hizmetle tümleştirme yapmak yerine Expo'nun API'sine tek bir HTTP isteği gönderirsiniz; platform farklılıklarını sizin için o yönetir.
EPNS, Expo'nun yönetilen iş akışını kullanan uygulamalar için ücretsizdir ve sertifika yönetimini, token yönlendirmeyi, toplu işlemeyi ve hata raporlamayı üstlenir. Yüksek hacimli üretim uygulamalarında doğrudan APNs/FCM tümleştirmesine geçebilirsiniz; ancak EPNS çoğu uygulama için mükemmel bir başlangıç noktasıdır.
Expo Anlık Bildirim API Uç Noktası
Bir veya daha fazla bildirim mesajı içeren JSON gövdesiyle https://exp.host/--/api/v2/push/send adresine bir POST isteği gönderin. Her mesaj belirli bir Expo anlık bildirim token'ını hedefler ve bildirim içeriğini içerir.
API, verimli toplu işleme için istek başına en fazla 100 mesaj kabul eder. İstekleri her zaman sunucunuzdan gönderin, istemciden asla göndermeyin; istemci diğer kullanıcıların token'larını bilmez ve istemciden gönderim yapmak sunucu mantığınızı açığa çıkarır.
// From your backend server (Node.js example):
const response = await fetch('https://exp.host/--/api/v2/push/send', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({
to: 'ExponentPushToken[AbCdEfGhIjKl...]',
title: 'New message',
body: 'Alice sent you a message!',
}),
});
const result = await response.json();
console.log(result);Bildirim Mesajı Alanları
Bildirim mesajı nesnesi çeşitli alanları destekler:
- to (gerekli) — Expo anlık bildirim token'ı veya token dizisi
- title — kalın bildirim başlığı
- body — bildirim mesajı metni
- data — dokunulduğunda uygulamanın okuyacağı özel yükü içeren JSON nesnesi
- sound — cihaz sesini çalmak için
'default' - badge — iOS uygulama simgesindeki rozet sayısını ayarlayan tam sayı
- channelId — Android bildirim kanalı kimliği
const message = {
to: 'ExponentPushToken[AbCdEfGhIjKl...]',
sound: 'default',
title: 'Order Shipped',
body: 'Your order #1234 is on its way!',
badge: 1,
channelId: 'orders',
data: {
type: 'order_update',
orderId: '1234',
screen: 'OrderDetail',
},
};Birden Fazla Cihaza Gönderme
Aynı bildirimi birden fazla cihaza göndermek için (örneğin yayın veya kullanıcının tüm cihazlarına bildirim), to alanına bir token dizisi geçirin. Her token bildirimi alır.
Geniş kitleler için token listenizi 100'lük gruplara bölün ve her grup için ayrı bir API isteği gönderin. Expo Push API hız sınırları ve grup boyutu sınırları uygular; bu nedenle ölçekli kullanım için gruplama gereklidir.
// Send to multiple devices:
const messages = tokens.map((token) => ({
to: token,
title: 'New feature available!',
body: 'Check out what we built for you.',
data: { screen: 'WhatsNew' },
}));
// Chunk into batches of 100:
const chunks = [];
for (let i = 0; i < messages.length; i += 100) {
chunks.push(messages.slice(i, i + 100));
}
for (const chunk of chunks) {
await fetch('https://exp.host/--/api/v2/push/send', {
method: 'POST',
body: JSON.stringify(chunk),
});
}Expo Sunucu SDK'sını Kullanma
Ham HTTP istekleri yapmak yerine Node.js arka ucunuzda resmi expo-server-sdk npm paketini kullanın. Bu paket, gruplama, hata yönetimi ve teslim alındısı denetimini kullanıma hazır biçimde sağlar. npm install expo-server-sdk ile yükleyin.
SDK'nın sendPushNotificationsAsync yöntemi gruplamayı otomatik olarak yönetir ve daha sonra teslim alındılarını denetlemek için kullanabileceğiniz bilet nesneleri döndürür. Ayrıca hatalı token'lara API çağrısı yaparak kaynak tüketmemek için token'ları göndermeden önce doğrular.
// Backend (Node.js):
const { Expo } = require('expo-server-sdk');
const expo = new Expo();
const messages = tokens
.filter(token => Expo.isExpoPushToken(token))
.map(token => ({
to: token,
title: 'Hello!',
body: 'This is a push notification',
data: { type: 'greeting' },
}));
const chunks = expo.chunkPushNotifications(messages);
const tickets = [];
for (const chunk of chunks) {
const ticketChunk = await expo.sendPushNotificationsAsync(chunk);
tickets.push(...ticketChunk);
}Anlık Bildirim Teslim Alındıları: Teslimatı Doğrulama
Expo API'sine gönderim yaptığınızda hemen biletler alırsınız; bunlar mesajın kabul edildiğini, teslim edildiğini değil, doğrular. Birkaç dakika sonra gerçek teslimatı APNs/FCM'ye doğrulamak için teslim alındılarını denetleyin. Gönderim adımındaki bilet kimliklerini kullanarak teslim alındılarını https://exp.host/--/api/v2/push/getReceipts adresinden alın.
'error' durumuna ve DeviceNotRegistered koduna sahip teslim alındıları, token'ın artık geçerli olmadığı anlamına gelir; token listenizi temiz tutmak ve gereksiz API çağrılarını önlemek için token'ı veritabanınızdan kaldırın.
// After sending, check receipts (wait ~5 minutes):
const receiptIds = tickets
.filter(t => t.status === 'ok')
.map(t => t.id);
const receiptChunks = expo.chunkPushNotificationReceiptIds(receiptIds);
for (const chunk of receiptChunks) {
const receipts = await expo.getPushNotificationReceiptsAsync(chunk);
for (const [id, receipt] of Object.entries(receipts)) {
if (receipt.status === 'error') {
if (receipt.details.error === 'DeviceNotRegistered') {
await removeTokenFromDB(id); // clean up
}
}
}
}Anlık Bildirimleri Test Etme
Expo, https://expo.dev/notifications adresinde bir anlık bildirim test aracı sağlar. Expo anlık bildirim token'ınızı girin ve sunucu kodu yazmadan doğrudan kontrol panelinden test bildirimleri gönderin. Bu araç, gerçek bir cihazdaki bildirim görünümünü ve teslimatını test etmek için son derece değerlidir.
Test bildirimleri göndermek için terminalden bir curl komutu da kullanabilirsiniz. Bu yöntem geliştirme sırasında daha hızlıdır ve önce sunucu kodu yazmadan istediğiniz yükleri ve veri nesnelerini test etmenizi sağlar.
# Test push from terminal:
curl -H 'Content-Type: application/json' \
-X POST 'https://exp.host/--/api/v2/push/send' \
-d '{
"to": "ExponentPushToken[YOUR_TOKEN_HERE]",
"title": "Test Notification",
"body": "Hello from curl!",
"data": { "test": true }
}'
# Or use Expo dashboard:
# https://expo.dev/notificationsUygulamadan Bildirim Zamanlama
Bir sunucudan gönderilen anlık bildirimlerin yanı sıra, uygulamanın kendisinden yerel bildirimler de zamanlayabilirsiniz; bunlar çevrimdışı çalışır ve sunucu gerektirmez. Bildirimin ne zaman gönderileceğini tanımlayan bir tetikleyiciyle Notifications.scheduleNotificationAsync kullanın.
Yaygın tetikleyici türleri: seconds — bir gecikmeden sonra gönder; date — belirli bir zamanda gönder; weekly — belirli bir hafta günü ve saatte gönder. Yerel bildirimler anımsatıcılar, alarmlar ve zamanlanmış kontroller için idealdir.
// Schedule a local notification 10 seconds from now:
await Notifications.scheduleNotificationAsync({
content: {
title: 'Reminder',
body: 'Time to review your daily goals!',
data: { screen: 'Goals' },
},
trigger: {
seconds: 10, // fires after 10 seconds
},
});
// Schedule for a specific date:
await Notifications.scheduleNotificationAsync({
content: { title: 'Meeting in 5 minutes', body: 'Team standup' },
trigger: new Date(Date.now() + 5 * 60 * 1000),
});Bildirim Önceliği ve Teslimatı
Bildirim önceliği, OS'nin bildirimi ne kadar agresif biçimde teslim edeceğini etkiler. Yüksek öncelikli bildirimler cihaz ekranını hemen uyandırır (mesajlar gibi acil uyarılar için kullanılır). Normal öncelikli bildirimler gruplandırılır ve uygun olduğunda teslim edilir (tanıtım içerikleri için kullanılır).
Expo Push API'de zamana duyarlı bildirimler için priority: 'high' ayarını kullanın. Ölçülü olun; çok fazla yüksek öncelikli bildirim göndermek, kullanıcıların bunları görmezden gelmesine yol açar ve kötüye kullanım durumunda Apple uygulamanızın bildirimlerinin önceliğini düşürebilir.
// High priority (message, call, alert):
{
to: token,
title: 'Incoming call',
body: 'Bob is calling you',
priority: 'high',
channelId: 'calls',
data: { screen: 'IncomingCall', callId: 'abc' },
}
// Normal priority (digest, update):
{
to: token,
title: 'Weekly summary ready',
body: 'See how you did this week!',
priority: 'normal',
channelId: 'digest',
}Uygulama Açılışında Bildirim Dokunmalarını Yönetme
Kullanıcı bir bildirime dokunduğunda ve uygulama tamamen kapalı olduğunda uygulama başlatılır. Bildirime göre doğru ekrana yönlendirmek için başlangıçta son bildirim yanıtını Notifications.getLastNotificationResponseAsync() kullanarak okuyun.
Bunu uygulamanızın başlangıç sürecinin erken bir aşamasında (App.js dosyasında veya kök gezinme bileşeninizde) okuyun ve yanıt bir data.screen yükü içerdiğinde yönlendirme yapın. Böylece anlık bildirimler ile uygulamanızdaki derin gezinme birbirine bağlanır.
useEffect(() => {
Notifications.getLastNotificationResponseAsync().then((response) => {
if (response) {
const { screen, id } = response.notification.request.content.data;
if (screen && navigationRef.isReady()) {
navigationRef.navigate(screen, { id });
}
}
});
}, []);Zamanlanmış Bildirimleri İptal Etme ve Yönetme
Belirli bir zamanlanmış bildirimi, scheduleNotificationAsync tarafından döndürülen dize olan tanımlayıcıyı kullanarak Notifications.cancelScheduledNotificationAsync(identifier) ile iptal edin. Tüm zamanlanmış bildirimleri Notifications.cancelAllScheduledNotificationsAsync() ile iptal edin.
Uygulama yeniden başlatıldıktan sonra iptal etmeniz gerekiyorsa bildirim tanımlayıcılarını AsyncStorage içinde saklayın; örneğin kullanıcı bir görevi tamamlandı olarak işaretlediğinde anımsatıcıyı iptal edebilirsiniz.
// Schedule and save identifier:
const id = await Notifications.scheduleNotificationAsync({
content: { title: 'Take your medicine' },
trigger: { hour: 9, minute: 0, repeats: true },
});
await AsyncStorage.setItem('medicineReminderNotifId', id);
// Later, cancel it:
const notifId = await AsyncStorage.getItem('medicineReminderNotifId');
if (notifId) {
await Notifications.cancelScheduledNotificationAsync(notifId);
await AsyncStorage.removeItem('medicineReminderNotifId');
}Hızlı Kontrol
Bu dersteki React Native mobil geliştirme kavramlarını anlayıp anlamadığınızı test edin.
Ders Özeti
Bu derste şunları öğrendiniz: Expo Push API'si, bildirimleri APNs/FCM üzerinden göndermek için belirteç, başlık, gövde ve veri alanlarıyla exp.host adresine POST isteklerini kabul eder, gönderim makbuzları gerçek teslimatı doğrular ve DeviceNotRegistered hataları silinmesi gereken belirteçleri gösterir ve yerel bildirimler, zaman tabanlı tetikleyicilerle Notifications.scheduleNotificationAsync kullanılarak doğrudan uygulamanın içinden zamanlanabilir. Sırada uygulama içindeki ön plan ve arka plan bildirim olaylarını ele alacağız.
Yapay zeka eğitmeniyle JavaScript öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 30
- Dersler
- 120
Sıkça Sorulan Sorular
“Expo Push API ile Bildirim Gönderme” dersi ücretsiz mi?
Evet — “Expo Push API ile Bildirim Gönderme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve React Native Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. React Native Academy kursu toplamda 4 dersten oluşur.
“Expo Push API ile Bildirim Gönderme” dersinde ne öğreneceğim?
Sunucunuzdan veya bir curl komutundan Expo Push API'ye bir bildirim yükünü POST edin, belirli bir cihaz token'ını hedefleyin ve teslimatı Expo kontrol panelinde doğrulayın. React Native Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
React Native Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te React Native Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Expo Push API ile Bildirim Gönderme” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu React Native Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her React Native Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- İzin İsteme ve Push Token Alma
- Expo Push API ile Bildirim Gönderme
- Ön Plan ve Arka Plan Bildirimlerini Yönetme
- Bildirim Kanalları ve Zengin İçerik