- iOS'ta push bildirimi nasıl çalışır?
- İlk adım: Projeyi ve hesabı yapılandırmak
- İkinci adım: Kullanıcıdan izin istemek
- Üçüncü adım: Cihaz belirtecini almak ve sunucuya iletmek
- Dördüncü adım: Sunucudan bildirim göndermek ve içeriği biçimlendirmek
- Beşinci adım: Uygulama içinde bildirime tepki vermek
- Test etme ve sık yapılan hatalar
- Bu beceriyi Mindset programında nerede çalışırsınız?
- Sık sorulan sorular
iOS Push Bildirimi Entegrasyonu: İzinden APNs Gönderimine
Capability ayarından izin istemeye, cihaz belirteci alımından APNs içeriğine: iOS push bildirimi entegrasyonunu kod örnekleriyle adım adım öğrenin.
iOS'ta push bildirimi nasıl çalışır?
Uzak bildirimler (push notification), uygulamanız kapalıyken bile kullanıcıya küçük miktarda bilgi ulaştırmanın yoludur. Apple'ın belgelerinde akışa dahil olan bileşenler sayılır: sizin sunucunuz (provider server), Apple Push Notification service (APNs), kullanıcının cihazı ve cihazdaki uygulamanız.
Akış şöyledir: Uygulama açılışında APNs'ye kaydolur ve o cihaz ile uygulamaya özel bir cihaz belirteci (device token) alır. Bu belirteç, uygulamanızın o cihazdaki adresidir. Uygulama belirteci kendi sunucunuza iletir. Bildirim göndermek istediğinizde sunucunuz, belirteci ve bildirim içeriğini içeren bir istek hazırlayıp APNs'ye gönderir; APNs bildirimi cihaza teslim eder ve işletim sistemi kullanıcıya gösterir.
Sorumluluk dağılımı önemlidir: sunucuyu ve uygulamayı yapılandırmak sizin işinizdir, aradaki teslimat ve gösterim Apple'ın yönettiği kısımdır. Bu yüzden entegrasyon hem mobil hem sunucu tarafı çalışması gerektirir. Aynı belirteç birden fazla uygulama için kullanılamaz; her uygulama kendi belirtecini ister.
İlk adım: Projeyi ve hesabı yapılandırmak
Kod yazmadan önce yapılandırma gerekir. Xcode projesinde Push Notifications yeteneğini (capability) etkinleştirirsiniz; bu, uygulamaya gerekli yetki (entitlement) kaydını ekler. Apple geliştirici hesabınızda ise uygulamanın kimliği (App ID) için push bildirim hizmetini açarsınız.
Bu aşamada sunucunuzun APNs'ye nasıl yetkileneceği de kararlaştırılır. Sunucu, APNs'ye kimliğini ya anahtar tabanlı ya da sertifika tabanlı yöntemle kanıtlar; hangi yöntemin güncel olduğunu ve nasıl oluşturulduğunu Apple'ın sunucu tarafı belgelerinden okumak gerekir. Kimlik bilgilerini (anahtar dosyası, sertifika) kaynak koda ya da sürüm kontrolüne koymayın; gizli bilgi yönetiminden okuyun.
Geliştirme ve üretim ortamlarının ayrı APNs uç noktaları vardır ve belirteçler ortama özgüdür. Test sırasında geliştirme ortamında alınmış bir belirteci üretim uç noktasına göndermek, bildirimin gelmemesinin en yaygın nedenlerinden biridir.
İkinci adım: Kullanıcıdan izin istemek
Bildirim göstermek için kullanıcının izni gerekir. İzin, UNUserNotificationCenter üzerinden istenir ve hangi etkileşim türlerini kullanacağınızı (uyarı, ses, uygulama simgesi rozeti) belirtirsiniz:
import UserNotifications
func izinIste() { UNUserNotificationCenter.current() .requestAuthorization(options: [.alert, .sound, .badge]) { verildi, hata in guard verildi else { return } DispatchQueue.main.async { UIApplication.shared.registerForRemoteNotifications() } } }
Apple'ın belgesine göre sistem izin penceresini ilk istekte gösterir ve cevabı kaydeder; sonraki isteklerde yeniden sormaz. Bu yüzden isteği ne zaman yaptığınız önemlidir: açılışta hemen sormak yerine, bildirimin kullanıcıya neden değerli olduğunun anlaşıldığı bir anda sormak (örneğin ilk hatırlatıcıyı oluşturduktan sonra) daha iyi bir deneyim sunar. Belge ayrıca kullanıcıya önce sessiz teslim edilen bildirimleri sunan geçici (provisional) yetkilendirmeyi de tanımlar.
Kullanıcı izni reddederse uygulamanız bildirim gösteremez. Bu durumda ayarlara yönlendiren açıklayıcı bir ekran sunmak, ısrarcı pencerelerden daha doğrudur.
Üçüncü adım: Cihaz belirtecini almak ve sunucuya iletmek
İzin verildikten sonra uygulama APNs'ye kayıt çağrısı yapar. Başarılı olursa belirteç, uygulama temsilcisinin (app delegate) ilgili metoduna gelir:
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { let belirtec = deviceToken.onaltilikMetin // Data için yazacağınız küçük bir yardımcı SunucuIstemcisi.belirteciKaydet(belirtec) }
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { // hatayı günlüğe kaydedin }
Apple'ın belgesi, belirteci her uygulama açılışında almanızı ve sunucuya iletmenizi öngörür; çünkü belirteç zamanla değişebilir. Sunucuda belirteci kullanıcı hesabıyla ilişkilendirerek saklayın. Aynı kullanıcının birden çok cihazı olabilir, bu yüzden bire bir eşleme yerine bir kullanıcı için birden çok belirteç tutmayı tasarlayın.
SwiftUI yaşam döngüsüyle çalışan bir uygulamada bu temsilci metotlarına ulaşmak için uygulama temsilcisi bağdaştırıcısı kullanılır. Kullanıcı çıkış yaptığında belirteci sunucudan ilişkilendirmeden kaldırın; yoksa başka birinin bildirimi eski cihaza gidebilir.
Dördüncü adım: Sunucudan bildirim göndermek ve içeriği biçimlendirmek
Sunucu, APNs'ye bir istek gönderir; istekte hedef belirteç ve bir içerik (payload) bulunur. İçerik bir JSON nesnesidir ve görünür kısmı aps anahtarı altında tanımlanır:
{ "aps": { "alert": { "title": "Siparişiniz yolda", "body": "Kargonuz dağıtıma çıktı." }, "sound": "default" }, "siparisKimligi": "abc" }
aps dışındaki alanlar kendi özel verinizdir (burada siparisKimligi); uygulama bu veriyle ilgili ekranı açabilir. İçerik boyutu sınırlıdır, bu yüzden büyük veriyi bildirimde değil, bildirimin işaret ettiği sunucu kaynağında tutun.
Zengin bildirim (örneğin görsel eklemek ya da şifreli içeriği çözmek) için bildirim servis uzantısı (notification service extension) kullanılır. Apple'ın belgesine göre bu uzantı, uyarı içeren uzak bildirimlerde, cihaza teslim edilmeden önce içeriği değiştirmenize ya da ilişkili içeriği indirmenize izin verir; sınırlı bir süresi vardır ve süre dolarsa orijinal içerik gösterilir. Sessiz bildirimleri değiştiremezsiniz.
Beşinci adım: Uygulama içinde bildirime tepki vermek
Bildirim geldiğinde uygulamanın durumuna göre farklı senaryolar vardır. Uygulama ön plandaysa varsayılan olarak bildirim gösterilmez; temsilcinin ilgili metodunda gösterilip gösterilmeyeceğine karar verirsiniz. Kullanıcı bildirime dokunduğunda ise başka bir temsilci metodu çağrılır ve bildirimle gelen özel veriyi okuyup ilgili ekrana yönlendirme yaparsınız.
Pratik bir düzen şöyledir: bildirimdeki özel alandan bir hedef kimliği okunur (örneğin sipariş kimliği), uygulamanın yönlendirme katmanı bu kimliğe göre ekranı açar. Uygulama kapalıyken açılış da aynı yolu izler. Yönlendirme mantığını tek bir yerde toplamak, farklı bildirim türleri eklendikçe karmaşanın önüne geçer.
Bildirim ayarlarını da kullanıcıya sunun: hangi bildirim türlerini almak istediğini seçebilmesi, iznin tümden geri alınmasını azaltır.
Test etme ve sık yapılan hatalar
Önce uçtan uca akışı gerçek cihazla doğrulayın: izin penceresi, belirteç alımı, sunucuya iletim, gönderim ve dokunma ile yönlendirme. Sunucu tarafında APNs yanıtlarını günlüğe alın; hata kodları genellikle sorunu doğrudan söyler.
- Ortam karışıklığı: Geliştirme belirtecini üretim uç noktasına ya da tersine göndermek bildirimi düşürür.
- Eksik yapılandırma: Push Notifications yeteneği veya App ID ayarı atlanırsa kayıt başarısız olur.
- Süresi geçmiş belirteçleri tutmak: APNs geçersiz belirteç bildirirse sunucuda silin; aksi halde gereksiz istek göndermeye devam edersiniz.
- Ana iş parçacığı unutmak: Kayıt çağrısını arayüz iş parçacığında yapın.
- İzni yanlış zamanda istemek: Uygulama açılır açılmaz izin sormak reddi artırır.
- Gizli bilgileri kodda tutmak: Sunucu kimlik anahtarı istemci koduna girmemelidir; bildirim gönderme yalnızca sunucudan yapılır.
- Bildirimi tek iletişim kanalı saymak: Kullanıcı bildirimleri kapatmış olabilir; kritik bilgiyi uygulama içinde de erişilebilir kılın.
Bu beceriyi Mindset programında nerede çalışırsınız?
iOS Uygulama Geliştirme (Swift) Temelleri programının push bildirim, konum ve sistem entegrasyonları modülü, bu konuyu kapsar; program öncesinde Swift dili, Xcode ortamı, SwiftUI ve UIKit ile arayüz, veri kalıcılığı ve ağ katmanı modüllerini işler ve test ile uygulama mağazası hazırlığıyla tamamlanır.
Kurumsal mobil ekipler için pratik değer, bildirimin yalnızca uygulama tarafında değil sunucuyla birlikte tasarlanan bir akış olduğunu görmek ve mobil geliştirici ile arka uç geliştiricinin ortak bir sözleşme (belirteç yönetimi, içerik biçimi, hata yönetimi) üzerinde çalışabilmesidir.
İlgili Mindset programı
iOS Uygulama Geliştirme (Swift) Temelleri
Sık sorulan sorular
iOS push bildirimi için hangi yapılandırmalar gerekir?
Xcode projesinde Push Notifications yeteneğini etkinleştirmeniz, geliştirici hesabınızda uygulama kimliği için push hizmetini açmanız ve sunucunuzun APNs'ye yetkilenme yöntemini kurmanız gerekir. Bunlardan biri eksikse kayıt başarısız olur ya da bildirim iletilmez. Güncel kimlik doğrulama seçeneklerini Apple belgesinden kontrol edin.
Cihaz belirteci (device token) nedir, neden her açılışta alınır?
Belirteç, uygulamanızın o cihazdaki APNs adresidir ve cihaz ile uygulamaya özeldir. Zamanla değişebileceği için Apple, uygulamanın her açılışta kayıt olup belirteci sunucuya iletmesini öngörür. Sunucu güncel belirteci hesaba bağlı tutmalı, geçersiz bildirilenleri silmelidir.
Kullanıcı izni reddederse ne yapabilirim?
Sistem izin penceresini yalnızca ilk istekte gösterir; reddedilen bir izin uygulama içinden yeniden istenemez. Kullanıcıyı bildirimin faydasını anlatan ve sistem ayarlarına yönlendiren bir ekranla bilgilendirebilirsiniz. Daha iyisi izni değerin anlaşıldığı bir anda istemek ve geçici yetkilendirme seçeneğini değerlendirmektir.
Bildirime görsel eklemek için ne gerekir?
Bildirim servis uzantısı gerekir. Bu uzantı, uyarı içeren uzak bildirimler cihaza teslim edilmeden önce çalışır ve içeriği değiştirmenize ya da görsel gibi ilişkili içeriği indirmenize olanak verir. Sınırlı bir süresi vardır; dolarsa orijinal içerik gösterilir. Sessiz bildirimlerde bu uzantı kullanılamaz.
Bildirim gelmiyor, nereden başlayıp kontrol etmeliyim?
Önce ortamı doğrulayın: geliştirme belirteci geliştirme uç noktasına, üretim belirteci üretim uç noktasına gönderilmeli. Sonra yeteneğin ve uygulama kimliği ayarının açık olduğunu, kullanıcının izin verdiğini ve APNs yanıtında hata dönmediğini kontrol edin. Sunucu günlüğündeki APNs yanıtı çoğu zaman nedeni doğrudan söyler.
İlgili rehberler
Kategori: Yazılım Geliştirme