İngilizce başlıktan sonra abesle iştigal edip yazımı türkçe yazacağım. :)
Bir süredir notification'larla boğuşuyorum. Boğuşmamın nedeni ise sürekli değişen bir altyapı olmuş sanırım ve birr dolu farklı dökümantasyondaki yolları izleyip denemem gerekti. Temiz ve düzenli bilgiye maalesef ulaşamadım, zaten örnek de fazla bulabilmiş değilim.
Her neyse deneye yanıla ios kısmındaki notification yönetimini şu şekilde yaptım;
AppDelegate class'ındaki FinishedLaunching'e aşağıdaki gibi kodlar nakşedilir. Bu kısım foreground yani uygulama açıkken çalışacak kısmı ifade ediyor.
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
Forms.Init();
// … kodlar kodlar … //
// … kodlar kodlar … //
if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0))
{
var notificationSettings = UIUserNotificationSettings.GetSettingsForTypes(
UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound, null
);
app.RegisterUserNotificationSettings(notificationSettings);
}
// Foreground notifications için.
UNUserNotificationCenter.Current.Delegate = new UserNotificationCenterDelegate();
return base.FinishedLaunching(app, options);
}
Nedir buradaki UserNotificationCenterDelegate() ? UNUserNotificationCenter'dan türetip metodlarını override ettiğimiz bir class. İşte şöyle;
public class UserNotificationCenterDelegate : UNUserNotificationCenterDelegate
{
{
#region Override Methods
public override void DidReceiveNotificationResponse(UNUserNotificationCenter center, UNNotificationResponse response, Action completionHandler)
{
public override void DidReceiveNotificationResponse(UNUserNotificationCenter center, UNNotificationResponse response, Action completionHandler)
{
// custom data böyle alınıyormuş.. bunu
bir türlü bulamamıştım.
var customData = response.Notification.Request.Content.UserInfo;
// … kodlar kodlar … //
var customData = response.Notification.Request.Content.UserInfo;
// … kodlar kodlar … //
// … kodlar kodlar … //
switch (response.ActionIdentifier)
{
// Bu actionlar custom actionlar
// Yani notification’a buton eklediyseniz butonun id'sine göre buralar çalışıyor.
//Bu ayrı bir yazı konusu. :)
case "approve":
// … kodlar kodlar … //
// … kodlar kodlar … //
break;
case "decline":
// … kodlar kodlar … //
break;
default:
// Bu actionlar default actionlar
case "decline":
// … kodlar kodlar … //
break;
default:
// Bu actionlar default actionlar
//
Yani notification’ın üzerine tıklandığında burası çalışıyor.
//haliyle
custom datayı en çok burada kullandım.
if (response.IsDefaultAction)
{
if (_notificationCustomData != null)
{
// … custom data ile dans eden kodlar … //
}
}
else if (response.IsDismissAction)
{
// Buraya düşüremedim uğraşmadım da gerçi J
}
break;
}
// Inform caller it has been handled
completionHandler();
}
public override void WillPresentNotification(UNUserNotificationCenter center, UNNotification notification, Action<UNNotificationPresentationOptions> completionHandler)
{
try
{
// … kodlar kodlar … //
if (response.IsDefaultAction)
{
if (_notificationCustomData != null)
{
// … custom data ile dans eden kodlar … //
}
}
else if (response.IsDismissAction)
{
// Buraya düşüremedim uğraşmadım da gerçi J
}
break;
}
// Inform caller it has been handled
completionHandler();
}
public override void WillPresentNotification(UNUserNotificationCenter center, UNNotification notification, Action<UNNotificationPresentationOptions> completionHandler)
{
try
{
// … kodlar kodlar … //
// burada da custom data böyle
alınıyormuş..
var customData = notification.Request.Content.UserInfo;
if (customData != null)
{
// … kodlar kodlar … //
if (customData != null)
{
// … kodlar kodlar … //
}else{
// uygulama
açıkken de isterseniz üstten notification gösterebilirsiniz, local notification
oluşturabilirsiniz vs. tüm daha elinizde.
// bu alert kısmı None olsa idi hiç
notification göstermemiş olacaktık.
completionHandler(UNNotificationPresentationOptions.Alert);
}
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex);
}
}
}
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex);
}
}
}
Şimdilik sadecee blogun yazarından bir mum duruşuuu :D
(Burada bir karikatür vardı ama telif yerim diye kaldırdım. Herkese dava açıyorlarmış karikatür paylaşılıyor diye. Karikatürün doğasına hiç uymuyor bence bu tavır :-/ )
Hay Allah :S
Hay Allah :S