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:
- Kullanıcı Bildirimlere İzin Verir:
Kullanıcı siteye girdikten sonra tarayıcısından bildirimlere izin vermesi istenir. - 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. - 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 gerekenvapidKey
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.
Örnek bildirim PC
Örnek Bildirim Mobil
Ahmet Tahsin Çam
Перекладено з: .NET Core ile Firebase Cloud Message(FCM) ile Bildirim Göndermek