Aracılığıyla paylaş


Xamarin.iOS'ta Gelişmiş Kullanıcı Bildirimleri

iOS 10'da yeni olan Kullanıcı Bildirimi çerçevesi, yerel ve uzak bildirimlerin teslimine ve işlenmesine olanak tanır. Bu çerçeveyi kullanarak bir uygulama veya Uygulama Uzantısı, konum veya günün saati gibi bir dizi koşul belirterek yerel bildirimlerin teslimini zamanlayabilir.

Kullanıcı Bildirimleri Hakkında

Yukarıda belirtildiği gibi, yeni Kullanıcı Bildirimi çerçevesi yerel ve uzak bildirimlerin teslimini ve işlenmesini sağlar. Bu çerçeveyi kullanarak bir uygulama veya Uygulama Uzantısı, konum veya günün saati gibi bir dizi koşul belirterek yerel bildirimlerin teslimini zamanlayabilir.

Ayrıca uygulama veya uzantı, kullanıcının iOS cihazına teslim edildikçe hem yerel hem de uzak bildirimleri alabilir (ve değiştirebilir).

Yeni Kullanıcı Bildirimi KULLANıCı Arabirimi çerçevesi, bir uygulamanın veya Uygulama Uzantısının kullanıcıya sunulduğunda hem yerel hem de uzak bildirimlerin görünümünü özelleştirmesine olanak tanır.

Bu çerçeve, bir uygulamanın kullanıcıya bildirim sunabilmesi için aşağıdaki yolları sağlar:

  • Görsel Uyarılar - Bildirimin ekranın üst kısmından başlık olarak indirildiği yer.
  • Ses ve Titreşimler - Bir bildirimle ilişkilendirilebilir.
  • Uygulama Simgesi Kenar Oluşturma - Burada uygulama simgesi, okunmamış e-posta iletilerinin sayısı gibi yeni içeriğin kullanılabilir olduğunu gösteren bir rozet görüntüler.

Ayrıca, kullanıcının geçerli bağlamı bağlı olarak, bildirim sunmanın farklı yolları vardır:

  • Cihazın kilidi açıksa, bildirim ekranın üst kısmından başlık olarak aşağı yuvarlanır.
  • Cihaz kilitliyse, bildirim kullanıcının kilit ekranında görüntülenir.
  • Kullanıcı bir bildirimi kaçırdıysa Bildirim Merkezi'ni açabilir ve kullanılabilir, bekleyen bildirimleri orada görüntüleyebilir.

Xamarin.iOS uygulamasının gönderebileceği iki tür Kullanıcı Bildirimi vardır:

  • Yerel Bildirimler - Bunlar, kullanıcı cihazında yerel olarak yüklenen uygulamalar tarafından gönderilir.
  • Uzak Bildirimler - Uzak bir sunucudan gönderilir ve kullanıcıya sunulur veya uygulama içeriğinin arka plan güncelleştirmesini tetikler.

Yerel Bildirimler Hakkında

Bir iOS uygulamasının gönderebileceği Yerel Bildirimler aşağıdaki özelliklere ve özniteliklere sahiptir:

  • Bunlar, kullanıcının cihazında yerel olan uygulamalar tarafından gönderilir.
  • Bunlar, zaman veya konum tabanlı tetikleyicileri kullanacak şekilde yapılandırılabilir.
  • Uygulama, bildirimi kullanıcının cihazıyla zamanlar ve tetikleyici koşulu karşılandığında görüntülenir.
  • Kullanıcı bir bildirimle etkileşime geçtiğinde uygulama bir geri arama alır.

Yerel Bildirimlere bazı örnekler şunlardır:

  • Takvim Uyarıları
  • Anımsatıcı Uyarıları
  • Konum Algılamalı Tetikleyiciler

Daha fazla bilgi için lütfen Apple'ın Yerel ve Uzaktan Bildirim Programlama Kılavuzu belgelerine bakın.

Uzaktan Bildirimler Hakkında

Bir iOS uygulamasının gönderebileceği Uzaktan Bildirimler aşağıdaki özelliklere ve özniteliklere sahiptir:

  • Uygulamanın iletişimde olduğu bir sunucu tarafı bileşeni vardır.
  • Apple Anında İletilen Bildirim Hizmeti (APN'ler), geliştiricinin bulut tabanlı sunucularından kullanıcının cihazına Uzaktan Bildirimlerin en iyi şekilde teslimini iletmek için kullanılır.
  • Uygulama Uzaktan Bildirim aldığında kullanıcıya görüntülenir.
  • Kullanıcı bildirimle etkileşime geçtiğinde uygulama bir geri arama alır.

Bazı Uzaktan Bildirim örnekleri şunlardır:

  • Haber Uyarıları
  • Spor Güncelleştirmeler
  • Anlık İleti İletileri

Bir iOS uygulaması için iki tür Uzaktan Bildirim kullanılabilir:

  • Kullanıcıya Yönelik - Bunlar cihazda kullanıcıya görüntülenir.
  • Sessiz Güncelleştirmeler - Bunlar, arka planda bir iOS uygulamasının içeriğini güncelleştirmek için bir mekanizma sağlar. Sessiz Güncelleştirme alındığında, uygulama en son içeriği aşağı çekmek için uzak sunuculara ulaşabilir.

Daha fazla bilgi için lütfen Apple'ın Yerel ve Uzaktan Bildirim Programlama Kılavuzu belgelerine bakın.

Mevcut Bildirimler API'si hakkında

iOS 10'un öncesinde, bir iOS uygulaması sisteme bir bildirim kaydetmek ve bu bildirimin nasıl tetiklenmesi gerektiğini (zamana veya konuma göre) zamanlamak için kullanırdı UIApplication .

Bir geliştiricinin mevcut bildirim API'siyle çalışırken karşılaşabileceği birkaç sorun vardır:

  • Yerel veya Uzak Bildirimler için gereken farklı geri çağırmalar vardı ve bu da kodun çoğaltlanmasına neden olabilir.
  • Uygulama, sistemle zamanlandıktan sonra bildirimde sınırlı denetime sahip oldu.
  • Apple'ın tüm mevcut platformları arasında farklı destek düzeyleri vardı.

Yeni Kullanıcı Bildirim Çerçevesi hakkında

iOS 10 ile Apple, yukarıda belirtilen mevcut UIApplication yöntemin yerini alan yeni Kullanıcı Bildirimi çerçevesini tanıttı.

Kullanıcı Bildirimi çerçevesi aşağıdakileri sağlar:

  • Önceki yöntemlerle özellik eşliği içeren tanıdık bir API, kodu mevcut çerçeveden taşımayı kolaylaştırır.
  • Kullanıcıya daha zengin bildirimlerin gönderilmesini sağlayan genişletilmiş bir içerik seçenekleri kümesi içerir.
  • Hem Yerel hem de Uzak Bildirimler aynı kod ve geri çağırmalar tarafından işlenebilir.
  • Kullanıcı bir bildirimle etkileşime geçtiğinde bir uygulamaya gönderilen geri çağırmaları işleme işlemini basitleştirir.
  • Bildirimleri kaldırma veya güncelleştirme özelliği de dahil olmak üzere hem bekleyen hem de teslim edilen bildirimlerin gelişmiş yönetimi.
  • Bildirimlerin uygulama içi sunumunu yapma özelliğini ekler.
  • Uygulama Uzantıları içinden bildirimleri zamanlama ve işleme özelliği ekler.
  • Bildirimlerin kendileri için yeni uzantı noktası ekler.

Yeni Kullanıcı Bildirimi çerçevesi, Apple'ın desteklediği platformların katları arasında birleştirilmiş bir bildirim API'si sağlar:

  • iOS - Bildirimleri yönetmek ve zamanlamak için tam destek.
  • tvOS - Yerel ve uzak bildirimler için uygulama simgelerine rozet ekleme özelliği ekler.
  • watchOS - Kullanıcının eşleştirilmiş iOS cihazından gelen bildirimleri Apple Watch'larına iletme özelliğini ekler ve saat uygulamalarına doğrudan saat üzerinde yerel bildirimler yapma olanağı sağlar.
  • macOS - Bildirimleri yönetmek ve zamanlamak için tam destek.

Daha fazla bilgi için lütfen Apple'ın UserNotifications Framework Başvurusu ve UserNotificationsUI belgelerine bakın.

Bildirim Teslimi için Hazırlanma

Bir iOS uygulamasının kullanıcıya bildirim gönderebilmesi için önce uygulamanın sisteme kayıtlı olması gerekir ve bildirim kullanıcının kesintiye uğraması nedeniyle, bir uygulamanın göndermeden önce açıkça izin istemesi gerekir.

Kullanıcının bir uygulama için onaylayabileceğiniz üç farklı bildirim isteği düzeyi vardır:

  • Başlık görüntülenir.
  • Sesli uyarılar.
  • Uygulama simgesinin kenarını oluşturma.

Ayrıca, bu onay düzeyleri istenmeli ve hem yerel hem de uzak bildirimler için ayarlanmalıdır.

Uygulama başlatılır başlatılmaz aşağıdaki kodu yöntemine FinishedLaunchingAppDelegate ekleyip istenen bildirim türünü (UNAuthorizationOptions) ayarlayarak bildirim izni istenmelidir:

Not

UNUserNotificationCenter yalnızca iOS 10+ ile kullanılabilir. Bu nedenle, isteği göndermeden önce macOS sürümünü denetlemek en iyi yöntemdir.

using UserNotifications;
...

public override bool FinishedLaunching (UIApplication application, NSDictionary launchOptions)
{
    // Version check
    if (UIDevice.CurrentDevice.CheckSystemVersion (10, 0)) {
        // Request notification permissions from the user
        UNUserNotificationCenter.Current.RequestAuthorization (UNAuthorizationOptions.Alert, (approved, err) => {
            // Handle approval
        });
    }

    return true;
}

Bu API birleşik olduğundan ve Mac 10.14+ üzerinde de çalıştığından, macOS'yi hedefliyorsanız bildirim iznini de en kısa sürede denetlemeniz gerekir:

using UserNotifications;
...

public override void DidFinishLaunching (NSNotification notification)
{
    // Check we're at least v10.14
    if (NSProcessInfo.ProcessInfo.IsOperatingSystemAtLeastVersion (new NSOperatingSystemVersion (10, 14, 0))) {
        // Request notification permissions from the user
        UNUserNotificationCenter.Current.RequestAuthorization (UNAuthorizationOptions.Alert | UNAuthorizationOptions.Badge | UNAuthorizationOptions.Sound, (approved, err) => {
            // Handle approval
        });
    }
}

> [!NOTE]
> With MacOS apps, for the permission dialog to appear, you must sign your macOS app, even if building locally in DEBUG mode. Therefore, **Project->Options->Mac Signing->Sign the application bundle** must be checked.

Additionally, a user can always change the notification privileges for an app at any time using the **Settings** app on the device. The app should check for the user's requested notification privileges before presenting a notification using the following code:

```csharp
// Get current notification settings
UNUserNotificationCenter.Current.GetNotificationSettings ((settings) => {
    var alertsAllowed = (settings.AlertSetting == UNNotificationSetting.Enabled);
});    

Uzaktan Bildirim Ortamını Yapılandırma

iOS 10'da yeni olan geliştiricinin, işletim sistemine Geliştirme veya Üretim olarak hangi ortamda Anında İletme Bildirimi'nin çalıştığını bildirmesi gerekir. Bu bilgilerin sağlanamaması, uygulamanın iTune App Store'a gönderildiğinde aşağıdakine benzer bir bildirimle reddedilmesine neden olabilir:

Anında İletme Bildirimi Yetkilendirmesi Eksik - Uygulamanız Apple'ın Anında İletme Bildirimi hizmeti için bir API içeriyor, ancak aps-environment uygulamanın imzasından yetkilendirme eksik.

Gerekli yetkilendirmeyi sağlamak için aşağıdakileri yapın:

  1. Düzenlemek üzere açmak için Çözüm Bölmesi'nde dosyaya çift tıklayınEntitlements.plist.

  2. Kaynak görünümüne geçin:

    Kaynak görünümü

  3. + Yeni bir anahtar eklemek için düğmeye tıklayın.

  4. Özellik için girin, Tür değerini farklı String bırakın ve Değer için veya production değerini girindevelopment:aps-environment

    aps-environment Özelliği

  5. Dosyadaki değişiklikleri kaydedin.

Uzaktan Bildirimlere Kaydolma

Uygulama Uzaktan Bildirimler gönderip alacaksa, mevcut UIApplication API'yi kullanarak Belirteç Kaydı gerçekleştirmesi gerekir. Bu kayıt, cihazın uygulamaya gönderilecek gerekli belirteci oluşturacak bir canlı ağ bağlantısı erişim API'lerine sahip olmasını gerektirir. Uygulamanın daha sonra uzaktan bildirimlere kaydolması için bu belirteci geliştiricinin sunucu tarafı uygulamasına iletmesi gerekir:

Belirteç Kaydına genel bakış

Gerekli kaydı başlatmak için aşağıdaki kodu kullanın:

UIApplication.SharedApplication.RegisterForRemoteNotifications ();

Geliştiricinin sunucu tarafı uygulamasına gönderilen belirtecin, Uzaktan Bildirim gönderirken sunucudan APN'lere gönderilen Bildirim Yükü'ne dahil edilmesi gerekir:

Bildirim Yükü'ne dahil edilen belirteç

Belirteç, bildirimle bildirimi açmak veya yanıtlamak için kullanılan uygulamayı birbirine bağlayan anahtar görevi görür.

Daha fazla bilgi için lütfen Apple'ın Yerel ve Uzaktan Bildirim Programlama Kılavuzu belgelerine bakın.

Bildirim Teslimi

Uygulama tamamen kayıtlı ve kullanıcı tarafından istenen ve kullanıcı tarafından verilen gerekli izinlerle, uygulama artık bildirim göndermeye ve almaya hazırdır.

Bildirim İçeriği Sağlama

iOS 10'da yeni eklenen tüm bildirimler, bildirim içeriğinin Gövdesi ile her zaman görüntülenecek bir Başlık ve Alt Başlıkiçerir. Ayrıca yeni, bildirim içeriğine Medya Ekleri ekleyebilme özelliğidir.

Yerel Bildirimin içeriğini oluşturmak için aşağıdaki kodu kullanın:

var content = new UNMutableNotificationContent();
content.Title = "Notification Title";
content.Subtitle = "Notification Subtitle";
content.Body = "This is the message body of the notification.";
content.Badge = 1;

Uzaktan Bildirimler için işlem benzerdir:

{
    "aps":{
        "alert":{
            "title":"Notification Title",
            "subtitle":"Notification Subtitle",
            "body":"This is the message body of the notification."
        },
        "badge":1
    }
}

Bildirim Gönderildiğinde Zamanlama

Bildirimin içeriği oluşturulduktan sonra, uygulamanın bir Tetikleyici ayarlayarak kullanıcıya bildirimin ne zaman sunulacağını zamanlaması gerekir. iOS 10 dört farklı Tetikleyici türü sağlar:

  • Anında İletme Bildirimi - Yalnızca Uzak Bildirimler ile kullanılır ve APN'ler cihazda çalışan uygulamaya bir bildirim paketi gönderdiğinde tetikler.
  • Zaman Aralığı - Yerel Bildirimin, şu andan itibaren bir zaman aralığından zamanlanıp gelecekteki bir noktayla bitmesini sağlar. Örneğin var trigger = UNTimeIntervalNotificationTrigger.CreateTrigger (5, false);
  • Takvim Tarihi - Yerel Bildirimlerin belirli bir tarih ve saat için zamanlamasına izin verir.
  • Konum Tabanlı - iOS cihazı belirli bir coğrafi konuma girerken veya ayrılırken veya herhangi bir Bluetooth İşaretine belirli bir yakınlıkta olduğunda Yerel Bildirimlerin zamanlamasına izin verir.

Yerel Bildirim hazır olduğunda, uygulamanın görüntülemesini kullanıcıya zamanlamak için nesnesinin UNUserNotificationCenter yöntemini çağırması Add gerekir. Uzak Bildirimler için sunucu tarafı uygulaması APN'lere bir Bildirim Yükü gönderir ve ardından paketi kullanıcının cihazına gönderir.

Tüm parçaları bir araya getirerek örnek bir Yerel Bildirim şöyle görünebilir:

using UserNotifications;
...

var content = new UNMutableNotificationContent ();
content.Title = "Notification Title";
content.Subtitle = "Notification Subtitle";
content.Body = "This is the message body of the notification.";
content.Badge = 1;

var trigger =  UNTimeIntervalNotificationTrigger.CreateTrigger (5, false);

var requestID = "sampleRequest";
var request = UNNotificationRequest.FromIdentifier (requestID, content, trigger);

UNUserNotificationCenter.Current.AddNotificationRequest (request, (err) => {
    if (err != null) {
        // Do something with error...
    }
});

Ön Plan Uygulama Bildirimlerini İşleme

iOS 10'da yeni olan bir uygulama, ön planda olduğunda ve bir Bildirim tetiklendiğinde Bildirimleri farklı şekilde işleyebilir. Uygulama, yöntemini UNUserNotificationCenterDelegate sağlayarak ve uygulayarak WillPresentNotification Bildirimi görüntüleme sorumluluğunu üstlenebilir. Örneğin:

using System;
using UserNotifications;

namespace MonkeyNotification
{
    public class UserNotificationCenterDelegate : UNUserNotificationCenterDelegate
    {
        #region Constructors
        public UserNotificationCenterDelegate ()
        {
        }
        #endregion

        #region Override Methods
        public override void WillPresentNotification (UNUserNotificationCenter center, UNNotification notification, Action<UNNotificationPresentationOptions> completionHandler)
        {
            // Do something with the notification
            Console.WriteLine ("Active Notification: {0}", notification);

            // Tell system to display the notification anyway or use
            // `None` to say we have handled the display locally.
            completionHandler (UNNotificationPresentationOptions.Alert);
        }
        #endregion
    }
}

Bu kod, uygulamasının UNNotification içeriğini Uygulama Çıkışına yazmak ve sistemden bildirim için standart Uyarıyı görüntülemesini istemektir.

Uygulama ön plandayken bildirimin kendisini görüntülemek istediyse ve sistem varsayılanlarını kullanmadıysa tamamlama işleyicisine geçin None . Örnek:

completionHandler (UNNotificationPresentationOptions.None);

Bu kod hazır durumdaysa, dosyayı düzenlemek üzere açın AppDelegate.cs ve yöntemini aşağıdaki gibi görünecek şekilde değiştirin FinishedLaunching :

public override bool FinishedLaunching (UIApplication application, NSDictionary launchOptions)
{
    // Request notification permissions from the user
    UNUserNotificationCenter.Current.RequestAuthorization (UNAuthorizationOptions.Alert, (approved, err) => {
        // Handle approval
    });

    // Watch for notifications while the app is active
    UNUserNotificationCenter.Current.Delegate = new UserNotificationCenterDelegate ();

    return true;
}

Bu kod, uygulamanın etkinken ve ön planda bildirim işleyebilmesi için yukarıdaki özel UNUserNotificationCenterDelegate öğeyi geçerli UNUserNotificationCenter öğeye ekler.

Bildirim Yönetimi

iOS 10'da yeni olan Bildirim Yönetimi, hem bekleyen hem de teslim edilen Bildirimlere erişim sağlar ve bu Bildirimleri kaldırma, güncelleştirme veya yükseltme olanağı sunar.

Bildirim Yönetimi'nin önemli bir parçası, sistemle birlikte oluşturulduğu ve zamanlandığı sırada Bildirime atanan İstek Tanımlayıcısı'dır. Uzaktan Bildirimler için bu, HTTP isteği üst bilgisindeki yeni apps-collapse-id alan aracılığıyla atanır.

İstek Tanımlayıcısı, uygulamanın Bildirim Yönetimi'ni gerçekleştirmek istediği Bildirimi seçmek için kullanılır.

Bildirimleri Kaldırma

Bekleyen bir Bildirimi sistemden kaldırmak için aşağıdaki kodu kullanın:

var requests = new string [] { "sampleRequest" };
UNUserNotificationCenter.Current.RemovePendingNotificationRequests (requests);

Önceden teslim edilen bir Bildirimi kaldırmak için aşağıdaki kodu kullanın:

var requests = new string [] { "sampleRequest" };
UNUserNotificationCenter.Current.RemoveDeliveredNotifications (requests);

Mevcut Bildirimi Güncelleştirme

Mevcut bir Bildirimi güncelleştirmek için, istenen parametrelerin değiştirildiği yeni bir bildirim oluşturun (yeni tetikleyici süresi gibi) ve bunu değiştirilmesi gereken Bildirimle aynı İstek Tanımlayıcısı ile sisteme ekleyin. Örnek:

using UserNotifications;
...

// Rebuild notification
var content = new UNMutableNotificationContent ();
content.Title = "Notification Title";
content.Subtitle = "Notification Subtitle";
content.Body = "This is the message body of the notification.";
content.Badge = 1;

// New trigger time
var trigger = UNTimeIntervalNotificationTrigger.CreateTrigger (10, false);

// ID of Notification to be updated
var requestID = "sampleRequest";
var request = UNNotificationRequest.FromIdentifier (requestID, content, trigger);

// Add to system to modify existing Notification
UNUserNotificationCenter.Current.AddNotificationRequest (request, (err) => {
    if (err != null) {
        // Do something with error...
    }
});

Zaten teslim edilmiş Bildirimler için, mevcut Bildirim güncelleştirilerek Giriş ve Kilit ekranlarında ve kullanıcı tarafından zaten okunduysa Bildirim Merkezi'nde listenin en üstüne yükseltilecektir.

Bildirim Eylemleriyle Çalışma

iOS 10'da, kullanıcıya teslim edilen bildirimler statik değildir ve kullanıcının bunlarla etkileşim kurabileceği çeşitli yollar sağlar (yerleşik eylemlerden özel Eylemlere).

Bir iOS uygulamasının yanıt verebileceği üç tür Eylem vardır:

  • Varsayılan Eylem - Bu, kullanıcının uygulamayı açmak ve verilen Bildirimin ayrıntılarını görüntülemek için bir Bildirime dokunmasıdır.
  • Özel Eylemler - Bunlar iOS 8'e eklendi ve kullanıcının uygulamayı başlatmaya gerek kalmadan doğrudan Bildirim'den özel bir görev gerçekleştirmesi için hızlı bir yol sağlar. Bunlar, özelleştirilebilir başlıklara sahip düğmelerin listesi veya Arka Planda (uygulamaya isteği yerine getirmek için az süre verilen) veya Ön Plan'da (isteği yerine getirmek için uygulamanın ön planda başlatıldığı yer) çalışabilen bir metin girişi alanı olarak sunulabilir. Özel Eylemler hem iOS hem de watchOS'ta kullanılabilir.
  • Eylemi Kapat - Kullanıcı belirli bir Bildirimi kapattığında bu Eylem uygulamaya gönderilir.

Özel Eylemler Oluşturma

Özel Eylem oluşturmak ve sisteme kaydetmek için aşağıdaki kodu kullanın:

// Create action
var actionID = "reply";
var title = "Reply";
var action = UNNotificationAction.FromIdentifier (actionID, title, UNNotificationActionOptions.None);

// Create category
var categoryID = "message";
var actions = new UNNotificationAction [] { action };
var intentIDs = new string [] { };
var categoryOptions = new UNNotificationCategoryOptions [] { };
var category = UNNotificationCategory.FromIdentifier (categoryID, actions, intentIDs, UNNotificationCategoryOptions.None);

// Register category
var categories = new UNNotificationCategory [] { category };
UNUserNotificationCenter.Current.SetNotificationCategories (new NSSet<UNNotificationCategory>(categories));

Yeni UNNotificationActionbir oluştururken, benzersiz bir kimlik ve düğmede görünecek başlık atanır. Varsayılan olarak, Eylem bir Arka Plan Eylemi olarak oluşturulur, ancak Eylemin davranışını ayarlamak için seçenekler sağlanabilir (örneğin, Ön Plan Eylemi olarak ayarlayın).

Oluşturulan eylemlerin her birinin bir Kategori ile ilişkilendirilmesi gerekir. Yeni UNNotificationCategorybir oluştururken benzersiz bir kimlik, gerçekleştirebileceği Eylemler listesi, Kategorideki Eylemlerin amacı hakkında daha fazla bilgi sağlayan Amaç Kimlikleri listesi ve Kategorinin davranışını denetlemeye yönelik bazı seçenekler atanır.

Son olarak, tüm Kategoriler yöntemi kullanılarak SetNotificationCategories sisteme kaydedilir.

Özel Eylemler Sunma

Özel Eylemler ve Kategoriler kümesi oluşturulup sisteme kaydedildikten sonra, Bunlar Yerel veya Uzak Bildirimler'den sunulabilir.

Uzaktan Bildirim için, Uzaktan Bildirim Yükü'nde yukarıda oluşturulan Kategorilerden biriyle eşleşen bir category ayarlayın. Örneğin:

{
    aps:{
        alert:"Hello world!",
        category:"message"
    }
}

Yerel Bildirimler için nesnesinin CategoryIdentifierUNMutableNotificationContent özelliğini ayarlayın. Örneğin:

var content = new UNMutableNotificationContent ();
content.Title = "Notification Title";
content.Subtitle = "Notification Subtitle";
content.Body = "This is the message body of the notification.";
content.Badge = 1;
content.CategoryIdentifier = "message";
...

Bu kimliğin yukarıda oluşturulan Kategorilerden biriyle eşleşmesi gerekir.

Kapatma Eylemlerini İşleme

Yukarıda belirtildiği gibi, kullanıcı bir Bildirimi kapattığında uygulamaya Bir Kapatma Eylemi gönderilebilir. Bu standart bir Eylem olmadığından, Kategori oluşturulduğunda bir seçeneğin ayarlanması gerekir. Örneğin:

var categoryID = "message";
var actions = new UNNotificationAction [] { action };
var intentIDs = new string [] { };
var categoryOptions = new UNNotificationCategoryOptions [] { };
var category = UNNotificationCategory.FromIdentifier (categoryID, actions, intentIDs, UNNotificationCategoryOptions.CustomDismissAction);

Eylem Yanıtlarını İşleme

Kullanıcı yukarıda oluşturulan Özel Eylemler ve Kategoriler ile etkileşim kurduğunda, uygulamanın istenen görevi yerine getirmesi gerekir. Bu, bir UNUserNotificationCenterDelegate sağlanarak ve yöntemi uygulanarak UserNotificationCenter gerçekleştirilir. Örneğin:

using System;
using UserNotifications;

namespace MonkeyNotification
{
    public class UserNotificationCenterDelegate : UNUserNotificationCenterDelegate
    {
        ...

        #region Override Methods
        public override void DidReceiveNotificationResponse (UNUserNotificationCenter center, UNNotificationResponse response, Action completionHandler)
        {
            // Take action based on Action ID
            switch (response.ActionIdentifier) {
            case "reply":
                // Do something
                break;
            default:
                // Take action based on identifier
                if (response.IsDefaultAction) {
                    // Handle default action...
                } else if (response.IsDismissAction) {
                    // Handle dismiss action
                }
                break;
            }

            // Inform caller it has been handled
            completionHandler();
        }
        #endregion
    }
}

Sınıfta geçirilen, UNNotificationResponse Varsayılan Eylem veya Kapat Eylemi olabilecek bir ActionIdentifier özelliğe sahiptir. Özel eylemleri test etmek için kullanın response.Notification.Request.Identifier .

UserText özelliği, herhangi bir kullanıcı metin girişinin değerini tutar. özelliği, Notification Tetikleyici ve Bildirim İçeriği ile İstek'i içeren kaynak Bildirimi tutar. Uygulama, tetikleyici türüne bağlı olarak bunun Yerel veya Uzak Bildirim olup olmadığını karar verebilir.

Not

iOS 12, özel bildirim kullanıcı arabiriminin çalışma zamanında eylem düğmelerini değiştirmesini mümkün kılar. Daha fazla bilgi için dinamik bildirim eylem düğmeleri belgelerine göz atın.

Hizmet Uzantılarıyla Çalışma

Uzaktan Bildirimler ile çalışırken Hizmet Uzantıları, Bildirim Yükü içinde uçtan uca şifrelemeyi etkinleştirmenin bir yolunu sağlar. Hizmet Uzantıları, kullanıcıya sunulmadan önce bildirimin görünür içeriğini büyütme veya değiştirme amacıyla arka planda çalışan kullanıcı arabirimi olmayan bir uzantıdır (iOS 10'da kullanılabilir).

Hizmet Uzantısına genel bakış

Hizmet Uzantıları hızlı bir şekilde çalıştırılır ve sistem tarafından yürütülmesi için yalnızca kısa bir süre verilir. Hizmet Uzantısının ayrılan süre içinde görevini tamamlayamaması durumunda bir geri dönüş yöntemi çağrılır. Geri dönüş başarısız olursa, kullanıcıya özgün Bildirim İçeriği görüntülenir.

Hizmet Uzantılarının bazı olası kullanımları şunlardır:

  • Uzaktan Bildirim içeriğinin uçtan uca şifrelemesini sağlama.
  • Bunları zenginleştirmek için Uzak Bildirimlere ek ekleme.

Hizmet Uzantısı Uygulama

Xamarin.iOS uygulamasında Hizmet Uzantısı uygulamak için aşağıdakileri yapın:

  1. Uygulamanın çözümünü Mac için Visual Studio açın.

  2. Çözüm Bölmesi'nde Çözüm Adı'na sağ tıklayın ve Yeni Proje Ekle'yi>seçin.

  3. iOS>Uzantıları>Bildirim Hizmeti Uzantıları'nıseçin ve İleri düğmesine tıklayın:

    Bildirim Hizmeti Uzantıları'nı seçin

  4. Uzantı için bir Ad girin ve İleri düğmesine tıklayın:

    Uzantı için bir Ad girin

  5. Gerekirse Proje Adını ve/veya Çözüm Adını ayarlayın ve Oluştur düğmesine tıklayın:

    Proje Adını ve/veya Çözüm Adını Ayarlama

Önemli

Hizmet uzantısının Paket Tanımlayıcısı, sonuna ekli ana uygulamanın Paket Tanımlayıcısı ile .appnameserviceextension eşleşmelidir. Örneğin, ana uygulamanın Paket Tanımlayıcısı com.xamarin.monkeynotifyvarsa, hizmet uzantısının Paket Tanımlayıcısı com.xamarin.monkeynotify.monkeynotifyserviceextensionolmalıdır. Uzantı çözüme eklendiğinde bu otomatik olarak ayarlanmalıdır.

Bildirim Hizmeti Uzantısı'nda gerekli işlevselliği sağlamak için değiştirilmesi gereken bir ana sınıf vardır. Örneğin:

using System;
using Foundation;
using UIKit;
using UserNotifications;

namespace MonkeyChatServiceExtension
{
    [Register ("NotificationService")]
    public class NotificationService : UNNotificationServiceExtension
    {
        #region Computed Properties
        public Action<UNNotificationContent> ContentHandler { get; set; }
        public UNMutableNotificationContent BestAttemptContent { get; set; }
        #endregion

        #region Constructors
        protected NotificationService (IntPtr handle) : base (handle)
        {
            // Note: this .ctor should not contain any initialization logic.
        }
        #endregion

        #region Override Methods
        public override void DidReceiveNotificationRequest (UNNotificationRequest request, Action<UNNotificationContent> contentHandler)
        {
            ContentHandler = contentHandler;
            BestAttemptContent = (UNMutableNotificationContent)request.Content.MutableCopy ();

            // Modify the notification content here...
            BestAttemptContent.Title = $"{BestAttemptContent.Title}[modified]";

            ContentHandler (BestAttemptContent);
        }

        public override void TimeWillExpire ()
        {
            // Called just before the extension will be terminated by the system.
            // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.

            ContentHandler (BestAttemptContent);
        }
        #endregion
    }
}

İlk yöntem olan DidReceiveNotificationRequest, Bildirim Tanımlayıcısı'na ve nesnesi aracılığıyla Bildirim İçeriği'ne request geçirilir. Kullanıcıya Bildirim sunmak için geçirilen contentHandler öğesinin çağrılmaları gerekir.

İkinci yöntem olan TimeWillExpire, hizmet uzantısının isteği işlemesi için zaman aşımına uğramadan hemen önce çağrılır. Hizmet Uzantısı ayrılan süre içinde öğesini çağıramazsa contentHandler , özgün içerik kullanıcıya görüntülenir.

Hizmet Uzantısını Tetikleme

Uygulamayla oluşturulan ve teslim edilen bir Hizmet Uzantısı ile, cihaza gönderilen Uzaktan Bildirim Yükü değiştirilerek tetiklenebilir. Örneğin:

{
    aps : {
        alert : "New Message Available",
        mutable-content: 1
    },
    encrypted-content : "#theencryptedcontent"
}

Yeni mutable-content anahtar, Uzaktan Bildirim içeriğini güncelleştirmek için Hizmet Uzantısının başlatılması gerektiğini belirtir. Anahtar, encrypted-content kullanıcıya sunmadan önce Hizmet Uzantısı'nın şifresini çözebileceği şifrelenmiş verileri tutar.

Aşağıdaki hizmet uzantısı örneğine göz atın:

using UserNotification;

namespace myApp {
    public class NotificationService : UNNotificationServiceExtension {

        public override void DidReceiveNotificationRequest(UNNotificationRequest request, contentHandler) {
            // Decrypt payload
            var decryptedBody = Decrypt(Request.Content.UserInfo["encrypted-content"]);

            // Modify Notification body
            var newContent = new UNMutableNotificationContent();
            newContent.Body = decryptedBody;

            // Present to user
            contentHandler(newContent);
        }

        public override void TimeWillExpire() {
            // Handle out-of-time fallback event
            ...
        }

    }
}

Bu kod, şifrelenen içeriğin şifresini anahtardan encrypted-content çözer, yeni UNMutableNotificationContentbir oluşturur, özelliğini şifresi çözülmüş içeriğe ayarlar Body ve bildirimi kullanıcıya sunmak için kullanır contentHandler .

Özet

Bu makalede, Kullanıcı Bildirimi'nin iOS 10 tarafından iyileştirildiği tüm yöntemler ele alınmıştır. Yeni Kullanıcı Bildirimi çerçevesini ve Xamarin.iOS uygulamasında veya Uygulama Uzantısında nasıl kullanılacağını sundu.