環境: iOS,Xamarin
有時候可能要依不同的通知來產生不同的Actions來讓使用者選擇,要怎麼做呢?




我們可以先產生不同的 UIMutableUserNotificationCategory ,然後指定Action給它,
再將這些 UIMutableUserNotificationCategory 都加到 NSMutableSet 之中。
然後在設定 UIUserNotificationSettings 時加這些 UIMutableUserNotificationCategory 。
再來就是在發通知時指定使用的 Category ,這些通知就會顯示對應的 Actions 哦!
以下我們建立2個 UIMutableUserNotificationCategory 各有 2 個 Action 。
在 AppDelegate 中先定義好,如下,
public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
{
	//設定通知的Categories
	RegisterNotificationCategories();
	return true;
}
void RegisterNotificationCategories()
{
	//記錄所有
	var categories = new NSMutableSet();
	//建立第一個Category
	var category = new UIMutableUserNotificationCategory();
	category.Identifier = "category1";
	var categoryActions = new List<UIMutableUserNotificationAction>();
	//first action
	var act = new UIMutableUserNotificationAction();
	act.Identifier = "act1";
	act.Title = "正確";
	act.ActivationMode = UIUserNotificationActivationMode.Background;
	act.Destructive = false;
	act.AuthenticationRequired = false;
	categoryActions.Add(act);
	//second action
	act = new UIMutableUserNotificationAction();
	act.Identifier = "act2";
	act.Title = "錯誤";
	act.ActivationMode = UIUserNotificationActivationMode.Foreground;
	act.Destructive = false;
	act.AuthenticationRequired = false;
	categoryActions.Add(act);
	category.SetActions(categoryActions.ToArray(), UIUserNotificationActionContext.Default);
	//加入第一個Category
	categories.Add(category);
	//建立第二個Category
	category = new UIMutableUserNotificationCategory();
	category.Identifier = "category2";
	categoryActions = new List<UIMutableUserNotificationAction>();
	//first action
	act = new UIMutableUserNotificationAction();
	act.Identifier = "act1";
	act.Title = "Yes";
	act.ActivationMode = UIUserNotificationActivationMode.Background;
	act.Destructive = false;
	act.AuthenticationRequired = false;
	categoryActions.Add(act);
	//second action
	act = new UIMutableUserNotificationAction();
	act.Identifier = "act2";
	act.Title = "No";
	act.ActivationMode = UIUserNotificationActivationMode.Foreground;
	act.Destructive = false;
	act.AuthenticationRequired = false;
	categoryActions.Add(act);
	category.SetActions(categoryActions.ToArray(), UIUserNotificationActionContext.Default);
	//加入第2個Category
	categories.Add(category);
	UIUserNotificationType notificationTypes = UIUserNotificationType.Alert | UIUserNotificationType.Sound; 
	var categorySetting = UIUserNotificationSettings.GetSettingsForTypes(notificationTypes, categories);
	UIApplication.SharedApplication.RegisterUserNotificationSettings(categorySetting);
}
Button按下去時,發出通知,程式如下,
public override void ViewDidLoad()
{
	base.ViewDidLoad();
	btnNotify1.TouchUpInside += (sender, e) => {
		PerformLocalNotificationByCategory("category1");
	};
	btnNotify2.TouchUpInside += (sender, e) =>
	{
		PerformLocalNotificationByCategory("category2");
	};
}
void PerformLocalNotificationByCategory(string category)
{
	// create the notification
	var notification = new UILocalNotification();
	// set the fire date (the date time in which it will fire)
	notification.FireDate = NSDate.Now;
	// configure the alert
	notification.AlertAction = "View Alert";
	notification.AlertBody = $"這是{category}的Actions";
	// set the sound to be the default sound
	notification.SoundName = UILocalNotification.DefaultSoundName;
	//
	notification.Category = category;
	// schedule it
	UIApplication.SharedApplication.ScheduleLocalNotification(notification);
}
非常感謝同事Alice 的幫忙Survey
所以按下Button後,畫面就會像上面這樣,有這不同的Action可以使用。
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^

