Интерактивные пользовательские интерфейсы уведомлений в Xamarin.iOS
Расширения содержимого уведомлений, представленные в iOS 10, позволяют создавать пользовательские пользовательские интерфейсы для уведомлений. Начиная с iOS 12, пользовательские интерфейсы уведомлений могут содержать интерактивные элементы, такие как кнопки и ползунки.
Файл расширения содержимого уведомления Info.plist
В примере приложения файл Info.plist в проекте RedGreenNotificationsContentExtension содержит следующую конфигурацию:
<!-- ... -->
<key>NSExtension</key>
<dict>
<key>NSExtensionAttributes</key>
<dict>
<key>UNNotificationExtensionCategory</key>
<array>
<string>red-category</string>
<string>green-category</string>
</array>
<key>UNNotificationExtensionUserInteractionEnabled</key>
<true/>
<key>UNNotificationExtensionDefaultContentHidden</key>
<true/>
<key>UNNotificationExtensionInitialContentSizeRatio</key>
<real>0.6</real>
</dict>
<key>NSExtensionMainStoryboard</key>
<string>MainInterface</string>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.usernotifications.content-extension</string>
<key></key>
<true/>
</dict>
<!-- ... -->
Обратите внимание на следующие функции:
- Массив
UNNotificationExtensionCategory
задает тип категорий уведомлений, которые обрабатывает расширение содержимого. - Чтобы поддерживать интерактивное содержимое, расширение содержимого
UNNotificationExtensionUserInteractionEnabled
уведомления задает для ключа значениеtrue
. - Ключ
UNNotificationExtensionInitialContentSizeRatio
задает начальное соотношение высоты и ширины интерфейса расширения содержимого.
Интерактивный интерфейс
MainInterface.storyboard, который определяет интерфейс для расширения содержимого уведомления, является стандартной раскадровки, содержащей один контроллер представления. В примере приложения контроллер представления имеет тип NotificationViewController
и содержит представление изображения, три кнопки и ползунок. Раскадровка связывает эти элементы управления с обработчиками, определенными в NotificationViewController.cs:
Обработчик кнопки "Запустить приложение" вызывает
PerformNotificationDefaultAction
метод действия,ExtensionContext
в котором запускается приложение:partial void HandleLaunchAppButtonTap(UIButton sender) { ExtensionContext.PerformNotificationDefaultAction(); }
В приложении центр
Delegate
уведомлений пользователя (в примере приложенияAppDelegate
) может реагировать на взаимодействие в методеDidReceiveNotificationResponse
:[Export("userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:")] public void DidReceiveNotificationResponse(UNUserNotificationCenter center, UNNotificationResponse response, System.Action completionHandler) { if (response.IsDefaultAction) { Console.WriteLine("ACTION: Default"); // ...
Обработчик кнопки "Закрыть уведомление " вызывается
DismissNotificationContentExtension
,ExtensionContext
в котором закрывается уведомление:partial void HandleDismissNotificationButtonTap(UIButton sender) { ExtensionContext.DismissNotificationContentExtension(); }
Обработчик кнопки "Удалить уведомление " закрывает уведомление и удаляет его из Центра уведомлений:
partial void HandleRemoveNotificationButtonTap(UIButton sender) { ExtensionContext.DismissNotificationContentExtension(); UNUserNotificationCenter.Current.RemoveDeliveredNotifications(new string[] { notification.Request.Identifier }); }
Метод, который обрабатывает изменения значений на ползунке, обновляет альфа-файл изображения, отображаемого в интерфейсе уведомления:
partial void HandleSliderValueChanged(UISlider sender) { Xamagon.Alpha = sender.Value; }