.NET Core з Firebase Cloud Messaging (FCM) для надсилання сповіщень

Arkadaşlar merhaba, Türkçe kaynak eksikliği nedeniyle, bu makalede Firebase Cloud Messaging (HTTP v1)’i .NET Core ile nasıl kullanabileceğimizi adım adım anlatacağım. Umarım bu makale yararlı olur ve sizde sisteminize entegre edebilirsiniz.ilk olarak;

Firebase Cloud Messaging (FCM) nedir?
Firebase Cloud Messaging (FCM), Google tarafından sağlanan, uygulamalara bildirim ve mesaj gönderimini mümkün kılan bir hizmettir. FCM ile, kullanıcıların mobil veya web uygulamalarına gerçek zamanlı bildirimler gönderebilir ve kullanıcı deneyimini artırabilirsiniz. Özellikle HTTP v1 API, güvenlik ve özellik anlamında eski sürümlere göre daha yeteneklidir. (O bildiğiniz Uyuz bildirimler ^^)

FCM’nin Çalışma Mantığı

FCM, kullanıcılara gerçek zamanlı bildirimler göndermek için kullanılan güçlü bir araçtır. Çalışma mantığı şu şekilde işler:

  1. Kullanıcı Bildirimlere İzin Verir:
    Kullanıcı siteye girdikten sonra tarayıcısından bildirimlere izin vermesi istenir.
  2. Token Oluşturulur:
    Kullanıcının cihazına ve tarayıcısına özel bir token oluşturulur. Bu token, kullanıcının FCM üzerinden tanınmasını sağlar.
  3. Bildirim Gönderilir:
    Başka bir uygulama veya servis (örneğin, .NET Core API’niz), bu tokeni kullanarak ilgili kullanıcıya bildirim gönderir.

Firebase Cloud Messaging HTTP v1 .NET Core’da Nasıl Kullanılır?

İlk olarak, Firebase Console’a giriş yaparak yeni bir proje oluşturmanız gerekiyor. Proje oluşturduktan sonra, hangi platform için FCM kullanmak istediğinizi seçmeli ve yapılandırmalısınız (iOS, Android, Web, vb.). Bu örnekte Web platformu üzerinden ilerleyeceğiz ve projemizi buna uygun olarak hazırlayacağız.

Web platformu için proje oluşturduktan sonra, Project Settings (Proje Ayarları) bölümünden gerekli kodlara ve token bilgilerine ulaşabilirsiniz. Bu adımları doğru bir şekilde tamamlamayı unutmayın.

Web Platformu için FCM Entegrasyonu

Web platformunda FCM’yi projenize entegre etmek ve kullanıcıya özel token oluşturmak için bazı JavaScript kodları yazmanız gerekecek.

Şimdi geliştirici arkadaşlar için en çok gereken konuya geldik token oluşturduğumuz kodlar^^

İlk olarak bildirim izni almak için biry apı kurmamız lazım ben css kütüphanesi olarak son zamanlarda tailwindcss kullanmaya başladım tasarımı siz değiştirebilirsiniz. Ben Bu altta ki kodları başka MVC projelerimdede rahat şekilde kullanabilmek için ComponenetPartial yapısı olarak tuttum bu şekilde farklı projelere entegre ederken bir probem yaşamıyorum.




 Çerezlere ve Bildirimlere izin verirseniz, size daha iyi bir deneyim sunabiliriz.
Інформація буде тимчасово збережена в cookies.  

Дозволити    Ні
'Content-Type': 'application/json', // Тип контенту JSON  
 },  
 body: JSON.stringify({ payload: token }), // Токен відправляється  
 });  

 if (response.ok) {  
 console.log("Токен відправлено")  
 const result = await response.json();  
 } else {  
 const error = await response.text();  
 console.error("Сталася помилка при відправці токену:", error);  
 }  
 } catch (error) {  
 console.error("Помилка підключення до сервера:", error);  
 }  
 }  

 // Функція для натискання кнопки "Дозволити"  
 document.getElementById("allowNotificationsAndCookiesButton").addEventListener("click", saveConsent);  

 // Функція для натискання кнопки "Ні"  
 document.getElementById("denyPermissionsButton").addEventListener("click", denyConsent);  


Деякі змінні, що використовуються в цьому коді, ви можете отримати з Firebase Console, у розділі "Project Settings" вашого проєкту.
  • firebaseConfig:
    У вкладці Project Settings > General на самому дні сторінки ви можете знайти цю конфігурацію.
  • vapidKey:
    У вкладці Project Settings > Cloud Messaging у розділі Web Push Certificates натискайте кнопку Generate Key Pair, щоб створити новий ключ.
    Bu işlem sonucunda, Key Pair altında gösterilen token, projenizde kullanmanız gereken vapidKey değeridir.

Kodlara Genel Bakış

Kodlarda ilk olarak, kullanıcıdan bildirim izni istemekle başlıyoruz. Daha sonra, bu bildirimin belli bir süre gösterilmemesi için kullanıcının verdiği yanıtı çerezlerde (cookie) saklıyoruz.

Eğer bildirim izni verilmiş ve talep onaylanmışsa, Firebase kütüphanelerini kullanarak bir token oluşturuyoruz. Bu token, kullanıcıya özel olup, cihaz ve tarayıcı bazlı tanımlama sağlar.

Ben bu tokeni daha sonra kendi Controller’larıma POST etmem gerektiğini düşündüm. Oradanda bu tokeni bir başka API’ye gönderip bir veritabanına kaydetme yolunu tercih ettim. Bu yöntemle, her kullanıcıya özel tokenleri güvenli bir şekilde oluşturup saklayabildim. Testler yaparken Console.log kullanarak kodlarınızda ki hataları izlemeyi unutmayın. Ben Testler yaparken tokenleri console tarafına yazdırıp bu tokenler ile testler yapıyordum.

Ekstra Gereksinim: firebase-messaging-sw.js Dosyası

Token oluşturduğumuz bu MVC projesine, bir JavaScript dosyası daha eklememiz gerekiyor. Bu dosyanın adı firebase-messaging-sw.js ve bu dosyayı projenizdeki wwwroot klasörüne doğrudan yükleyebilirsiniz. Bu dosya olmadan kullanıcıya bildirim gönderemezsiniz, bu yüzden eklediğinizden emin olun.

self.addEventListener('push', (event) => {  
 // Push mesajını al (event.data.json() ile data kısmı alınır)  
 const data = event.data ? event.data.json() : {};  

 const title = data.notification ? data.notification.title : 'Default Title'; // title veri olarak alınır  
 const body = data.notification ? data.notification.body : 'Default Body'; // body veri olarak alınır  
 const imageUrl = data.notification ? data.notification.image : ''; // Görsel ekleme  
 const url = data.data.url || 'https://digiinternet.com.tr/'; // Bildirime tıklandığında açılacak URL  
 // Bildirim seçeneklerini oluştur  
 const options = {  
 body: body,  
 icon: '/path/to/icon.png', // Bildirimin ikonu  
 badge: '/path/to/badge.png', // Bildirim rozet ikonu  
 image: imageUrl, // Bildirime görsel ekleyin  
 data: { url: url } // URL'yi data içinde tutuyoruz  
 };  

 // Bildirimi göster  
 event.waitUntil(  
 self.registration.showNotification(title, options)  
 );  
});  

// Bildirime tıklanma olayını dinleyin  
self.addEventListener('notificationclick', function (event) {  
 event.preventDefault(); // Bildirime tıklanmayı engelleme (uygulama açılmasın)  
 const url = event.notification.data.url || 'https://eveinternet.com.tr/'; // Bildirimdeki URL'yi al  
 clients.openWindow(url); // Yeni pencere aç  
 event.notification.close(); // Bildirimi kapat  
});

Kodların İşleyişi

Bu dosyada temel olarak bir istek karşılanıyor ve buna göre bildirim gönderiliyor. Kodları incelerseniz, işleyişi kolayca anlayabilirsiniz. Ben, bildirim içeriğinde aşağıdaki parametreleri kullandım:

  • title: Bildirimin başlığı.
  • body: Bildirimin ana metni.
  • imageUrl: Bildirimde gösterilecek görselin URL’si.
  • url: Kullanıcı bildirime tıkladığında yönlendirileceği linkin URL’si.

Bu şekilde, kullanıcıya özel ve anlamlı bildirimler göndermek mümkün oluyor.

Bildirim Gönderme Uygulaması

Burada bir API üzerinden bildirim gönderme işlemini nasıl yapacağımızı açıklayacağım.

Firebase Ayarları

İlk olarak, Firebase Console’a giriş yaparak Project Settings > Service Accounts sekmesine gidin. Bu bölümde, Firebase Admin SDK için gerekli JSON dosyasını oluşturup indirmelisiniz. İndirdiğiniz bu dosyayı, projenizin ana dizinine eklemeyi unutmayın.

Gerekli Kütüphaneyi Kurma

JSON dosyasını ekledikten sonra, Package Manager Console üzerinden gerekli kütüphaneyi projenize eklemelisiniz. Bunun için aşağıdaki komutu kullanabilirsiniz:

Install-Package FirebaseAdmin

Ben bu örnekte Firebase.Admin kütüphanesinin 2.4 sürümünü kullandım.
Eğer farklı bir sürüm kullanırsanız, küçük farklılıklarla karşılaşabilirsiniz, bu yüzden sürüm notlarını kontrol etmeniz faydalı olacaktır.
daha sonra program.cs’e yani Middlewar’e bu kodları ekleyip Firebase Bağlantısını sağlamanız gerekiyor;

FirebaseApp.Create(new AppOptions()  
 {  
 Credential = GoogleCredential.FromFile(Path.Combine(Directory.GetCurrentDirectory(), "test-dosyanintamismi.json"))  

 });

Şimdi basitçe ilgili Aksiyonumuzu yazıp Mesajımızı gönderebiliriz,

public class FirebaseToken  
 {  
 public int FirebaseTokenId { get; set; }  
 public string Token { get; set; }  
 }  

 public class MessageRequest  
 {  
 public string Title { get; set; }  
 public string Body { get; set; }  
 public string ImageUrl { get; set; }  
 public string Url { get; set; }   
 }

Bu kod, Firebase Cloud Messaging (FCM) kullanarak toplu bildirim göndermek için yazılmış bir API metodudur. İlk olarak, veritabanından kayıtlı tüm cihaz tokenleri alınır. Eğer gönderilecek bir token bulunamazsa, işlem sonlandırılır. Daha sonra, Firebase Messaging nesnesi kullanılarak her token için bir mesaj oluşturulur. Mesajda bildirim başlığı, içeriği, görsel URL’si ve tıklama sonrası yönlendirme URL’si gibi bilgiler tanımlanır. Mesajlar, her bir tokena ayrı ayrı gönderilir. Eğer bir mesaj gönderimi sırasında hata oluşursa, bu tokenin geçersiz olduğu varsayılır ve token veritabanından silinmeye çalışılır. Başarılı mesaj gönderimlerinin sayısı hesaplanarak işlem sonunda kullanıcıya bir sonuç mesajı döndürülür. Kod, hem başarılı mesaj gönderimini hem de geçersiz token yönetimini ele alan etkili bir bildirim gönderme altyapısı sağlar.

Umarım bu makale meraklısına ver yapıyı kullanması gereken arkadaşlara ardımcı olur ve anlatabilmişimdir.

pic

Örnek bildirim PC

pic

Örnek Bildirim Mobil

Ahmet Tahsin Çam

Перекладено з: .NET Core ile Firebase Cloud Message(FCM) ile Bildirim Göndermek

Leave a Reply

Your email address will not be published. Required fields are marked *