재우니의 블로그

 

https://weblogs.asp.net/sreejukg/sending-push-notifications-from-asp-net-core-using-google-firebase

 

Sending Push Notifications from ASP.Net Core using Google Firebase

Sending Push Notifications from ASP.Net Core using Google Firebase Google Firebase is a platform that helps developers to build mobile and web application. Firebase offers several options for developers to build the apps such as authentication, real time n

weblogs.asp.net

Google Firebase는 개발자가 모바일 및 웹 애플리케이션을 구축 할 수 있도록 도와주는 플랫폼입니다. Firebase는 개발자가 인증, 실시간 알림, 메시징 및 푸시 알림 등과 같은 앱을 빌드 할 수있는 몇 가지 옵션을 제공합니다. 개발자는 Google Firebase를 사용하여 Android 및 iOS와 웹 애플리케이션을 모두 개발할 수 있습니다.

최근 고객이 웹 사이트에서 모바일 응용 프로그램으로 메시지를 보내려는 프로젝트에 참여했습니다. 예를 들어, 웹 사이트에 페이지가 게시되거나 새로운 제품이 추가되거나 제품의 가격이 변경되면 고객은 이러한 이벤트에서 모바일 응용 프로그램에 푸시 알림을 보내려고했습니다.

프로젝트에 애플리케이션으로 메시지를 전송하는 플랫폼으로 Google Firebase가 선택되었습니다. 이 기사에서는 Google Firebase를 ASP.Net Core 애플리케이션과 통합하는 방법을 보여 드리겠습니다. 모바일 애플리케이션에서 Firebase 통합 또는 푸시 메시지 처리는이 애플리케이션의 범위에 포함되지 않습니다.

아시다시피 Firebase 서비스는 Firebase 콘솔을 통해 액세스 할 수 있습니다.

https://console.firebase.google.com/u/0/

Firebase에서 프로젝트를 생성하고 모바일 애플리케이션에서 사용할 수 있습니다. 모바일 애플리케이션은 Google Firebase를 사용하여 메시징 부분을 처리하도록 개발되었습니다. Firebase는 주제를 구독 한 모든 기기에서 알림을 받거나 특정 기기 토큰으로 주제를 전달하는 메시지를 지원합니다.

주제에 대한 자세한 정보는 다음 URL을 참조하십시오.

https://firebase.google.com/docs/cloud-messaging/ios/topic-messaging

https://firebase.google.com/docs/cloud-messaging/android/topic-messaging

iOS 및 Android 모바일 애플리케이션은 모두“웹 사이트 업데이트”라는 주제를 구독하도록 개발되었습니다. 푸시 메시지 처리는 응용 프로그램 내에서 개발되었습니다. 이 기사에서는 ASP.Net Core 백엔드를 사용하여 모바일 애플리케이션에 푸시 알림을 보내는 방법에 중점을 두었습니다.

데모

모바일 응용 프로그램에 알림을 푸시하기 위해 면도기 페이지를 사용하여 ASP.Net Core (2.2) 응용 프로그램을 만들었습니다. 나는 이것을 위해 Visual Studio 2019를 사용했습니다. 기사는 아래와 같이 세 부분으로 나뉩니다.

  1. ASP.Net 핵심 프로젝트 작성
  2. Firebase 콘솔에서 개인 키 파일 가져 오기
  3. 푸시 알림 보내기

ASP.Net 핵심 응용 프로그램 만들기

Visual Studio에서 파일-> 새로 작성-> 프로젝트를 선택하십시오.

새 프로젝트 생성 마법사가 나타납니다. ASP.Net Core Web Application을 선택하고 다음을 클릭하십시오.

이제 프로젝트 이름, 프로젝트 위치 및 솔루션 이름을 입력하고 생성 버튼을 클릭하십시오.

이제 프로젝트 유형 인 ASP.Net Core 버전을 선택할 수 있습니다. 아래 다이어그램에 따라 값을 선택하고 작성을 클릭하십시오.

세부 사항이 지정된 프로젝트가 작성됩니다.

서버에서 Firebase 서비스에 액세스하는 권장 방법은 Firebase Admin SDK를 사용하는 것입니다. 관리자 SDK는 .Net에서 사용할 수 있으며 github에서 찾을 수 있습니다.

https://github.com/firebase/firebase-admin-dotnet

Firebase Admin SDK의 설명서를 설정하는 방법은 아래 링크에서 찾을 수 있습니다.

https://firebase.google.com/docs/admin/setup/

이제 Firebase를 통합하고 푸시 알림을 보낼 준비가되었습니다. 가장 먼저해야 할 일은 FirebaseAdmin Nuget 패키지를 설치하는 것입니다

솔루션의 패키지 관리자에서 FirebaseAdmin을 검색하고 Google의 Firebase Admin Nuget 패키지를 설치하십시오.

패키지 관리자 콘솔로 패키지를 설치하려는 경우에도 그렇게 할 수 있습니다.

Firebase 개인 키 파일 가져 오기

코드에서 Firebase 서비스를 사용하려면 Firebase로 애플리케이션을 인증해야합니다. 권장되는 방법은 Firebase 콘솔에서 개인 키를 생성하고 애플리케이션에서 키를 사용하는 것입니다. Firebase 콘솔에 로그인하고 생성 한 프로젝트로 이동 한 다음 프로젝트 설정을 선택하십시오.

프로젝트 설정의 서비스 계정 탭으로 이동하여 새 개인 키 생성을 클릭하십시오.

개인 키는 기밀로 유지해야합니다.

키가 생성되면 .json 파일로 다운로드됩니다.

파일 이름은 중요하지 않습니다. 방금 파일 이름을 Auth.json으로 바꾸고 Asp.Net Core 응용 프로그램의 루트에 업로드했습니다.

푸시 알림 보내기

이 데모의 목적을 위해 .Net Core 응용 프로그램의 get 처리기에서 푸시 알림을 보내려고합니다.

다음 네임 스페이스를 애플리케이션으로 가져와야합니다.

using FirebaseAdmin;
using FirebaseAdmin.Messaging;
using Google.Apis.Auth.OAuth2;

IndexModel 클래스에서 하나는 HostingEnvironment를 저장하고 다른 하나는 전송 작업의 결과를 저장하는 두 가지 변수를 선언합니다.

private IHostingEnvironment env;
public string result;

생성자에서 종속성 주입 (DI)을 사용하여 HostingEnvironment를 가져옵니다.

public IndexModel(IHostingEnvironment env)
{
     this.env = env;
}

IHostingEnvironment를 얻는 목적은 응용 프로그램 루트에있는 파일의 경로를 얻는 것입니다. 또 다른 방법은이 경로를 appsettings 변수에 저장하고 거기서 검색하는 것입니다. 이 경우 IHostingEnvironment 변수가 필요하지 않습니다.

이제 Get Method 코드를보십시오

public async Task OnGetAsync()
         {
             var path = env.ContentRootPath;
             path = path + "\\Auth.json";
             FirebaseApp app = null;
             try
             {
                 app = FirebaseApp.Create(new AppOptions()
                 {
                     Credential = GoogleCredential.FromFile(path)
                 }, "myApp");
             }
             catch (Exception ex)
             {
                 app = FirebaseApp.GetInstance("myApp");
             }
 
             var fcm = FirebaseAdmin.Messaging.FirebaseMessaging.GetMessaging(app);
             Message message = new Message()
             {
                 Notification = new Notification
                 {
                     Title = "My push notification title",
                     Body = "Content for this push notification"
                 },
                 Data = new Dictionary<string, string>()
                 {
                     { "AdditionalData1", "data 1" },
                     { "AdditionalData2", "data 2" },
                     { "AdditionalData3", "data 3" },
                 },
 
                     Topic = "WebsiteUpdates"
             };
            
             this.result = await fcm.SendAsync(message);
         }
  • Firebase가 비동기 메소드를 사용하여 메시지를 전송하므로 메소드는 비동기식이어야합니다.
  • path 변수에는 Firebase에서 다운로드 한 Auth.json 파일의 경로가 포함됩니다.
  • 앱이 이미 생성 된 경우 Firebase 앱을 만들려고하면 오류가 발생합니다. 따라서 응용 프로그램이 이미 응용 프로그램을 만든 경우 해당 응용 프로그램의 인스턴스를 가져옵니다.
  • 앱이 생성되면 앱의 메시징 인스턴스를 가져옵니다.
  • 알림 및 데이터 페이로드를 지정하여 메시지 오브젝트를 작성하십시오.
  • 데이터 페이로드에는 알림에 전달하려는 모든 사용자 정의 데이터가 포함될 수 있습니다.
  • 메시지의 주제를 지정하십시오. 푸시 알림을 받으려면 애플리케이션을 구독해야합니다.
  • 메시지 객체가 빌드되면 SendAsync 메서드를 사용하여 보냅니다.
  • 특정 앱 인스턴스에 메시지 보내기

메시지를 특정 앱 인스턴스로 보내려면 Topic을 Token 매개 변수로 바꾸면됩니다. 토큰은 Firebase 앱 토큰을 포함 할 수 있습니다.

예 :

var token = "eH1Syxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxx";
             Message message = new Message()
             {
                 Notification = new Notification
                 {
                     Title = "My push notification title",
                     Body = "Content for this push notification"
                 },
                 Data = new Dictionary<string, string>()
                 {
                     { "AdditionalData1", "data 1" },
                     { "AdditionalData2", "data 2" },
                     { "AdditionalData3", "data 3" },
                 },
                 Token = token
             };
         this.result = await fcm.SendAsync(message);

이제 Index.cshtml 파일에서 메시지를 표시하고 있습니다.

@page
@model IndexModel
@{
     ViewData["Title"] = "Home page";
}
 
<div class="text-center">
     @Model.result
</div>

Visual Studio에서 응용 프로그램을 실행하면 다음이 응용 프로그램의 출력입니다.

메시지에는 SendAsync 메소드가 리턴 한 메시지 ID가 포함됩니다. 이제 모바일 애플리케이션은 알림 및 데이터 페이로드가 포함 된 메시지를 수신합니다.

요약

ASP.Net을 사용하면 모바일 애플리케이션과 쉽게 통신 할 수있는 백엔드 애플리케이션을 구축 할 수 있습니다. Google Firebase는 .Net 애플리케이션과 쉽게 통합 할 수있는 크로스 플랫폼 메시지 솔루션을 제공합니다.