daron yöndem | Microsoft Regional Director | Silverlight MVP
Microsoft Regional Director | Nokia Developer Champion | Azure MVP
Bu yazıyı yazmam 15 dakikamı aldı. Siz normal bir okuma hızı ile ortalama 1 dakikada, göz gezdirerek ortalama 1 dakikada okuyabilirsiniz ;)

Yaklaşık 10 yıldır öyle veya böyle bir çok etkinlik düzenledim, katıldım, konuştum. Tüm bu süreçte gördüğüm etkinlik çeşitleri arasında bence en değerli olanlar katılım kaygısı yaşamayanlar. "Katılım kaygısı" çok gerçek bir kavram ve kötü bir şey de değil. Katılımcı olmazsa konuşmacı konuşamaz sonuç itibari ile :) Fakat katılımcı kaygısının bir sakıncası, konuların her zaman popüler konulardan seçilmesi ve seviyenin de daha çok kişiye hitap edilebilmesi adına düşük tutulması. Bundan birkaç ay önce bu kaygıların hiçbirinin olmadığı bir etkinlik yapalım istedim ve sevgili Cihan Yakar ve Yiğit Özaksüt ile yan yana gelip bir plan çıkardık.

Serverless ve Azure Functions oturumumdan bir kare.

Bu planın sonucu olarak geçen pazar günü ikinci Teknolot etkinliğimizi yaptık. Adını da "Anlatacaklarımız var" koyduk :) Hatırlayanlarınız Teknolot'u video yayınlanan bir site olarak anımsayacaktır. Fakat şu an sitemiz vs yok :) Sadece twitter ve facebook hesaplarımız var. Zaten en son etkinlikten bu yana da dört sene geçmişti :) Yavaştan alıyoruz diyebiliriz :)

Etkinlik gerçekten güzel oldu ve tahmin ettiğimizin çok üstünde bir katılım gerçekleşti. Ben bir süredir anlatmak istediğimiz Serverless ve Azure Functions ve Azure Service Fabric ile Microservices oturumlarını sundum. Büyük ihtimalle herkesin kafasını iyice karıştırıp bıraktım :) Şaka bir yana, eğlenceli ve güzel bir gündü. Bizi yalnız bırakmayan herkese buradan da tekrar çok teşekkürler. Bir sonrakinde görüşmek üzere.

Bu yazıyı yazmam 7 dakikamı aldı. Siz normal bir okuma hızı ile ortalama 1 dakikada, göz gezdirerek ortalama 1 dakikada okuyabilirsiniz ;)

Dün Trabzon, Karadeniz Teknik Üniversitesi'ndeydim. Günübirlik bir ziyaret ile Azure ve Cloud 101 oturumumu yaptım. Sonrasında da KTÜ'nün eski mezunlarından ve benim de öğrencilik zamanlarından tanıdığım sevgili Hilal Şener'i de sahneye alarak öğrencilerle eğlenceli bir kariyer sohbeti yaptık.

Trabzon, Karadeniz Teknik Üniversitesi ziyaretim.

Sabah havaalanında karşılayıp tüm gün beni yalnız bırakmayan sevgili Yrd. Doç. Dr. Ali Kürşat ERÜMİT hocama da buradan çok teşekkür ediyorum. Maalesef ki çok az üniversitede hocalarımızın gelip öğrencilerin önünde sahne alan konuşmacıları dinlediğini görüyorum. Bu durum her nedenle olursa olsun üzücü ve ders çıkarılması gereken bir durum. Konuyla ilgili yorumlarımı şimdilik kendime saklayarak etkinliğe katılan KTÜ'deki hocalarımıza buradan tekrar çok teşekkür ediyorum. Bir sonrakinde görüşmek üzere.

Bu yazıyı yazmam 14 dakikamı aldı. Siz normal bir okuma hızı ile ortalama 1 dakikada, göz gezdirerek ortalama 1 dakikada okuyabilirsiniz ;)

Had a beautiful week-end in Cape Town, South Africa. This wasn't just a leaisure trip. You definitly don't fly 11 hours for a week-end. This was more of a business trip with some pretty fun loaded action in it. This has been the time of the MVP Local Summit for MEA, or officially, the MVP Community Summit for 2017. For those of you who have no idea what we do during the summit, we simply provide feedback to Microsoft and do an overall sync.

MVP Community Summit for 2017 This is me providing feedback to Microsoft!

The content of the event is mostly under NDA. So nothing to discuss there. However the city of Cape Town is definitly going to have another visit from me. It is such a lovely city with beautiful views and nature.

Table Mountain, Cape Town

I'm already looking forward to our next MVP Community Summit. Eagerly waiting to see what city of MEA will be the host next round.

Bu yazıyı yazmam 9 dakikamı aldı. Siz normal bir okuma hızı ile ortalama 1 dakikada, göz gezdirerek ortalama 1 dakikada okuyabilirsiniz ;)

Dün Azure anlatmak üzere İstanbul Arel Üniversitesi'ndeydim. Her zamanki Cloud 101 oturumunu yaptım :)

Arel Üniversitesi'nde Azure oturumum

Oturumda arkadaşlar salonun fotoğrafını çekmemişler sanırım ki sadece yukarıdaki fotoğraf var. Aslında bir süredir bu konuda ilginç bir şekilde sorun yaşıyorum :) Genelde etkinlik sonrasında organizasyondaki kardeşlerimden fotoğrafları bana göndermelerini isterim. Son zamanlarda sürekli kendi fotoğrafımı yolluyorlar bana :) Oysa benim için kendi fotoğrafım değil, salondaki dinleyicilerle olan fotoğrafım önemli :) Bu konuda artık etkinliklerden önce gençleri uyarmaya bile başladım "Beni değil etkinliği çekin" şeklinde :) Buradan da derdimi paylaşmak istedim :) Böylece belki sonraki birkaç etkinliği kurtarmış oluruz.

Gittiğim yerlerden haberdar olmak isteyenler buradan mail adreslerini bırakabilir. Son zamanlarda bu haberleri Instagram'da da stories kısmına atmaya başladım :) Orası da bir alternatif olabilir.

Görüşmek üzere.

Bu yazıyı yazmam 7 dakikamı aldı. Siz normal bir okuma hızı ile ortalama 1 dakikada, göz gezdirerek ortalama 1 dakikada okuyabilirsiniz ;)

Dün Kocaeli Üniversitesi'ndeydim. Hızlı bir ziyaret yaparak "Boş Durma Boşa Çalış" oturumumu sundum. Her zamanki gibi eğlenceli bir gün oldu :)

Kocaeli Üniversitesi Oturumum

Etkinliğin organizasyonunda emeği geçen Kocaeli Üniversitesi Genç Girişimciler Kulübü'ne ve sevgili Ümit Demiralp'a çok teşekkür ediyorum.

Bir sonrakinde görüşmek üzere.

Bu yazıyı yazmam 13 dakikamı aldı. Siz normal bir okuma hızı ile ortalama 1 dakikada, göz gezdirerek ortalama 1 dakikada okuyabilirsiniz ;)

Bugün StartersHub'ın düzenlediği XO Selection Day'deydim. Iot, Big Data veya FinTech odaklı 26 Startup'ın yer aldığı günde ben de mentor olarak bulundum. Startup etkinliklerine mentor veya jüri olarak katılırken genel olarak teknik karar verici şapkamı takıyorum. Bunun nedeni aslında çoğu zaman zaten jüriden veya mentorlardan yeterince iş kararları tarafında tavsiyelerin çıkıyor olduğunu düşünmem. Tüm bu manzara içerisinde startuplarda gördüğüm en büyük eksik ise aslında teknik tarafta değil :) Yani daha oraya gelemeden zaten bir pazar araştırması sorunsalı ile karşı karşıyayız. Çoğu startup bir fikre sahip olan girişimci ruhun ortaya bir POC/MVP çıkarması ile yola çıkarken içerisine girdiği pazarın durumunu incelemiyor. Durum böyle olunca aslında herkes karanlıkta ay ışığına doğru kulaç atıyor :) Ben startup etkinliklerinde her ne kadar teknik olarak startuplara nerede yardımcı olabilirim diye baksam da nihai noktada verdiğim üç tavsiye oluyor;

Starterhub XO Selection Day 2017

  • Pazarı araştırın. Yaptığınızı yapanlar var mı? Ne yapıyorlar? Nasıl yapıyorlar? Neden onların yerine sizin ürününüz seçilsin? Onların yerinde olsanız sizin ürünü gördüğünüzde ne düşünür ve ne yapardınız?
  • Teknik fizibilite çalışması yapın. Hayal ettiğiniz teknik altyapı hayal ettiğiniz şekilde ölçeklenebiliyor mu?
  • Müşteriyi araştırın. Hayal ettiğiniz ihtiyaç gerçek mi? Gerçekse bu ihtiyacı karşılamak için müşterinin isteği ne kadar?
Her etkinlikte, yukarıda listeli, çok basit olduğunu düşünebileceğiniz ve "ee bunları zaten herkes biliyor" diyebileceğiniz soruları tekrar ederken buluyorum kendimi. Oysa ben bunları söylemek için gitmiyorum :) O nedenle buraya bir yazayım, belki birileri okur diye düşündüm.

Bir de unutmadan, insanlar sizden üç dakikalık İngilizce sunum yapmanızı istiyorlarsa oturup ezberleyin :) Bir sonraki slaytın ne olduğunu bilmeden sunum yapacaksanız insanlara projenize verdiğin önemi anlatmakta sıkıntı yaşayabilirsiniz.

Kendinize çok iyi bakın. Görüşürüz.

Bu yazıyı yazmam 8 dakikamı aldı. Siz normal bir okuma hızı ile ortalama 1 dakikada, göz gezdirerek ortalama 1 dakikada okuyabilirsiniz ;)

Dün Yaşar Üniversitesi'nde konuşmak için İzmir'deydim. Yine teknik olmayan bir oturum olarak "Boş Durma Boşa Çalış" oturumunu sundum. Nedense kimse teknik oturum istemiyor artık :) "Serverless" diyorum, "Microservices" diyorum :) satmıyor :)

Yaşar Üniversitesi Ziyaretim

Şaka bir yana benim için güzel ve eğlenceli bir gün oldu. "Boş Durma Boşa Çalış" oturumu teknik oturumlarıma kıyasla çok daha fazla kişiye dokunabiliyor. Sanırım bolca tercih edilmesinin nedeni de bu.

Unutmadan, Yaşar Üniversitesi'nin IEEE / Computer Society Topluluğu'na da çok teşekkür ediyorum. Uzun yıllardır İzmir'de benim denk geldiğim en kalabalık etkinliklerden birini yapmayı başardılar. Elinize sağlık!

Bir dahakine görüşmek üzere ;)

Bu yazıyı yazmam 44 dakikamı aldı. Siz normal bir okuma hızı ile ortalama 1 dakikada, göz gezdirerek ortalama 1 dakikada okuyabilirsiniz ;)

Bugün çok güzel bir etkinliğe konuk oldum. İstanbul Sabahattin Zaim Üniversitesi'nin ev sahipliği yaptığı 2. Blog Yazarları Çalıştayı'na konuşmacı olarak katıldım. İlk blog postumu yazalı 11 yıl olmuş olsa da kendimi hiçbir zaman bugünkü tanımı ile bir blogger olarak görmemişimdir :) Sanırım bu durumun bir nedeni de aslında benim blogun pek doğal bir "günlük" havasında olmaması. Yazdığım teknik yazılara birer blog post değil de "makale" gözü ile bakıyorum. Teknik içerikli makalelerin haricinde de çok az sayıda blog postum var. Aslında bir ara Dertli Kerem yazıları yazıyordum, eskiler hatırlarlar :) Fakat bu tarz yazıların cımbızlanması, öncesinde ve sonrasında gerektirdiği emeği göz önüne alınca bu enerjiyi teknik yazılara yönlendirmeyi daha uygun gördüm. Diğer yandan Youtube videoları ile beraber de daha tembel bir şekilde kendimi ifade edebilme lüksünü yakalayınca :) sanırım Dertli Kerem'ler biraz rafa kalktı.

Bu vesile ile aslında sizlere de şunu sorayım; siz ne düşünüyorsunuz? Off-topic takılacaksan git başka blog aç diyebilirsiniz :) Yok, buraya koy, iyi oluyor da diyebilirsiniz. Özetle, fikirlerinizi merak ediyorum.

Blog Çalıştaryı'ndan bir kare.

2.Blog Çalıştayı benim için profesyonel anlamda blogging yapılan dünyaya bir pencere oldu :) Benim genelde blogumdaki yaklaşımım, "faydalı olacağını düşündüğüm, bildiğim şeyleri yazarım"'dan öteye geçmezken profesyonel anlamda blogging dediğimizde ise tabi ki işi çok daha ciddiye almak gerekiyor. Enteresan şeyler öğrendim :) ama anlatmayacağım. Bir sonraki çalıştayı kaçırmayın derim. Şaka bir yana, etkinlikte inanılmaz emeği olan sevgili Evren Soyuçok'a buradan da çok teşekkür ediyorum. Bu gibi etkinliklerin organizasyonundaki zorlukları eski INETA yıllarımdan çok iyi bilirim :) Etkinlikte konuşmacı olarak yer alan diğer bloggerlar Atıf Ünaldı, Funda Güleç Yalçın ve Yeşim Mutlu ile de tanışmak süperdi. Yazılım dünyasında bir blogger olarak aslında ne kadar da şanslı olduğumun farkına varmamı sağladılar :)

Çalıştayın video kaydı da alındı diye hatırlıyorum. Elime ulaştığınıda Twitter ve Facebook üzerinden paylaşacağım.

Görüşürüz.

Bu yazıyı yazmam 68 dakikamı aldı. Siz normal bir okuma hızı ile ortalama 3 dakikada, göz gezdirerek ortalama 1 dakikada okuyabilirsiniz ;)

Daha önceki Azure Functions ve Webhooks konusundaki yazıda Github'ı örnek olarak kullanmıştık. Fakat aslına bakarsanız Azure Functions ile beraber Github ve Slack için hazır entegrasyon yapıları geliyor. Örneğin yine Azure Functions ve Webhooks yazısından hatırlarsanız Github implementasyonunda Secret'ı kullanmamış ve o kısmı size bırakmıştım. Onun yerine biz URL üzerinden giden Function based Authentication kullanmıştık. Oysa Secret kullansaydık buna da gerek kalmayacaktı :) Peki neden o yazıyı öyle yazdın? derseniz :) ben konuyu daha genel bir yapıda anlatmak istedim. Bu yazıda ise Azure Functions için httpTrigger'lardaki webHookType özelliğine bakacağız.

httpTrigger'da webHookType

Azure Functions'da trigger olarak httpTrigger kullanırken webHookType denilen bir özelliği de opsyonel olarak tanımlayabiliyorsunuz. Bu özelliğin alabildiği şu an için üç değer var;

  • genericJson : Bu seçenekte aslında tek yapılan httpTrigger'ın sadece POST almasını sağlamak ve application/json content-type sınırlaması yapmak. Bunun dışında bir işlevsellik sağlamıyor. Biz bunu kapaca Azure Functions ve Webhooks konusundaki yazıda webHookType kullanmadan yaptık.
  • github : Bu tahmin edebileceğiniz üzere doğrudan github uyumlu olarak çalışabilen bir webhook receiver implementasyonu yapmamızı sağlayacak. Yine Azure Functions ve Webhooks konusundaki yazıda bahsettiğimiz Secret kısmı ile ilgili implementasyon burada otomatik olarak geliyor. Dikkat edilmesi gereken tek nokta trigger definition'da authLevel özelliğinin ayarlanmamış olması gerekiyor. Nedeni ise aslında anonim bir metod kullanarak validasyonu * X-Hub-Signature* header'ı üzerinden yapacak olmamız.
  • slack : Aynı bir önceki github örneğinde olduğu gibi bu seçenek de doğrudan Slack için hazır bir yapı getiriyor. Bu seçenekte de authLevel özelliğinin trigger definition'da tanımlanmaması gerekiyor.
[function.js]

{
  "bindings": [
    {
      "type": "httpTrigger",
      "direction": "in",
      "webHookType": "github",
      "name": "req"
    },
    {
      "name": "cikanNesneler",
      "type": "table",
      "tableName": "Cikanlar",
      "connection": "AzureWebJobsStorage",
      "direction": "out"
    }
  ],
  "disabled": false
}

Yukarıdaki bindinglerden de anlayabileceğiniz üzere örneğimizde bir httpTrigger ile input binding kullanırken yine Azure Functions ve Webhooks konusundaki yazıda yaptığımız gibi kayıtları alıp Table Services'a atacağız. Normal şartlardaki bir httpTrigger'dan farklı olarak burada bir de webHookType denilen bir özelliğe github değerini veriyoruz.

Github Secret doğrudan ekranda.

webHookTypegithub olarak ayarladığınız anda Azure Web Portal'ındaki Azure Functions editöründe bir değişiklik göreceksiniz. Artık code parametresi ile URL üzerinden bir erişim kodu gitmeyecek. Onun yerine doğrudan Github Secret adında bir field ekleniyor. Bu fielddeki değeri alıp Github'da WebHook tanımlarken doğrudan Github Secret olarak vereceğiz.

Github Secret'ı Webhook tanımlarken Github'a veriyoruz.

Azure Portal'ından aldığımız key'i yukarıdaki gibi github'da WebHook'a Secret olarak verdiğimizde aslında işimiz neredeyse bitmiş oluyor.

[run.csx]

using System.Net;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, ICollector<GithubKaydi> cikanNesneler, TraceWriter log)
{
   dynamic data = await req.Content.ReadAsAsync<object>();

   GithubKaydi cikanLog = new GithubKaydi();
   cikanLog.PartitionKey = data?.action;
   cikanLog.RowKey = System.Guid.NewGuid().ToString();
   cikanLog.JSONPayload = data?.ToString();
   cikanNesneler.Add(cikanLog);

   return req.CreateResponse(HttpStatusCode.OK, new
   {
      body = $"From GitHub : {data.assignee.id}"
   });
}

public class GithubKaydi
{
   public string PartitionKey { get; set; }
   public string RowKey { get; set; }
   public string JSONPayload { get; set; }
}

Yukarıdaki örnek yine Azure Functions ve Webhooks konusundaki yazıdan çalıntı :) Değişen tek kısım benim Newtonsoft kullanmaktan vazgeçmem oldu :) Onun dışında kod bire bir aynı.

Github'dan gelen webhook verileri Table Services'da.

Verileri yine alıp Table Services'a attığımız için yukarıdaki gibi full JSON Payload'u görebiliyoruz.

İtiraf etmek gerekirse webhooktypelar zamanla artacak gibi hissediyorum :) Hatta bu konuda ipucu olarak Github'da yakaladağım fakat daha resmi dokümantasyonda olmayan şeyler de var :) Bakalım ilerleyen zamanlarda başka neler göreceğiz :)

Görüşmek üzere.

Bu yazıyı yazmam 55 dakikamı aldı. Siz normal bir okuma hızı ile ortalama 4 dakikada, göz gezdirerek ortalama 1 dakikada okuyabilirsiniz ;)

Dünkü Azure Functions ve Notification Hub Binding yazısından sonra gelen birkaç soru ile farkına vardım ki aslında Notification Hub konusunda da bir yazı iyi olurmuş :) O nedenle gelin Azure'daki Notification Hub'a bir giriş yapalım. Azure Functions yazısı için test ortamı kurulumunu yaparken attığım adımları sizlerle paylaşarak aslında Notification Hub ile WNS (Windows Push Notification Services) kullanarak basit bir UWP uygulamasına Push Notification yollayacağız.

WNS ve Live Services Kaydı

Azure tarafına geçmeden önce kendimize bir WNS hesabı ayarlayıp erişim bilgilerini almamız gerekiyor. Bunu da ancak bir uygulama ile eşleştirerek yapıyoruz çünkü WNS o uygulamanın deployment sertifikasını kullanacak arka planda. O nedenle ilk olarak Windows Dev Center'a gidip bir uygulama kaydı yaratıyoruz.

Dev Center'da yeni bir uygulama...

Dev Center'a girdikten sonra yukarıdaki gibi bir manzara ile karşılaşacaksınız. Create a new app diyerek ilerleyebilirsiniz. Uygulamanızı Store'a göndermeniz falan gerek yok :) Sadece ismini alıyoruz ve gerekli ek kayıtların yaratılmasını sağlıyoruz.

WNS ayarlarının yolunda...

Uygulamayı yarattıktan sonra hemen yukarıdaki ekran görüntüsündeki gibi Services kısmına gidip Push Notification'a tıklıyoruz. Burada New Notification vs gibi kısımlara kanmayın :) girmek istediğimiz yer WNS/MPNS sayfası.

Live Services sitesine yolculuk...

Yukarıdaki gibi yeni sayfaya yönlendirildiğiniz anda bir sonraki tıklamamız gereken link de "visit Live Services site" kısmı olacak. Buraya tıkladığımızda doğrudan WNS registration sayfasına yönlendirileceğiz.

Application Secret karşımızda

Karşımızda yeni açılacak olan sayfada ilk karşılaşacağınız yer Application Secrets kısmı. Buradaki key'e Azure'da Notification Hub'ımızı ayarlarken ihtiyacımız olacak. O nedenle bir kenara yazmanızda fayda var :)

Package SID'yi de alıyoruz.

Aynı sayfanın altına doğru scroll ederseniz bu sefer de yukarıdaki kısımla karşılaşacaksınız. Buradan da Package SID denilen kısmı alıyor olmamız gerekiyor. Özetle, secret key ile SID'yi kenara yazdınız mı işimiz tamam demektir.

Azure Notification Hub'ı alma zamanı

Artık Azure Notification Hub'ımızı ayarlayabiliriz. Azure Portal'ına gidip yeni bir Notification Hub hizmeti alabilirsiniz. Hizmeti alırken bir namespace, bir de hub ismi vermeniz gerekecek. Free Tier denilen ücretsiz seviyeden devam edebilirsiniz. Bu seviyede namespace başında 10 hub yaratabiliyor ve 500 cihaz için toplam 1 milyon push notification desteği alabiliyorsunuz. Sonraki seviyelerde tabi ki bu sayı artıyor. Test için bu seviye bize yeterli olacaktır.

WNS Erişim bilgilerini Notification Hub'a veriyoruz.

Notifcation Hub'ı aldıktan sonra hemen kullanacağınız Push Notification hizmetlerini ayarlamanız gerekecek. Azure Notification Hub apns (Apple Push Notification Service), adm (Amazon Device Messaging), gcm (Google Cloud Messaging), wns (Windows Push Notification Services), Baidu ve mpns (Microsoft Push Notification Service) desteğine sahip. Tüm bu hizmetlerle bizim adımıza konuşabilir. Yapmamız gereken şey bu yazının başında WNS için yaptığımız gibi gerekli ayarları yapıp gerekli erişim bilgilerini edinmek. Hatırlarsanız elimizde bir Package SID ve Secret vardı. İşte bu bilgileri şimdi Azure Portal'ında Azure Notification Hub'ta Push Notification Services olarak WNS seçip ekleyeceğiz. Bu bilgileri tamamladıktan sonra artık bu Notification Hub ile WNS push notificationları gönderebiliriz.

UWP Appininin hazırlanması.

Şu ana kadar UWP tarafına pek bulaşmadık. İlk başta Dev Center'da uygulama adını tanımlayıp Live Services'dan da WNS bilgilerini aldık o kadar. Sıra geldi Visual Studio açıp bir UWP uygulaması oluşturmaya.

Application Secret karşımızda

UWP uygulamasını yarattıktan sonra ilk yapmamız gereken bu uygulama ile Store'da yarattığımız uygulamanın ilişkisini kurmak. Malum şu anda bu uygulama aslında benim örneğimdeki Daron-test uygulaması olduğunu bilmiyor. Bu bilgiye sahip olması kritik aksi halde o aldığımız SID ve Secret'ın bu proje ile bir ilişkisi olmaz. Bu nedenle hemen yukarıdaki gibi Store / Associate App with Store derseniz karşınıza gelecek olan ekranda Dev Center'da kullandığınız Microsoft Account ile login olarak uygulama listesine ulaşabilirsiniz. Oradan da tek yapmanız gereken Store'da ismini verdiğiniz uygulamayı seçip onaylamak.

Application Secret karşımızda

Sıra geldi artık yavaştan birkaç satır kod yazmaya :) Ama ona da başlamadan önce WindowsAzure.Messaging nuget paketini almamız gerekiyor ki Notification Hub ile konuşabilelim. Bu nuget paketini de projeye ekledikten sonra artık kod yazmaya hazırız :)

[App.xaml.cs]

protected async override void OnLaunched(LaunchActivatedEventArgs e)
{
   var channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();

   var hub = new NotificationHub("daronnotification", "Endpoint=sb://{ENDPOINT}.servicebus.windows.net/;SharedAccessKeyName=DefaultListenSharedAccessSignature;SharedAccessKey={KEY}");
   var result = await hub.RegisterNativeAsync(channel.Uri);

   // Displays the registration ID so you know it was successful
   if (result.RegistrationId != null)
   {
      var dialog = new MessageDialog("Registration tamamlandı: " + result.RegistrationId);
      dialog.Commands.Add(new UICommand("OK"));
      await dialog.ShowAsync();
   }

Yukarıdaki kod app.xaml.cs'in şu an için bizi ilgilendiren kısmı. İlk satırda mevcut app için bir PushNotificationChannel oluşturuyoruz. Sonra bu kanalı NotificationHub'a vermemiz gerekiyor ki artık bu kanaldan notification yollama için Hub yapsık. Bunun için de biraz önce eklediğimiz Nuget paketini kullanacağız.

Access Policy'ler burada.

Kod içerisindeki NotificationHub nesnesini yaratırken hub'ın adını ve portalden Access Policy'lerden alacağımız DefaultListenSharedAccessSignature endpointini veriyoruz. Son olarak da RegisterNativeAsync ile kanalın adresini Notification Hub'a gönderiyoruz. Ben ten amaçlı olarak kanalın ID'sini bir MessageDialog ile de gösterdim.

Herşey hazır.

Artık Push Notification gönderebilmemiz için herşey hazır. Test amaçlı olarak Azure Portal'ındaki "Test Send" kısmını kullanabiliriz.

Test notification gönderme zamanı.

Testimizi Windows platformu için Toast Notification olarak yapalım. Zaten sadece WNS ayarladığımız için diğer platformlara şu an için notification gönderemeyiz. Ekranın alt kısmına bakarsanız UWP appini çalıştırdığımızda (En azından bir defa çalıştırdığınızı varsayıyorum) kaydolan Push Kanalı'nın bilgilerini görebilirsiniz. Geriye Send diyip sonucu görmek kalıyor :)

İşte tüm bunları dünkü Azure Functions ve Notification Hub yazısı ile birleştirdiğinizde ortaya güzel bir manzara çıkıyor :) Tabi daha NotificationHub ile ilgii karıştırmadığımız özellikler var. Onlar da sonraki yazılara ;)

Görüşmek üzere.

Twitter
RSS
Youtube
RSS Blog Search
Arşiv'de tüm yazıların listesi var. Yine de blog'da arama yapmak istersen tıkla!
Instagram Instagram