Aracılığıyla paylaş


Xamarin.iOS'ta bildirim yönetimi

iOS 12'de, işletim sistemi Bildirim Merkezi'nden ve Ayarlar uygulamasından bir uygulamanın bildirim yönetimi ekranına ayrıntılı bağlantı verebilir. Bu ekran, kullanıcıların uygulamanın gönderdiği çeşitli bildirim türlerini kabul etmelerini ve devre dışı bırakmalarını sağlayacaktır.

Bildirim yönetimi ekranı

Örnek uygulamada, ManageNotificationsViewController kullanıcıların kırmızı bildirimleri ve yeşil bildirimleri bağımsız olarak etkinleştirmesine ve devre dışı bırakmasına olanak tanıyan bir kullanıcı arabirimi tanımlar. Bu bir standarttır UIViewController her bildirim türü için bir UISwitch içeren. Her iki bildirim türü için anahtarın değiştirilmesi, kullanıcı varsayılanlarında kullanıcının bu tür bir bildirim için tercihini kaydeder:

partial void HandleRedNotificationsSwitchValueChange(UISwitch sender)
{
    NSUserDefaults.StandardUserDefaults.SetBool(sender.On, RedNotificationsEnabledKey);
}

Not

Bildirim yönetimi ekranı, kullanıcının uygulama için bildirimleri tamamen devre dışı bırakıp devre dışı bırakmadığını da denetler. Öyleyse, tek tek bildirim türlerinin geçişlerini gizler. Bunu yapmak için bildirim yönetimi ekranı:

  • Özelliğini çağırır UNUserNotificationCenter.Current.GetNotificationSettingsAsync ve inceler AuthorizationStatus .
  • Uygulama için bildirimler tamamen devre dışı bırakılmışsa, tek tek bildirim türleri için geçiş durumlarını gizler.
  • Uygulama ön plana her geçtiğinde bildirimlerin devre dışı bırakılıp bırakılmadığını yeniden denetler, çünkü kullanıcı iOS Ayarlar bildirimleri istediği zaman etkinleştirebilir/devre dışı bırakabilir.

Bildirimleri gönderen örnek uygulamanın ViewController sınıfı, bildirimin kullanıcının gerçekten almak istediği türde olduğundan emin olmak için yerel bir bildirim göndermeden önce kullanıcının tercihini denetler:

partial void HandleTapRedNotificationButton(UIButton sender)
{
    bool redEnabled = NSUserDefaults.StandardUserDefaults.BoolForKey(ManageNotificationsViewController.RedNotificationsEnabledKey);
    if (redEnabled)
    {
        // ...

iOS, Bildirim Merkezi'nden bir uygulamanın bildirim yönetimi ekranına ve Ayarlar uygulamasındaki uygulamanın bildirim ayarlarına ayrıntılı bağlantılar sağlar. Bunu kolaylaştırmak için bir uygulamanın şunları yapması gerekir:

  • Uygulamanın bildirim yetkilendirme isteğine geçirerek UNAuthorizationOptions.ProvidesAppNotificationSettings bir bildirim yönetimi ekranının kullanılabilir olduğunu belirtin.
  • yöntemini uygulamasından OpenSettingsIUNUserNotificationCenterDelegateuygulayın.

Yetkilendirme isteği

İşletim sistemine bir bildirim yönetimi ekranının kullanılabilir olduğunu belirtmek için, bir uygulamanın seçeneği (ihtiyaç duyduğu diğer bildirim teslim seçenekleriyle birlikte) üzerindeki yöntemine RequestAuthorization geçirmesi UNAuthorizationOptions.ProvidesAppNotificationSettingsUNUserNotificationCentergerekir.

Örneğin, örnek uygulamanın AppDelegateiçinde:

public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
{
    // Request authorization to send notifications
    UNUserNotificationCenter center = UNUserNotificationCenter.Current;
    var options = UNAuthorizationOptions.ProvidesAppNotificationSettings | UNAuthorizationOptions.Alert | UNAuthorizationOptions.Sound | UNAuthorizationOptions.Provisional;
    center.RequestAuthorization(options, (bool success, NSError error) =>
    {
        // ...

Open Ayarlar yöntemi

Bir OpenSettings uygulamanın bildirim yönetimi ekranına ayrıntılı bağlantı sağlamak için sistem tarafından çağrılan yöntem, kullanıcıyı doğrudan bu ekrana göndermelidir.

Örnek uygulamada, bu yöntem gerekirse için segue ManageNotificationsViewController gerçekleştirir:

[Export("userNotificationCenter:openSettingsForNotification:")]
public void OpenSettings(UNUserNotificationCenter center, UNNotification notification)
{
    var navigationController = Window.RootViewController as UINavigationController;
    if (navigationController != null)
    {
        var currentViewController = navigationController.VisibleViewController;
        if (currentViewController is ViewController)
        {
            currentViewController.PerformSegue(ManageNotificationsViewController.ShowManageNotificationsSegue, this);
        }

    }
}