IOS ‘da uzaktan bildirimler nam-ı diğer APNS (Apple Push Notification Service) remote notifications

24/09/2013 61 Yazar: yasin
IOS 'da uzaktan bildirimler nam-ı diğer APNS (Apple Push Notification Service) remote notifications

Merhaba, bu yazımda apple’ın sunduğu bir hizmet olan APNS (Apple Push Notification Service) hizmetini IOS uygulamalarımızda nasıl konfigure edeceğimizi basitçe anlaymaya çalışacağım. Ama gelin öncelikle APNS’in ne olduğundan biraz bahsedelim.
APNS, bir uygulama veya hizmet için, kullanıcılarımıza Apple’ın sunmuş olduğu APNS alt yapısını kullanarak uzaktan ve anlık bildirimler gönderebilmemizi sağlayan bir uyarı sistemidir.
Bu tanımı basit bir uygulama senaryosu üzerinde örneklememiz gerekirse, uzak bir sunucudan çektiği imaj dosyalarını bir galeri sistemi içerisinde gösteren bir uygulamamız olduğunu varsayalım.

APNS’i uygulamamızda kullanarak, sunucumuza yeni bir imaj dosyası eklediğimizde yeni eklenen bu içeriğin kullanıcılarımıza uygulama o an kapalı dahi olsa hemen bildirilmesini sağlayabiliriz. Bu sayede kullanıcının dikkatini uygulamaya hemen çekebilir ve uygulamamızın kullanım sıklığını arttırabiliriz.
Veya bu aralar çok popüler olan “Whatsapp” tarzı bir mesajlaşma uygulamamız olduğunu farzedelim. APNS tam da aradığımız araç.
Hatta, APNS’i yeni uygulamalarımızın AppStore’a yüklendiğini bildirmek için, bir reklam aracı olarak bile kullanabiliriz.
Gördüğünüz gibi APNS oldukça farklı amaçlar için tercih edilebilecek, hem bizim hem de kullanıcılarımız için oldukça faydalı bir özellik.
Ama tabiki APNS’inde bazı sınırları var. Mesela birçoğumuzun dikkat ettiği üzere, AppStore’dan IOS cihazımıza bir uygulama indirdiğimizde bazen “Bildirimlere izin vermek istiyormusunuz?” gibi bir uyarı mesajıyla karşılaşırız. İşte bu uyarı mesajı bize indirdiğimiz o uygulamanın APNS kullandığını ve ileride bize bildirimler gönderebileceğini belirtmektedir.
Eğer bu uyarıdaki “izin verme” seçeneğiniyle devam edersek, uygulamanın geliştiricisi APNS üzerinden bize bildirimler gönderemeyecektir.
Tabiki bu tercih uygulama ilk çalıştırıldığında olumlu veya olumsuz yönde kullanılsa dahi, daha sonradan cihazın ayarlar sayfasında yer alan “Bildirimler” alanından da açılıp, kapatılabilir.
Yani kısacası APNS’ile tüm kullanıcılara ulaşmak her zaman mümkün değildir. Ama tabi işin istatistiki boyutunu düşünecek olursak kendi gözlemlerime dayanarak ortalama bir uygulamada her 10 kullanıcıdan 4’ünün APNS bildirimlerine izin verdiğini söyleyebilirim.
Ama bu oran “whatsapp” gibi anlık mesajlaşma veya haber içeriği sunan uygulamalarda çok daha fazla olablieceği gibi, oyunlarda çok daha az da olabilir.
APNS’i dağıtım aşamasındaki uygulamalarımız için etkin bir şekilde kullanabilmek biraz kafa yormayı gerektiriyor bu nedenle bu yükünüzü 3rd party APNS hizmeti sunan UrbanAirship veya Parse gibi firmalardan hizmet alarak hafifletebilirsiniz pek tabi, ama maliyet hesabınızı iyi yapmanız gerek.
Neyse, bu kadar lakırdı yeter diyerek kolları sıvayalım ve APNS hizmetini uygulamalarımızda nasıl basitçe konfigure edebileceğimizi hep birlikte görelim.
Öncelike bu yazı boyunca neler yapacağımızı kısaca ana hatlarıyla özetleyelim:
1) ios provisioning portal üzerindeki uygulama appID’imizi konfigure edeceğiz ve APNS SSL sertifikası oluşturacağız.
Daha önceki apple developer / distribution provisioning profilleri yazımda anlattığım sertifika ve appID’yi kullanacağımı belirtmek istiyorum, o nedenle sizin de bu yazımı okuyup iyi anlayarak kendi sertifika ve appID’nizi oluşturduğunuzu varsayıyorum.
2) Uygulamamızı hazırlayacağız ve gerçek bir IOS cihazı üzerinde test edeceğiz.
APNS servisini ne yazık ki simülatör üzerinde test etme şansımız yok. Bu nedenle bir iPad veya iPhone’a ihtiyacımız var.
3) APNS bildirimlerini gönderebilmek için bir web sunucusuna ihtiyacımız olacak bunun için Mac’imiz kullanacağız.
Mac’lerde apache zaten kurulu geliyor, ayrıca PHP’ninde Mac’inizde kurulu olduğunu varsayıyorum.
Şu an ihtiyacımız olmayacak ama ek not olarak belirteyim; dağıtım aşamasındaki uygulamalarımız için SSL sertifikalarımızı kurabileceğimiz gerçek bir sunucuya ya da bir VPS’e ihtiyacımız olacak, paylaşımlı hostingler işimize yaramayacaktır. Şu sıralar gayet makul fiyatlara Digital Ocean veya Linode gibi sağlayacılardan VPS kiralanabiliyor.
IOS 'da uzaktan bildirimler nam-ı diğer APNS (adım 1)

Öncelikle uygulamamız için kullanacağımız provizyon dosyamızda push notification özelliğini etkinleştirmemiz ve bir adet APNS sertifikası oluşturmamız gerekiyor. Bunun için developer membercenter adresinden developer ID’mizle giriş yapıyoruz.
IOS 'da uzaktan bildirimler nam-ı diğer APNS (adım 2)

Giriş yaptıktan sonra “Certificates, Identifiers & Profiles” linkine tıklıyor ve provisioning portal’a gidiyoruz.
IOS 'da uzaktan bildirimler nam-ı diğer APNS (adım 3)

Yukarıda da belirttiğim gibi daha önceki apple developer / distribution provisioning profilleri yazımda önceden oluşturduğum development sertifikası ve appId’mi kullanacağım için mevcut appID’mi düzenlemek için direkt olarak “Identifiers” alanına tıklıyorum. Eğer siz daha önceden bir development sertifikası ve appID oluşturmadıysanız öncelikle bunları oluşturun.
IOS 'da uzaktan bildirimler nam-ı diğer APNS (adım 4)

“mySupperApp” adlı appID’mi bulup listeden seçiyorum, dikkat edeceğiniz üzere “Push Notifications” disabled olarak görünüyor, hemen “Edit” butonuna tıklıyorum.
IOS 'da uzaktan bildirimler nam-ı diğer APNS (adım 5)

Listeden “Push Notifications” kutucuğunu işaretliyor ve daha sonra aşağıda yer alan “Development SSL Certificate” butonuna tıklıyoruz. Şu an sadece development sertifikasını oluşturacağız.

Uygulamamızı appStore’a koyarken Production sertifikasını da ayrıca oluşturmamız gerekecek. Şu an oluşturduğumuz development sertifikasını uygulama appStore’dayken kullanamayız.
IOS 'da uzaktan bildirimler nam-ı diğer APNS (adım 6)

Daha önceki yazımızdan da hatırlayacağınız üzere sertifika isteğinde bulunabilmek için Mac’imiz üzerindeki anahtar zincir erişimi arayüzünü kullanarak bir istek dosyası oluşturmamız gerektiğinden bahsetmiştik.
Benim hali hazırda masaüstünde duran bir istek dosyam var eğer sizin istek dosyanız hazır değilse apple developer / distribution provisioning profilleri yazımda anlattığım şekilde bir istek dosyası hazırlayın. Continue butonuna tıklayarak bir sonraki istek dosyamızın isteneceği sayfaya geçiyoruz.
IOS 'da uzaktan bildirimler nam-ı diğer APNS (adım 7)

“Choose file” butonuna tıklayarak açılan pencereden masaüstünde duran istek dosyamı seçiyor ve ardından “Generate” butonuna tıklıyorum.
IOS 'da uzaktan bildirimler nam-ı diğer APNS (adım 8)

APNS Development sertifikamız oluştuktan sonra “Download” butonuyla sertifikayı Mac’imize indiriyor ve ardından “Done” butonuyla sayfadan çıkıp, Provizyon dosyamızı oluşturmak üzere soldaki menüde yer alan “Provisioning profiles” menusunun altında yer alan “Development” linkine tıklıyoruz.
IOS 'da uzaktan bildirimler nam-ı diğer APNS (adım 9)

Yeni development provizyonumuzu oluşturmak için açılan sayfada sağ üst köşede yer alan “+” butonuna tıklıyoruz.
IOS 'da uzaktan bildirimler nam-ı diğer APNS (adım 10)

Daha öncede belirttiğim gibi şu an uygulamamızı hemen appStore’a yollamak gibi bi derdimiz yok ve o nedenle “Distribution” provizyonunu oluşturmayı da şu an için es geçeceğiz. “IOS App Development” seçeneğini işaretleyip, “Continue” butonuyla devam ediyoruz.
IOS 'da uzaktan bildirimler nam-ı diğer APNS (adım 11)

Listeden appID’mizi seçiyor ve “Continue” butonuyla devam ediyoruz.
IOS 'da uzaktan bildirimler nam-ı diğer APNS (adım 12)

Açılan listeden Development sertifikamızı seçiyor ve “Continue” butonuyla devam ediyoruz.
IOS 'da uzaktan bildirimler nam-ı diğer APNS (adım 13)

Uygulamamızı test edeceğimiz cihazımızı listeden seçiyor ve “Continue” butonuyla devam ediyoruz.
IOS 'da uzaktan bildirimler nam-ı diğer APNS (adım 14)

Provizyon dosyamıza bir isim veriyor ve “Generate” butonuna tıklayarak provizyon dosyamızı oluşturuyoruz.
IOS 'da uzaktan bildirimler nam-ı diğer APNS (adım 15)

Oluşan provizyon dosyamızı “Download” butonuna tıklayarak “Mac’imize indiriyor ve “Done” butonuna tıklıyoruz.
Provisioning portalda işimiz bitti artık çıkabiliriz.
IOS 'da uzaktan bildirimler nam-ı diğer APNS (adım 16)

8. adımda oluşturduğumuz APNS sertifikamız masaüstünde duruyor. Üzerine çift tıklayarak anahtar zincirine kaydedilmesini sağlıyor ve açılan “Anahtar zincir erişimi” arayüzündeki listeden bularak üzerine tıklayıp satırı genişletiyoruz.
Örnek resimde “Yasin Türkoğlu” olarak gözüken ve yanında anahtar işareti olan satırın üzerinde sağ tıklayarak açılan menüden “Dışa Aktar” seçeneğine tıklıyoruz.
IOS 'da uzaktan bildirimler nam-ı diğer APNS (adım 17)

Dışa aktaracağımız anahtar için “myKey” adını veriyor, dosyanın aktarılacağı yer olarak “masaüstünü” seçili bırakıyor ardından dosya biçimi olarak “.p12″‘yi seçiyor ve son olarak “kaydet” butonuna tıklıyoruz.
IOS 'da uzaktan bildirimler nam-ı diğer APNS (adım 18)

Dışa aktaracağımız anahtar için bir şifre girmemiz isteniyor, şifremizi giriyor, ardından doğrulamak için ikinci satıra tekrar giriyor ve “Tamam” butonuna tıklıyoruz. Verdiğimiz şifreyi bir kenara yazıyoruz, biraz sonra lazım olacak.
IOS 'da uzaktan bildirimler nam-ı diğer APNS (adım 19)

Mac’imize ait yönetici parolası isteniyor. Parolayı giriyor ve “izin ver” butonuna tıklıyoruz.
IOS 'da uzaktan bildirimler nam-ı diğer APNS (adım 20)

Anahtar dosyamız masaüstüne “myKey.p12” olarak kaydedildi. Şimdi Mac’imizin “Terminal” arayüzünü açıyoruz ve aşağıda detaylarını verdiğim işlemleri gerçekleştiriyoruz.
Export ve import edeceğimiz tüm dosyalarımız masaüstünde olacağı için masaüstü dizinine geçiyoruz.

Masaüstünde duran indirdiğimiz “aps_development-1.cer” isimli sertifikamızı “mySupperAppPushCert.pem” ismiyle pem dosyasına dönüştürüyoruz.

Masaüstünde duran, biraz önce anahtar zincir erişimi arayüzünden dışarı aktardığımız “myKey.p12” anahtarımızı da “myKey.pem” ismiyle pem dosyasına dönüştürüyoruz.
Dönüştürme sırasında bizden “myKey.p12” dosyamızı anahtar zincir erişimi arayüzünden dışarı aktarırken verdiğimiz şifre istenecektir. Şifremizi girdikten sonra oluşturulacak pem uzantılı yeni anahtar dosyamız için yeniden bir şifre girmemiz gerekecek. Yeni verdiğimiz şifreyi bir kenara yazıyoruz, biraz sonra lazım olacak.

Yeni oluşturduğumuz “mySupperAppPushCert.pem” ve “myKey.pem” dosyalarını birleştiriyoruz ve “combined.pem” adı altında tek bir pem dosyası haline getiriyoruz.

Yaptığımız tüm bu işlemlerin bir sonucu olarak masaüstünde 3 adet yeni dosya oluşturduk. Bu dosyalardan en son oluşturduğumuz “combined.pem” dosyasını kullanacağız.
Dilersek oluşturduğumuz “combined.pem” dosyamızla hemen APNS sandbox ortamına SSL bağlantısı kurabiliyormuyuz bir bakalım.
Bunun için “gateway.sandbox.push.apple.com” adresine “2195” portu üzerinden, bir SSL bağlantı açmayı deniyoruz.
Dikkat edeceğiniz üzere bağlantımızı “2195” portu üzerinden kuracağız, bağlantıyı açabilmek için bu port numarasının firewall veya router’da engellenmemiş olmaması lazım.
Bağlantıyı açarken biraz önce oluşturduğumuz “myKey.pem” dosyasına verdiğimiz şifre bizden istenecektir.

Eğer bağlantımızı başarılı bir şekilde açabildiysek “CONNECTED” ibaresini göreceğiz, daha sonra “bye” diyerek bağlantıyı sonlandırıyor ve terminalden çıkıyoruz.
Ek bilgi olarak paylaşayım, bu adreste yer alan “sandbox” ibaresi APNS’in development testleri için ayrılmış bir bağlantı olduğunu gösteriyor.
Dağıtım aşamasında yukarıdaki dönüştürme işlemlerinde APNS Production sertifikası kullanmamız gerektiğini ve “gateway.push.apple.com:2195” adresi üzerinden SSL bağlantısı kuracağımızı bir kez daha hatırlatırım.
IOS 'da uzaktan bildirimler nam-ı diğer APNS (adım 21)

Şimdi sıra geldi göndereceğimiz bildirimlerimizi alabilecek bir uygulama hazırlamaya.
Xcode’u açıyor ve “Create a new Xcode Project” alanına tıklıyoruz.
IOS 'da uzaktan bildirimler nam-ı diğer APNS (adım 22)

“Single View Application” seçeneğiyle devam ediyoruz.
IOS 'da uzaktan bildirimler nam-ı diğer APNS (adım 23)

Uygulama adımız “mySupperApp”. “Company Identifier”‘da appId’imde kullandığım ters domain adı.
Bu iki alanın birleşiminden oluşan “Bundle Identifier”‘da dikkat edeceğiniz üzere “com.yasinturkoglu.mySupperApp” olarak kendiliğinden belirdi.
“Bundle identifier” daha önce provisioning portal oluşturduğumuz appId’imizde kullanığımız identifier’la aynı olmalı.
“Class Prefix”‘i de uygulama adıyla aynı bırakıyor ve cihaz olarak iPhone’u seçiyor ve “Next” butonuyla devam ediyorum. Siz de elinizdeki cihaz türüne göre kendi seçimizi yapın.
IOS 'da uzaktan bildirimler nam-ı diğer APNS (adım 24)

Uygulama klasörünün kaydedileceği yer olarak masaüstünü seçiyor ve “Create” butonuna tıklayarak uygulamayı oluşturuyoruz.
IOS 'da uzaktan bildirimler nam-ı diğer APNS (adım 25)

Benim iPhone’umda IOS 6.0 yüklü olduğundan, uygulamayı cihazımda çalıştırabilmek için “IOS Deployment Target” listesinden 6.0’ı seçiyorum.
IOS 'da uzaktan bildirimler nam-ı diğer APNS (adım 26)

“Code signing” alanındaki “Code signing Identity” alanında “Debug” altından, development sertifikamızı seçiyoruz.
IOS 'da uzaktan bildirimler nam-ı diğer APNS (adım 27)

Biraz önce Provisioning portalda hazırlayıp masaüstüne indirdiğimiz provizyon dosyasına tıklayarak, provizyon dosyasının yüklenmesini sağlıyor ve ardından “Code Signing” alanında yer alan “Provisioning Profile” alanında “Debug” altından yüklediğimiz provizyon dosyamızı seçiyoruz.
IOS 'da uzaktan bildirimler nam-ı diğer APNS (adım 28)

Cihazımızı USB kablosu aracılığıyla Mac’imize bağlıyor ve “Oganizer” arayüzünden cihazımızı seçiyoruz.
Cihazın detaylarında yer alan “Provisioning Profiles” alanını açıyor ve biraz önce yüklediğimiz provizyon dosyamızın aynı şekilde cihazımızın “Provisioning Profiles” alanına sürüklüyoruz. “Status” alanında “Valid Profile” ibaresini görmemiz lazım.
IOS 'da uzaktan bildirimler nam-ı diğer APNS (adım 29)

Uygulamanın derlenerek çalıştırılacağı yer olarak listeden cihazımızı seçiyoruz.
IOS 'da uzaktan bildirimler nam-ı diğer APNS (adım 30)

Daha sonra uygulama dosyalarından, “MySupperAppAppDelegate.m” dosyasını açıyor ve yandaki ekran görüntüsünde işaretli kodları appDelegate dosyamıza ekliyoruz.
Tüm düzenlemeleri yaptıktan sonra sol üst köşede yer alan “Run” butonuna tıklıyor ve uygulamayı cihazda çalıştırıyoruz.
Uygulama cihazda çalıştığında ekranda beliren “mySupperApp size anında iletme bildirimleri göndermek istiyor” uyarısında yer alan “Tamam” butonuna tıklıyoruz.
İzin verdikten sonra, Xcode’da en altta yer alan log alanında deviceToken’ı görüyor olmamız lazım. Bu device token’ı kaydediyoruz, biraz sonra kullanacağız.
Ama gelin önce app delegate dosyasını içerisinde yaptığımız değişikliklerin neler olduğuna biraz daha yakından bakalım.
didFinishLaunchingWithOptions metodumuzun içerisine eklediğimiz registerForRemoteNotificationTypes koduyla, uygulamamızın bildirimleri alabilmesini sağlıyoruz. Bu kodun içerisinde yer alan;
UIRemoteNotificationTypeBadge, seçeneği uygulama ikonunu üzerinde bildirimle gelen “badge” numarasının görünmesini sağlayacak.
UIRemoteNotificationTypeSound seçeneği uygulamamız kapalıyken gelen bildirimlerde uyarı sesinin duyulmasını sağlayacak.
UIRemoteNotificationTypeAlert seçeneğiyse uygulamamız kapalıyken gelen bildirimlerde ekranda alert penceresinin görünmesini sağlayacak.
Uygulamamızın bildirimlerimizi alabilmesi için bu üç seçenekten en az birinin belirtilmesi gereklidir, aksi takdirde uygulama bildirimleri almaz ve kullanıcıya uygulamayı ilk defa çalıştırdığında “Bildirimlere izin vermek istiyormusunuz” seçeneği sorulmaz.
trimDeviceToken metodu kendi hazırladığım bir dize yalınlaştırıcısı, “didRegisterForRemoteNotificationsWithDeviceToken” metoduyla aldığımız deviceToken’ın başında ve sonunda yer alan “<” ve “>” işaretlerini ve aralardaki boşlukları temizlemek için kullanıyoruz.
didRegisterForRemoteNotificationsWithDeviceToken metodu bize uygulama çalıştırıldığında devicetoken’ı verecek olan metod. DeviceToken, uygulamamızı appStore’dan indirdikten sonra bildirimlere izin veren kullanıcılardan alacağımız bir tür tanımlama anahtarıdır. DeviceToken’lar unique’dir, yani hiçbir zaman aynı olamazlar ve eğer cihaz resetlenirse değişirler. Bir önceki paragrafta açıkladığım “trimDeviceToken” metodumuzu kullanarak “NSData” formatında dönen deviceToken’ı temizliyor ve string formatına dönüştürüp “NSLog” ile log alanına bastırıyoruz.
DeviceToken’ı kullanıcılarımızdan almak için aslında bu metodun içerisinde deviceToken’i bize yollayacak bir httpRequest’i oluşturmalı ve gönderilen deviceToken’ları bir database içerisinde saklamalıyız. Bunu nasıl yapacağımızı daha fazla kafa karışıklığına yol açmamak ve konumuzda sapmamak adına es geçiyorum o nedenle bu örnekte devicetoken’ı manuel olarak log alanına bastırıyoruz.
didFailToRegisterForRemoteNotificationsWithError metodu herhangi bir nedenden ötürü kullanıcı bildirimlere izin verdiği halde devicetoken’ın alınamadığı durumlarada bize veya kullanıcıya bilgi verilmesini sağlayacak bir fallback metodu. Şu andaki örneğimiz bunu nasıl kullanacağımıza dair bir seneryo barındırmadığı için es geçiyorum.
didReceiveRemoteNotification metodu uygulamamız açıkken gönderdiğimiz bildirimlerin uygulama arayüzünde tetiklenmesini sağlayacak metod. Kullanıcı uygulamayı kullanılırken herhangi bir bildirim gönderdiğmizde herhangi bir etkileşim olmayacak ve “didReceiveRemoteNotification” metodu tetiklenecektir. Uygulama kullanılırken alınacak bildirimler için yapılmasını istediğimiz aksiyornun tetiklenmesini bu metod’u kullanarak sağlayacağız. Şu anki örneğimiz bu kadar detaylı olmadığı için bu medtodu’da boş bırakıyoruz.
Evet, örneğimizin uygulama tarafında yapılacaklar bu kadar, şimdi bildirimlerimizi gönderebilmek için sunucumuzda çalışacak PHP kodunu yazabiliriz.
Bu kodla, cihazlarımızdan alacağımız “deviceToken” ları kullanarak bildirimlerimiz için JSON formatında veri katarları oluşturacağız ve açacağımız SSL bağlantısı üzerinden bildirimlerimizi APNS sunucusuna göndereceğiz, bildirimler APNS tarafından “deviceToken” larını belirttiğimiz cihazlara gönderilecek. Önce kodu görelim;
Bu kod ile ne yaptığımıza ait detayları zaten, kod içerisinde yeterince açıklıyorum tekrar açıklamama gerek yok sanırım.
Şu anda işin çok daha derinine girip kafa karışıklığına yol açmak istemiyorum ama, apple’ın APNS’i dağıtım ortamında kullanırken koyduğu bir kaç önemli kural var, bunlara uymak zorundayız;
Her bildirim için sakın teker teker soket bağlantısı açmayın
Yukarıda verdiğim örnek test amaçlı olduğundan ve APNS sandbox sunucusuna bağlandığından ardı ardına soket bağlantısı açıp kapatmamızın bir mahsuru yok. Fakat daha öncede belirttiğim gibi dağıtım ortamında “gateway.push.apple.com:2195” suncusunu kullanacağız, bu sunucuya çok kısa aralıklarla ardı ardına açacağınız soket bağlantıları, kara listeye alınmanızı ve APNS sunucusuna erişiminizin engellenmesine neden olabilir.
Göndereceğiniz bildirimleri yukarıdaki örnekte verdiğim gibi, yani soket bağlantısını bir kere açtıktan sonra bir döngüyle hepsini aynı anda göndererek yapmalı ve tüm bildirimlerinizi gönderdikten sonra soket bağlantınızı kapatmalısınız.
Kısacası APNS sunucusuyla kurduğunuz soket bağlantısını çok kısa aralıklarla açıp kapayan bir yapı kullanmayın.
Bildirimlere izin vererek size deviceToken’ini yollamış, fakat daha sonra uygulamanızı cihazından silmiş kullanıcılara ısrarla bildirim göndermeye çalışmayın.
Aslında uygulamanızı silmiş kullanıcılara bildirim göndermeye çalışmak APNS alt yapısını gereksiz yere meşgul etmek anlamına geldiğinden, bir kere uygulamanızı silmiş olan kullanıcıyı belirledikten sonra veritabnınızda tuttuğunuz ilgili kullanıcıya ait deviceToken’i silin.
Peki uygulamamızı silmiş olan kullanıcıyı nasıl belirleyeceğiz dediğinizi duyar gibiyim.
Bunun için her bildirim gönderiminizden önce manuel veya cron job ile belli aralıklarla otomatik olarak APNS feedback sunucusuna bağlanarak uygulamanızı kaldırmış olan kullanıcıları tespit edebilirsiniz.
Feedback sunucusu aslında kaldırılan uygulamaların kaydının tutulduğu bir sunucu değildir. Feedback sunucusuna bir kaydının düşebilmesi için öncelikle cihaza bir bildirimde bulunulmalıdır, eğer uygulamanız bildirimde bulunulan cihazdan kaldırılmışsa feedback sunucusuna bir kayıt düşecektir.
Kısacası bir feedback alabilmek için öncelikle bildirimde bulunmalısınız.
APNS feedback sunucusuna “feedback.sandbox.push.apple.com” adresinden “2196” portunu kullanarak daha önce oluşturduğumuz “combined.pem” dosyamızı kullanarak bağlanacağız. Dikkat edeceğiniz üzere bağlantımızı bu defa “2196” portu üzerinden kuracağız, dolayısıyla bağlantıyı açabilmek için bu port numarasının firewall veya router’da engellenmemiş olmaması lazım. Kodu görelim;
Evet, artık tüm adımları tamamladığımıza göre, sıra geldi uygulamamıza bildirimimizi göndermeye, uygulamamızı biraz önce cihazımıza yüklemiştik, şimdi push.php dosyamızı local sunucumuzda “http://localhost/push.php” adresi üzerinden çağırıyoruz ve “Bildirim, basarili bir sekilde APNS sunucusuna gönderildi” mesajını görüyoruz. Hemen ardından da cihazımızdan “Di-da-don” sesini duyuyoruz.
IOS 'da uzaktan bildirimler nam-ı diğer APNS (adım 31)
Gördüğünüz gibi cihazımın kilit ekranında bildirimimi görüyorum, bu uyarıyı sürükleyerek açtığımda direkt olarak uygulamam açılacaktır.
Aynı şekilde uygulama ikonumun üzerindeki badge’da “24” ibaresini görüyorum.
Evet, bu yazımda APNS’i uygulamalarımızda mümkün olduğunca basit bir şekilde nasıl kullanacağımızı anlatmaya çalıştım.
Konuyla alakalı soru, yorum veya eleştirilerinizi aşağıda bulunana yorum alanına bırakabilirsiniz.
Teşekkürler.