APN'lere Genel Bakış
Apple Push Bildirim hizmeti (APN'ler), uzaktan bildirimler özelliğinin en önemli parçasıdır. Uygulama geliştiricilerinin bilgileri iOS (ve dolaylı olarak watchOS), tvOS ve macOS cihazlarına yayması için sağlam, güvenli ve son derece verimli bir hizmettir.
Uygulamanızın bir kullanıcının cihazında ilk kez başlatılmasında, sistem otomatik olarak uygulamanız ile APN'ler arasında akredite, şifreli ve kalıcı bir IP bağlantısı kurar. Bu bağlantı, uygulamanızın, Uzaktan Bildirim Desteğini Yapılandırma bölümünde açıklandığı gibi, bildirim almasını sağlamak için kurulum gerçekleştirmesine izin verir.
Bildirim göndermek için bağlantının diğer yarısı - bir sağlayıcı sunucusu ile APN'ler arasındaki kalıcı, güvenli kanal - çevrimiçi geliştirici hesabınızda yapılandırma ve Apple tarafından sağlanan şifreleme sertifikalarının kullanılmasını gerektirir. Sağlayıcı, APN'lerle çalışmak üzere yapılandırdığınız, dağıttığınız ve yönettiğiniz bir sunucudur. Şekil 1-1, uzak bildirim için teslimat yolunu gösterir.
Şekil 1-1 Bir sağlayıcıdan bir uygulamaya uzak bildirim iletme
Sağlayıcılarınızda ve uygulamanızda push bildirim kurulumu tamamlandıktan sonra, sağlayıcılarınız APN'lere bildirim istekleri gönderebilir. APN'ler, hedeflenen her cihaza karşılık gelen bildirim yüklerini iletir. Bir bildirim alındığında sistem, yükü cihazdaki uygun uygulamaya iletir ve kullanıcıyla etkileşimleri yönetir.
Cihaz açıkken, ancak uygulama çalışmıyorken uygulamanız için bir bildirim gelirse, sistem bildirimi yine de görüntüleyebilir. APN'ler bir bildirim gönderdiğinde cihaz kapatılırsa, APN'ler bildirimi tutar ve daha sonra tekrar dener (ayrıntılar için bkz. Hizmet Kalitesi, Depola ve İlet ve Birleştirilmiş Bildirimler).
Sağlayıcının Sorumlulukları
Sağlayıcı sunucularınız, APN'lere katılmak için aşağıdaki sorumluluklara sahiptir:
- APN'ler aracılığıyla, küresel olarak benzersiz, uygulamaya özgü cihaz jetonlarını ve uygulamanızın kullanıcı cihazlarındaki örneklerinden diğer ilgili verileri alma. Bu, sağlayıcının uygulamanızın çalışan her örneği hakkında bilgi sahibi olmasını sağlar.
- Bildirim sisteminizin tasarımına göre, her cihaza ne zaman uzaktan bildirim gönderilmesi gerektiğini belirleme.
- APN'lere bildirim istekleri oluşturma ve gönderme, her istek bir bildirim yükü ve teslimat bilgisi içerir; APN'ler daha sonra ilgili bildirimleri sizin adınıza amaçlanan cihazlara iletir.
Bir sağlayıcının gönderdiği her uzaktan bildirim isteği için şunları yapması gerekir:
- Uzaktan Bildirim Yükü Oluşturma bölümünde açıklandığı gibi, bildirimin yükünü içeren bir JSON sözlüğü oluşturun.
- Yükü, küresel olarak benzersiz bir cihaz belirteci ve diğer teslimat bilgilerini bir HTTP / 2 isteğine ekleyin. Aygıt belirteçleri hakkında bilgi için bkz. APN'lerden Aygıta Bağlantı Güveni ve Aygıt Belirteçleri. HTTP / 2 istek biçimi ve APN'lerden olası yanıtlar ve hatalar hakkında bilgi için bkz. APN'lerle İletişim.
- Kalıcı, güvenli bir kanal üzerinden bir belirteç veya sertifika biçimindeki kriptografik kimlik bilgileri dahil olmak üzere HTTP / 2 isteğini APN'lere gönderin.
- Bu güvenli kanalın kurulması, Güvenlik Mimarisi'nde anlatılmıştır.
Birden Çok Sağlayıcı Kullanmak
Şekil 1-2, APN'lerin uygulamalarınızı çalıştıran cihazlar için etkinleştirdiği sanal ağ türünü göstermektedir. Bildirim yükünün üstesinden gelmek için, genellikle her biri APN'lere kendi kalıcı ve güvenli bağlantısı olan birden çok sağlayıcı kurarsınız. Her sağlayıcı daha sonra, sağlayıcının geçerli bir cihaz jetonuna sahip olduğu herhangi bir cihazı hedefleyen bildirim istekleri gönderebilir.
Şekil 1-2 Birden çok sağlayıcıdan birden çok cihaza uzaktan bildirim gönderme
Hizmet Kalitesi, Depola ve İlet ve Birleştirilmiş Bildirimler
Apple Anında Bildirim hizmeti, bir sakla ve ilet işlevi gerçekleştiren bir Hizmet Kalitesi (QoS) bileşeni içerir. APN'ler bir bildirim göndermeye çalışırsa ve hedef cihaz çevrimdışıysa, APN'ler bildirimi sınırlı bir süre için saklar ve cihaz tekrar kullanılabilir olduğunda teslim eder. Bu bileşen, cihaz ve uygulama başına yalnızca en son bildirimi saklar. Bir cihaz çevrimdışıysa, o cihazı hedefleyen bir bildirim isteği göndermek, önceki talebin silinmesine neden olur. Bir cihaz uzun süre çevrimdışı kalırsa, APN'lerde depolanan tüm bildirimler atılır.
Benzer bildirimlerin birleştirilmesine izin vermek için, bir bildirim isteğine bir daraltma tanımlayıcısı ekleyebilirsiniz. Normalde, bir cihaz çevrimiçi olduğunda, APN'lere gönderdiğiniz her bildirim isteği, cihaza gönderilen bir bildirimle sonuçlanır. Ancak, apns-collapse-id anahtarı HTTP / 2 istek başlığınızda bulunduğunda, APNs bu anahtar için değeri aynı olan istekleri birleştirir. Örneğin, aynı başlığı iki kez gönderen bir haber hizmeti, her iki istek için de aynı daraltma tanımlayıcı değerini kullanabilir. APN'ler daha sonra iki isteği cihaza teslim edilmek üzere tek bir bildirimde birleştirir. Apns-collapse-id anahtarıyla ilgili ayrıntılar için.
Güvenlik Mimarisi
APN'ler, iki güven düzeyi kullanarak uçtan uca, kriptografik doğrulama ve kimlik doğrulamayı zorlar: bağlantı güveni ve cihaz belirteci güveni.
Bağlantı güveni, sağlayıcılar ve APN'ler arasında ve APN'ler ile cihazlar arasında çalışır.
Cihaz belirteci güveni, her uzak bildirim için uçtan uca çalışır. Bildirimlerin yalnızca doğru başlangıç (sağlayıcı) ve bitiş (cihaz) noktaları arasında yönlendirilmesini sağlar.
Bir aygıt belirteci, Apple tarafından belirli bir aygıttaki belirli bir uygulamaya atanan benzersiz bir tanımlayıcıyı içeren opak bir NSData örneğidir. Yalnızca APN'ler bir cihaz belirtecinin içeriğini çözebilir ve okuyabilir. Her uygulama örneği, APN'lere kaydolduğunda benzersiz cihaz belirtecini alır ve ardından belirteci, Uzaktan Bildirim Desteğini Yapılandırma bölümünde açıklandığı gibi sağlayıcısına iletmelidir. Sağlayıcı, ilgili cihazı hedefleyen her push bildirim isteğine cihaz kodunu dahil etmelidir; APN'ler, bildirimin yalnızca amaçlanan benzersiz uygulama-cihaz kombinasyonuna teslim edilmesini sağlamak için cihaz jetonunu kullanır.
APN'ler çeşitli nedenlerle yeni bir cihaz belirteci verebilir:
- Kullanıcı, uygulamanızı yeni bir cihaza yükler
- Kullanıcı cihazı bir yedekten geri yükler
- Kullanıcı işletim sistemini yeniden yükler
- Diğer sistem tanımlı olaylar
Sonuç olarak, uygulamalar, APN'lerden Cihaza Bağlantı Güven ve Cihaz Belirteçleri'nde açıklandığı gibi, başlatma sırasında cihaz jetonunu istemelidir. Kod örnekleri için bkz. Uzaktan Bildirimleri Almak İçin Kaydolma.
APN'lerle HTTP / 2 tabanlı TLS oturumları oluşturmak için, sağlayıcılarınızın her birine bir GeoTrust Global CA kök sertifikasının kurulu olduğundan emin olmalısınız. Bir sağlayıcı macOS çalıştırıyorsa bu kök sertifika varsayılan olarak anahtar zincirindedir. Diğer sistemlerde bu sertifika, açık kurulum gerektirebilir. Bu sertifikayı GeoTrust Kök Sertifikaları web sitesinden indirebilirsiniz. İşte sertifikaya doğrudan bir bağlantı.
Şekil 1-3, güven oluşturmak için HTTP / 2 tabanlı APNs sağlayıcı API'sini ve bildirim göndermek için JWT sağlayıcı kimlik doğrulama belirteçlerini kullanmayı göstermektedir.
Şekil 1-3 Belirteç tabanlı sağlayıcı bağlantı güvenini oluşturma ve kullanma
Şekil 1-3'te gösterildiği gibi, belirteç tabanlı sağlayıcı güveni şu şekilde çalışır:
Sağlayıcınız, şekilde "TLS başlatma" etiketli okla gösterilen aktarım katmanı güvenliğini (TLS) kullanarak APN'lerle güvenli bir bağlantı ister.
APN'ler daha sonra sağlayıcınıza, şekildeki bir sonraki okla temsil edilen ("APNs sertifikası" olarak etiketlenen) bir APNs sertifikası verir ve tedarikçiniz bunu daha sonra onaylar.
Bu noktada, bağlantı güveni kurulur ve sağlayıcı sunucunuzun, APN'lere belirteç tabanlı uzaktan push bildirim istekleri göndermesi etkinleştirilir. Sağlayıcınızın gönderdiği her bildirim isteğine, şekilde "Bildirim itme" etiketli okla gösterilen bir JWT kimlik doğrulama jetonu eşlik etmelidir.
APN'ler, şekilde "HTTP / 2 yanıtı" etiketli ok olarak temsil edilen her iletime yanıt verir.
Sağlayıcınızın bu adım için alabileceği yanıtlarla ilgili ayrıntılar için bkz. HTTP / 2 APN'lerden Yanıtı.
Şekil 1-4, bir sağlayıcı ile APN'ler arasında güven oluşturmak için Apple tarafından verilen bir SSL sertifikasının kullanımını göstermektedir. Şekil 1-3'ten farklı olarak, bu şekil bir bildirim itmesini göstermez, ancak Taşıma Katmanı Güvenliği (TLS) bağlantısı kurulduğunda durur. Sertifikaya dayalı güven şemasında, push bildirim isteklerinin kimliği doğrulanmaz, ancak eşlik eden cihaz belirteci kullanılarak doğrulanır.
Şekil 1-4 Sertifika tabanlı sağlayıcı bağlantı güveni oluşturma
Şekil 1-4'te gösterildiği gibi, sertifika tabanlı sağlayıcıdan APN'ye güveni şu şekilde çalışır:
Sağlayıcınız, şekilde "TLS başlatma" etiketli okla gösterilen aktarım katmanı güvenliğini (TLS) kullanarak APN'lerle güvenli bir bağlantı ister.
APN'ler daha sonra sağlayıcınıza, şekildeki bir sonraki okla temsil edilen ("APNs sertifikası" olarak etiketlenen) bir APNs sertifikası verir ve tedarikçiniz bunu daha sonra onaylar.
Sağlayıcınız daha sonra Apple tarafından sağlanan sağlayıcı sertifikasını (Xcode Yardım'da "Evrensel APNs istemcisi SSL sertifikası oluşturma" bölümünde açıklandığı gibi daha önce çevrimiçi geliştirici hesabınızdan edindiğiniz), "Sağlayıcı" etiketli okla gösterilen APN'lere geri göndermelidir. sertifika. "
APN'ler daha sonra sağlayıcı sertifikanızı doğrular, böylece bağlantı talebinin meşru bir sağlayıcıdan geldiğini doğrular ve TLS bağlantınızı kurar.
Bu noktada, bağlantı güveni kurulur ve sağlayıcı sunucunuzun APN'lere sertifika tabanlı uzaktan push bildirim istekleri göndermesi etkinleştirilir.
APN'lerden Cihaza Bağlantı Güveni ve Cihaz Belirteçleri
APN'ler ile her cihaz arasındaki güven, bu bölümde açıklandığı gibi, uygulamanızın katılımı olmadan otomatik olarak oluşturulur.
Her cihaz, ilk cihaz etkinleştirmesinde işletim sistemi tarafından sağlanan ve cihazın anahtar zincirinde saklanan bir şifreleme sertifikasına ve özel bir şifreleme anahtarına sahiptir. Etkinleştirme sırasında APN'ler, Şekil 6-5'te gösterildiği gibi sertifika ve anahtara dayalı olarak cihaza bağlantıyı doğrular ve doğrular.
Şekil 1-5 Bir cihaz ile APN'ler arasında bağlantı güveni oluşturma
Şekil 1-5'te gösterildiği gibi, APN'lerden cihaza güven şu şekilde çalışır:
- Güven görüşmesi, şekilde üst okta gösterildiği gibi, cihaz APN'lerle bir TLS bağlantısı başlattığında başlar.
- APN'ler, cihaza bir APNs sertifikası döndürür.
- İşletim sistemi bu sertifikayı doğrular ve ardından "Cihaz sertifikası" okunda gösterildiği gibi cihaz sertifikasını APN'lere gönderir.
- Son olarak, şekilde alt okla gösterildiği gibi, APN'ler cihaz sertifikasını doğrular ve güven oluşturur.
- APN'ler ve cihaz arasında kurulan bir TLS bağlantısı ile, cihazdaki uygulamalar, uzaktan bildirimler için uygulamaya özel cihaz belirteçlerini almak üzere APN'lere kaydolabilir. Ayrıntılar ve kod örnekleri için Uzaktan Bildirim Desteğini Yapılandırma bölümündeki Uzaktan Bildirimleri Almak için Kayıt Yapma konusuna bakın.
Cihaz jetonunu aldıktan sonra, bir uygulama uygulamanın ilişkili sağlayıcısına bağlanmalı ve jetonu ona iletmelidir. Bu adım gereklidir, çünkü bir sağlayıcı daha sonra cihazı hedefleyen APN'lere bir bildirim isteği gönderdiğinde cihaz jetonunu dahil etmek zorundadır. Belirteci iletmek için yazdığınız kod, Uzaktan Bildirimleri Almak İçin Kaydolma bölümünde de gösterilir.
Kullanıcı ister bir cihazı ilk kez etkinleştiriyor olsun, ister APN'ler yeni bir cihaz jetonu yayınlasın, süreç benzerdir ve Şekil 6-6'da gösterilmiştir.
Şekil 1-6 Cihaz jetonunu yönetme
Uygulamaya özgü bir cihaz jetonunun edinilmesi ve işlenmesi şu şekilde çalışır:
Uygulamanız, üst okta gösterildiği gibi uzak bildirimler için APN'lere kaydolur. Uygulama zaten kayıtlıysa ve uygulamaya özgü cihaz jetonu değişmediyse, sistem mevcut jetonu hızla uygulamaya geri döndürür ve bu işlem 4. adıma atlar.
Yeni bir cihaz belirteci gerektiğinde, APN'ler, cihazın sertifikasında bulunan bilgileri kullanarak bir tane oluşturur. Bir belirteç anahtarı kullanarak belirteci şifreler ve ortadaki sağ okta gösterildiği gibi aygıta geri döndürür.
Sistem, uygulamanızı çağırarak cihaz belirtecini uygulamanıza geri gönderir: didRegisterForRemoteNotificationsWithDeviceToken: delegate yöntemi.
Jetonu aldıktan sonra, uygulamanız (temsilci yöntemi dahilinde) onu sağlayıcınıza ikili veya onaltılık biçimde iletmelidir. Sağlayıcınız bu belirteç olmadan cihaza bildirim gönderemez. Ayrıntılar için, Uzaktan Bildirim Desteğini Yapılandırma bölümünde Uzaktan Bildirimleri Almak için Kaydolma konusuna bakın.
ÖNEMLİ
APN'ler cihaz belirteçleri değişken uzunluktadır. Boyutlarını sabit kodlamayın.
Sağlayıcınız APN'lere bir push bildirim isteği gönderdiğinde, benzersiz bir uygulama-cihaz kombinasyonunu tanımlayan bir cihaz belirteci içerir. Bu adım, Şekil 6-7'de sağlayıcı ve APN'ler arasındaki "Belirteç, Yük" okunda gösterilmektedir. APN'ler, isteğin geçerliliğini sağlamak ve hedef cihazı belirlemek için jetonun şifresini çözer. APN'ler, gönderenin ve alıcının meşru olduğunu belirlerse, bildirimi tanımlanan cihaza gönderir.
Şekil 1-7 Sağlayıcıdan cihaza uzaktan bildirim yolu
Cihaz bildirimi aldıktan sonra (ve Şekil 1-7'de gösterilen son adımdan sonra), sistem uzaktan bildirimi uygulamanıza iletir.
Ref: Apple Push Bildirim Hizmeti
Şimdi, teknik akışı anlamak için buraya bakın: iOS Uygulamasında Apple Push Bildirim Hizmeti nasıl uygulanır?