Aracılığıyla paylaş


iOS'ta Anında İletme Bildirimleri

Önemli

Bu bölümdeki bilgiler iOS 9 ve önceki sürümlerle ilgili, eski iOS sürümlerini desteklemek için burada bırakılmıştır. iOS 10 ve üzeri sürümler için lütfen iOS cihazında hem Yerel hem de Uzaktan Bildirim'i desteklemeye yönelik Kullanıcı Bildirim Çerçevesi kılavuzuna bakın.

Anında iletme bildirimleri kısa tutulmalıdır ve yalnızca mobil uygulamaya güncelleştirme için sunucu uygulamasına başvurması gerektiğini bildiren yeterli veri içermelidir. Örneğin, yeni e-posta geldiğinde sunucu uygulaması yalnızca mobil uygulamaya yeni e-postanın geldiğini bildirir. Bildirim, yeni e-postanın kendisini içermez. Mobil uygulama daha sonra uygun olduğunda sunucudan yeni e-postaları alır

iOS'ta anında iletme bildirimlerinin merkezinde, Apple Anında İletme Bildirimi Ağ Geçidi Hizmeti (APNS)bulunur. Bu, Apple tarafından sağlanan ve bir uygulama sunucusundan iOS cihazlarına gelen bildirimleri yönlendirmeden sorumlu olan bir hizmettir. Aşağıdaki görüntüde iOS için anında iletme bildirimi topolojisi gösterilmektedir: Bu görüntüde iOS için anında iletme bildirimi topolojisi

Uzak bildirimlerin kendileri, iOS geliştirici belgelerindeki Yerel ve Anında İletilen Bildirim Programlama Kılavuzu Bildirim Yükü bölümünde belirtilen biçime ve protokollere uygun JSON biçimli dizelerdir.

Apple iki APNS ortamı sürdürür: Korumalı Alan ve Üretim ortamı. Sandbox ortamı, geliştirme aşamasında test için amaçlanmıştır ve TCP bağlantı noktası 2195'te gateway.sandbox.push.apple.com'da yer almaktadır. Üretim ortamı, dağıtılan uygulamalarda kullanılmak üzere tasarlanmıştır ve 2195 numaralı TCP bağlantı noktası üzerinde gateway.push.apple.com bulunabilir.

Gereksinimler

Anında iletme bildirimi, APNS mimarisi tarafından dikte edilen aşağıdaki kurallara uymalıdır:

  • 256 bayt İleti Sınırı - Bildirimin tüm ileti boyutu 256 baytı aşmamalıdır.
  • Alındı Onayı Yok - APNS, gönderene iletinin hedeflenen alıcıya iletildiğini belirten bir bildirim sağlamaz. Cihaza ulaşılamıyorsa ve birden çok sıralı bildirim gönderiliyorsa, en son bildirimler dışındaki tüm bildirimler kaybolur. Cihaza yalnızca en son bildirim gönderilir.
  • Her uygulama için güvenli bir sertifika gerekir- APNS ile iletişim SSL üzerinden yapılmalıdır.

Sertifika Oluşturma ve Kullanma

Önceki bölümde bahsedilen ortamların her biri kendi sertifikalarını gerektirir. Bu bölümde, bir sertifika oluşturma, bir sağlama profiliyle ilişkilendirme ve ardından PushSharp ile kullanmak üzere bir Kişisel Bilgi Değişimi sertifikası alma konuları ele alınacaktır.

  1. Sertifika oluşturmak için, aşağıdaki ekran görüntüsünde gösterildiği gibi Apple'ın web sitesindeki iOS Sağlama Portalı'na gidin (soldaki Uygulama Kimlikleri menü öğesine dikkat edin):

    Apple'ın web sitesindeki iOS Sağlama Portalı

  2. Ardından, Uygulama Kimliği'nin bölümüne gidin ve aşağıdaki ekran görüntüsünde gösterildiği gibi yeni bir uygulama kimliği oluşturun:

    Uygulama Kimlikleri bölümüne gidin ve yeni bir uygulama kimliği oluşturun

  3. + düğmesine tıkladığınızda, sonraki ekran görüntüsünde gösterildiği gibi uygulama kimliği için açıklamayı ve Paket Tanımlayıcısı'nı girebilirsiniz:

    Uygulama kimliği için açıklamayı ve Paket Tanımlayıcısını girin

  4. Belirtilen Uygulama Kimliği seçtiğinizden ve Paket Tanımlayıcısının * ile bitmediğinden emin olun. Bu, birden çok uygulama için iyi bir tanımlayıcı oluşturur ve anında iletme bildirimi sertifikaları tek bir uygulama için olmalıdır.

  5. Uygulama Hizmetleri'nin altında Push Bildirimleriseçin:

    Anında İletme Bildirimleri Seçin

  6. Yeni Uygulama Kimliğinin kaydını onaylamak için Gönder'e basın:

    Yeni Uygulama Kimliği kaydını onaylayın

  7. Ardından, uygulama kimliği için sertifikayı oluşturmanız gerekir. Sol gezinti bölmesinde Sertifikalar > Tüm'ye göz atın ve aşağıdaki ekran görüntüsünde gösterildiği gibi + düğmesini seçin.

    Uygulama kimliği için sertifika oluşturma

  8. Geliştirme veya Üretim sertifikası kullanmak isteyip istemediğinizi seçin:

    Geliştirme veya Üretim sertifikası seçin

  9. Ardından yeni oluşturduğumuz yeni Uygulama Kimliğini seçin:

    Yeni oluşturulan uygulama kimliğini seçin

  10. Bu, Mac bilgisayarınızdaki Anahtar Zinciri Erişimi uygulamasını kullanarak Sertifika İmzalama İsteği oluşturma işleminde size yol gösterecek yönergeleri görüntüler.

  11. Sertifika oluşturulduğuna göre, uygulamanın APN'lere kaydedilebilmesi için derleme işleminin bir parçası olarak kullanılması gerekir. Bu, sertifikayı kullanan bir sağlama profili oluşturmayı ve yüklemeyi gerektirir.

  12. Geliştirme sağlama profili oluşturmak için Sağlama Profilleri bölümüne gidin ve yeni oluşturduğumuz Uygulama Kimliği'ni kullanarak oluşturma adımlarını izleyin.

  13. Sağlama profilini oluşturduktan sonra Xcode Organizer açın ve yenileyin. Oluşturduğunuz sağlama profili görünmüyorsa, profili iOS Sağlama Portalı'ndan indirip el ile içeri aktarmanız gerekebilir. Aşağıdaki ekran görüntüsünde, sağlama profilinin eklendiği Düzenleyici örneği gösterilmektedir:
    Bu ekran görüntüsü, provizyon profilinin eklendiği Düzenleyici örneğini

  14. Bu noktada Xamarin.iOS projesini yeni oluşturulan bu sağlama profilini kullanacak şekilde yapılandırmamız gerekir. Bu işlem, aşağıdaki ekran görüntüsünde gösterildiği gibi iOS Paket İmzalama sekmesinin altındaProje Seçenekleri iletişim kutusundan yapılır:
    Xamarin.iOS projesini bu yeni oluşturulan sağlama profilini kullanacak şekilde yapılandırma

Bu noktada uygulama anında iletme bildirimleriyle çalışacak şekilde yapılandırılır. Ancak, sertifikayla ilgili birkaç adım daha gereklidir. Bu sertifika, Kişisel Bilgi Değişimi (PKCS12) sertifikası gerektiren PushSharp ile uyumlu olmayan DER biçimindedir. Sertifikayı PushSharp tarafından kullanılabilir olacak şekilde dönüştürmek için şu son adımları gerçekleştirin:

  1. Sertifika dosyasını indirin - iOS Sağlama Portalı'na oturum açın, Sertifikalar sekmesini seçin, doğru sağlama profiliyle ilişkili sertifikayı seçin ve İndir'i seçin.
  2. Anahtarlık Erişimini Aç - Bu uygulama, OS X'teki parola yönetim sistemi için bir GUI arabirimidir.
  3. Sertifika İçeri Aktar - Sertifikalı henüz yüklü değilse, Dosya'yı ... Anahtarlık Erişimi menüsünden Öğeleri İçeri Aktar. Yukarıda dışarı aktarılan sertifikaya gidin ve sertifikayı seçin.
  4. Sertifikayı Dışarı Aktar - İlişkili özel anahtarın görünür olması için sertifikayı genişletin, anahtara sağ tıklayın ve Dışarı Aktar'ı seçin. Dışarı aktarılan dosya için bir dosya adı ve parola girmeniz istenir.

Bu noktada sertifikalarla işimiz bitti. iOS uygulamalarını imzalamak için kullanılacak bir sertifika oluşturduk ve bu sertifikayı bir sunucu uygulamasında PushSharp ile kullanılabilecek bir biçime dönüştürdük. Şimdi iOS uygulamalarının APNS ile nasıl etkileşime geçtiğini inceleyelim.

APNS'ye kaydolma

Bir iOS uygulamasının uzaktan bildirim alabilmesi için APNS'ye kaydolması gerekir. APNS benzersiz bir cihaz belirteci oluşturur ve bunu iOS uygulamasına döndürür. Ardından iOS uygulaması cihaz belirtecini alır ve ardından kendisini uygulama sunucusuna kaydeder. Tüm bunlar olduktan sonra kayıt tamamlanır ve uygulama sunucusu mobil cihaza bildirimler gönderebilir.

Teoride, bir iOS uygulaması APNS'ye her kaydedişinde cihaz belirteci değişebilir, ancak pratikte bu çok sık gerçekleşmez. İyileştirme olarak bir uygulama en son cihaz belirtecini önbelleğe alabilir ve yalnızca değiştiğinde uygulama sunucusunu güncelleştirebilir. Aşağıdaki diyagramda kayıt ve cihaz belirteci alma işlemi gösterilmektedir:

Bu diyagramda kayıt ve cihaz belirteci alma işlemi gösterilmektedir

APNS ile kayıt, uygulama temsilcisi sınıfının FinishedLaunching yönteminde, geçerli UIApplication nesnesi üzerinde RegisterForRemoteNotificationTypes çağrılarak işlenir. Bir iOS uygulaması APNS'ye kaydolduğunda, almak istediği uzak bildirim türlerini de belirtmelidir. Bu uzak bildirim türleri, UIRemoteNotificationTypenumaralandırmasında bildirilir. Aşağıdaki kod parçacığı, bir iOS uygulamasının uzaktan uyarı ve rozet bildirimleri almak için nasıl kaydolabileceğini gösteren bir örnektir:

if (UIDevice.CurrentDevice.CheckSystemVersion (8, 0)) {
    var pushSettings = UIUserNotificationSettings.GetSettingsForTypes (
                       UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound,
                       new NSSet ());

    UIApplication.SharedApplication.RegisterUserNotificationSettings (pushSettings);
    UIApplication.SharedApplication.RegisterForRemoteNotifications ();
} else {
    UIRemoteNotificationType notificationTypes = UIRemoteNotificationType.Alert | UIRemoteNotificationType.Badge | UIRemoteNotificationType.Sound;
    UIApplication.SharedApplication.RegisterForRemoteNotificationTypes (notificationTypes);
}

APNS kayıt isteği arka planda gerçekleşir- yanıt alındığında, iOS AppDelegate sınıfında RegisteredForRemoteNotifications yöntemini çağırır ve kayıtlı cihaz belirtecini geçirir. Belirteç bir NSData nesnesinde yer alır. Aşağıdaki kod parçacığı, APNS tarafından sağlanan cihaz belirtecinin nasıl alındığını gösterir:

public override void RegisteredForRemoteNotifications (
UIApplication application, NSData deviceToken)
{
    // Get current device token
    var DeviceToken = deviceToken.Description;
    if (!string.IsNullOrWhiteSpace(DeviceToken)) {
        DeviceToken = DeviceToken.Trim('<').Trim('>');
    }

    // Get previous device token
    var oldDeviceToken = NSUserDefaults.StandardUserDefaults.StringForKey("PushDeviceToken");

    // Has the token changed?
    if (string.IsNullOrEmpty(oldDeviceToken) || !oldDeviceToken.Equals(DeviceToken))
    {
        //TODO: Put your own logic here to notify your server that the device token has changed/been created!
    }

    // Save new device token
    NSUserDefaults.StandardUserDefaults.SetString(DeviceToken, "PushDeviceToken");
}

Kayıt bir nedenden dolayı başarısız olursa (örneğin cihaz İnternet'e bağlı değilse), iOS uygulama temsilcisi sınıfında FailedToRegisterForRemoteNotifications çağırır. Aşağıdaki kod parçacığı, kullanıcıya kaydın başarısız olduğunu bildiren bir uyarının nasıl görüntüleneceğini gösterir:

public override void FailedToRegisterForRemoteNotifications (UIApplication application , NSError error)
{
    new UIAlertView("Error registering push notifications", error.LocalizedDescription, null, "OK", null).Show();
}

Cihaz Belirteci Yönetimi

Cihaz belirteçlerinin süresi sonlanır veya zaman içinde değişir. Bu nedenle, sunucu uygulamalarının bazı ev temizliği yapması ve süresi dolan veya değiştirilen belirteçleri temizlemesi gerekir. Uygulama, belirteci süresi dolmuş bir cihaza anında iletme bildirimi gönderdiğinde, APNS bu süresi dolmuş belirteci kaydeder ve saklar. Sunucular daha sonra hangi belirteçlerin süresinin dolduğunu öğrenmek için APNS'yi sorgular.

Geri Bildirim Hizmeti sağlamak için kullanılan APNS: Anında iletme bildirimleri göndermek ve hangi belirteçlerin süresinin dolduğuna ilişkin verileri geri göndermek için oluşturulan sertifika aracılığıyla kimlik doğrulaması sağlayan bir HTTPS uç noktası. Bu, Apple tarafından kullanım dışı bırakıldı ve kaldırıldı.

Bunun yerine, daha önce Geri Bildirim Hizmeti tarafından bildirilen durum için yeni bir HTTP durum kodu vardır.

410 - Cihaz belirteci artık konu için etkin değil.

Ayrıca, yanıt gövdesinde yeni bir timestamp JSON veri anahtarı olacaktır:

:status üst bilgisindeki değer 410 ise, bu anahtarın değeri APN'lerin cihaz belirtecinin konu için artık geçerli olmadığını onayladığı son zamandır.

Cihaz, sağlayıcınıza daha yeni bir zaman damgasıyla bir belirteç kaydedene kadar bildirim göndermeyi durdurun.

Özet

Bu bölüm, iOS'ta anında iletme bildirimlerini çevreleyen temel kavramları tanıtır. Bu, Apple Anında İletme Bildirimi Ağ Geçidi Hizmeti'nin (APNS) rolünü açıkladı. Daha sonra APNS için gerekli olan güvenlik sertifikalarının oluşturulması ve kullanımı ele alınmıştır. Son olarak bu belge, uygulama sunucularının süresi dolan cihaz belirteçlerini izlemeyi durdurmak için Geri Bildirim Hizmetleri nasıl kullanabileceğine ilişkin bir tartışmayı tamamladı.