앱 알림은 앱이 현재 앱 내에 있지 않은 동안 구성하고 사용자에게 전달할 수 있는 메시지입니다.
이 빠른 시작에서는 풍부한 콘텐츠와 대화형 작업을 사용하여 Windows 10 또는 Windows 11 앱 알림을 만들고, 전달하고, 표시하는 단계를 안내합니다. 이 빠른 시작에서는 구현하는 가장 간단한 알림인 로컬 알림을 사용합니다. 모든 유형의 앱(WPF, UWP, WinForms, 콘솔)에서 알림을 보낼 수 있습니다.
Note
"토스트 알림"이라는 용어가 "앱 알림"으로 대체됩니다. 이러한 용어는 모두 Windows의 동일한 기능을 참조하지만 시간이 지남에 따라 설명서에서 "알림 메시지"의 사용을 단계적으로 중단합니다.
1단계: NuGet 패키지 설치
Visual Studio 솔루션 내에서 프로젝트를 마우스 오른쪽 버튼으로 클릭하고, "NuGet 패키지 관리..."을 클릭합니다. 그런 다음 Microsoft.Toolkit.Uwp.NotificationsNuGet 패키지를 검색하여 버전 7.0 이상을 설치하십시오.
Important
아직 packages.config를 사용하는 .NET Framework 데스크톱 앱은 PackageReference로 마이그레이션해야 합니다. 그렇지 않으면 Windows SDK가 제대로 참조되지 않습니다. 프로젝트에서 "참조"를 마우스 오른쪽 버튼으로 클릭하고 "packages.config를 PackageReference로 마이그레이션"을 클릭합니다.
.NET Core 3.0 WPF 앱을 .NET Core 3.1로 업데이트해야 합니다. 그렇지 않으면 API가 존재하지 않습니다.
.NET 앱은 Windows TFM 중 하나를 사용해야 합니다. 그렇지 않으면 앱 알림 보내기 및 관리 API가 Show() 누락됩니다. TFM을 net6.0-windows10.0.17763.0 이상으로 설정합니다.
코드 샘플에서는 이 패키지를 사용합니다. 이 패키지를 사용하면 XML을 사용하지 않고 앱 알림을 만들 수 있으며 데스크톱 앱에서 앱 알림을 보낼 수도 있습니다.
2단계: 앱 알림 보내기
Windows 10 및 Windows 11에서 앱 알림 콘텐츠는 알림의 모양에 뛰어난 유연성을 허용하는 적응 언어를 사용하여 설명됩니다. 자세한 내용은 앱 알림 콘텐츠 설명서를 참조하세요.
간단한 텍스트 기반 알림으로 시작하겠습니다. 알림 라이브러리를 사용하여 알림 콘텐츠를 생성하고 알림을 표시합니다. 네임스페이스가 Microsoft.Toolkit.Uwp.Notifications임을 참고하십시오.
// Requires Microsoft.Toolkit.Uwp.Notifications NuGet package version 7.0 or greater
new ToastContentBuilder()
.AddArgument("action", "viewConversation")
.AddArgument("conversationId", 9813)
.AddText("Andrew sent you a picture")
.AddText("Check this out, The Enchantments in Washington!")
.Show(); // Not seeing the Show() method? Make sure you have version 7.0, and if you're using .NET 6 (or later), then your TFM must be net6.0-windows10.0.17763.0 or greater
이 코드를 실행하면 알림이 표시되어야 합니다.
3단계: 활성화 처리
알림을 표시한 후에는 사용자의 알림 클릭을 처리해야 할 수 있습니다(사용자가 클릭한 후 특정 콘텐츠 가져오기, 일반적인 앱 열기, 사용자가 알림 클릭 시 작업 수행 여부).
활성화를 처리하는 단계는 UWP와 패키지된 데스크톱 앱과 패키지되지 않은 데스크톱 앱에 따라 다릅니다.
먼저 Package.appxmanifest파일 안에 다음을 추가하세요.
- xmlns:com에 대한 선언
- xmlns:desktop 선언
- IgnorableNamespaces 속성에서 com과 데스크톱.
- 데스크톱:확장을 위해 windows.toastNotificationActivation에서 알림 활성화자 CLSID를 선언하세요 (선택한 새로운 GUID 사용).
- MSIX만 해당: 4단계의 GUID를 사용하여 COM 활성화자용 com:Extension. 알림에서 시작되었음을 확실히 알 수 있도록
Arguments="-ToastActivated"을 반드시 포함하십시오.
Package.appxmanifest
<!--Add these namespaces-->
<Package
...
xmlns:com="http://schemas.microsoft.com/appx/manifest/com/windows10"
xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10"
IgnorableNamespaces="... com desktop">
...
<Applications>
<Application>
...
<Extensions>
<!--Specify which CLSID to activate when toast clicked-->
<desktop:Extension Category="windows.toastNotificationActivation">
<desktop:ToastNotificationActivation ToastActivatorCLSID="replaced-with-your-guid-C173E6ADF0C3" />
</desktop:Extension>
<!--Register COM CLSID LocalServer32 registry key-->
<com:Extension Category="windows.comServer">
<com:ComServer>
<com:ExeServer Executable="YourProject\YourProject.exe" Arguments="-ToastActivated" DisplayName="Toast activator">
<com:Class Id="replaced-with-your-guid-C173E6ADF0C3" DisplayName="Toast activator"/>
</com:ExeServer>
</com:ComServer>
</com:Extension>
</Extensions>
</Application>
</Applications>
</Package>
그런 다음 앱의 시작 코드(WPF용 OnStartup App.xaml.cs)에서
// Listen to notification activation
ToastNotificationManagerCompat.OnActivated += toastArgs =>
{
// Obtain the arguments from the notification
ToastArguments args = ToastArguments.Parse(toastArgs.Argument);
// Obtain any user input (text boxes, menu selections) from the notification
ValueSet userInput = toastArgs.UserInput;
// Need to dispatch to UI thread if performing UI operations
Application.Current.Dispatcher.Invoke(delegate
{
// TODO: Show the corresponding content
MessageBox.Show("Toast activated. Args: " + toastArgs.Argument);
});
};
사용자가 알림(또는 알림의 단추)을 클릭하면 다음이 발생합니다.
앱이 현재 실행 중인 경우...
- ToastNotificationManagerCompat.OnActivated 이벤트는 백그라운드 스레드에서 호출됩니다.
앱이 현재 닫혀 있는 경우...
- 앱의 EXE가 실행되고
ToastNotificationManagerCompat.WasCurrentProcessToastActivated()가 true 값을 반환하여 프로세스가 최신 활성화를 통해 시작되었음을 나타내며, 이벤트 처리기가 곧 호출될 것입니다. - 그런 다음, ToastNotificationManagerCompat.OnActivated 이벤트가 백그라운드 스레드에서 호출됩니다.
4단계: 제거 처리
당신은 아무것도 할 필요가 없습니다! MSIX 앱이 제거되면 모든 알림 및 기타 관련 리소스가 자동으로 정리됩니다.
이미지 추가
알림에 다양한 콘텐츠를 추가할 수 있습니다. 인라인 이미지와 애플리케이션 로고를 덮어쓸 프로필 이미지를 추가합니다.
Note
이미지는 앱의 패키지, 앱의 로컬 스토리지 또는 웹에서 사용할 수 있습니다. Fall Creators Update를 기준으로 웹 이미지는 일반 연결에서 최대 3MB, 요금제 연결의 경우 1MB가 될 수 있습니다. 아직 Fall Creators Update를 실행하지 않는 디바이스에서는 웹 이미지가 200KB 이하여야 합니다.
Important
Http 이미지는 매니페스트에 인터넷 기능이 있는 패키지된 앱에서만 지원됩니다. 패키지되지 않은 앱은 http 이미지를 지원하지 않습니다. 이미지를 로컬 앱 데이터에 다운로드하고 로컬로 참조해야 합니다.
사용한 토스트
// Construct the content and show the toast!
new ToastContentBuilder()
...
// Inline image
.AddInlineImage(new Uri("https://picsum.photos/360/202?image=883"))
// Profile (app logo override) image
.AddAppLogoOverride(new Uri("ms-appdata:///local/Andrew.jpg"), ToastGenericAppLogoCrop.Circle)
.Show();
단추 및 입력 추가
단추 및 입력을 추가하여 알림을 대화형으로 만들 수 있습니다. 단추는 포그라운드 앱, 프로토콜 또는 백그라운드 작업을 시작할 수 있습니다. 회신 텍스트 상자, "좋아요" 단추 및 이미지를 여는 "보기" 단추를 추가합니다.
int conversationId = 384928;
// Construct the content
new ToastContentBuilder()
.AddArgument("conversationId", conversationId)
...
// Text box for replying
.AddInputTextBox("tbReply", placeHolderContent: "Type a response")
// Buttons
.AddButton(new ToastButton()
.SetContent("Reply")
.AddArgument("action", "reply")
.SetBackgroundActivation())
.AddButton(new ToastButton()
.SetContent("Like")
.AddArgument("action", "like")
.SetBackgroundActivation())
.AddButton(new ToastButton()
.SetContent("View")
.AddArgument("action", "viewImage")
.AddArgument("imageUrl", image.ToString()))
.Show();
포그라운드 단추의 활성화는 주 알림 본문과 동일한 방식으로 처리됩니다(App.xaml.cs OnActivated가 호출됨).
위에 표시된 대로 단추가 AddArgument API를 사용하는 한 최상위 앱 알림(예: 대화 ID)에 추가된 인수도 단추를 클릭할 때 반환됩니다(단추에서 인수를 사용자 지정하는 경우 최상위 인수는 포함되지 않음).
백그라운드 활성화 처리
데스크톱 애플리케이션의 경우, 백그라운드 활성화는 전경 활성화와 동일하게 처리되며, 이때 OnActivated 이벤트 처리기가 트리거됩니다. 활성화를 처리한 후 UI를 표시하지 않고 앱을 닫도록 선택할 수 있습니다.
만료 시간 설정
Windows 10에서 모든 앱 알림은 사용자가 해제하거나 무시한 후 알림 센터로 이동하므로 팝업이 종료된 후 사용자가 알림을 볼 수 있습니다.
그러나 알림의 메시지가 일정 기간 동안만 관련된 경우 사용자가 앱에서 오래된 정보를 볼 수 없도록 앱 알림에 만료 시간을 설정해야 합니다. 예를 들어 승격이 12시간 동안만 유효한 경우 만료 시간을 12시간으로 설정합니다. 아래 코드에서는 만료 시간을 2일로 설정합니다.
Note
로컬 앱 알림의 기본 및 최대 만료 시간은 3일입니다.
// Create toast content and show the toast!
new ToastContentBuilder()
.AddText("Expires in 2 days...")
.Show(toast =>
{
toast.ExpirationTime = DateTime.Now.AddDays(2);
});
알림에 대한 기본 키 제공
보내는 알림을 프로그래밍 방식으로 제거하거나 바꾸려면 Tag 속성(및 선택적으로 그룹 속성)을 사용하여 알림의 기본 키를 제공해야 합니다. 그런 다음 나중에 이 기본 키를 사용하여 알림을 제거하거나 바꿀 수 있습니다.
이미 배달된 앱 알림을 대체/제거하는 방법에 대한 자세한 내용은 빠른 시작: 알림 센터(XAML)에서 알림 메시지 관리를 참조하세요.
태그 및 그룹 결합은 복합 기본 키 역할을 합니다. 그룹은 "wallPosts", "messages", "friendRequests" 등과 같은 그룹을 할당할 수 있는 보다 일반적인 식별자입니다. 그런 다음 태그는 그룹 내에서 알림 자체를 고유하게 식별해야 합니다. 그런 다음 제네릭 그룹을 사용하여 RemoveGroup API를 사용하여 해당 그룹에서 모든 알림을 제거할 수 있습니다.
// Create toast content and show the toast!
new ToastContentBuilder()
.AddText("New post on your wall!")
.Show(toast =>
{
toast.Tag = "18365";
toast.Group = "wallPosts";
});
알림 지우기
앱은 자체 알림을 제거하고 지울 책임이 있습니다. 앱이 시작되면 알림이 자동으로 지워지지 않습니다.
Windows는 사용자가 알림을 명시적으로 클릭하는 경우에만 알림을 자동으로 제거합니다.
메시징 앱이 수행해야 하는 작업의 예는 다음과 같습니다.
- 사용자는 대화에서 새 메시지에 대한 여러 앱 알림을 받습니다.
- 사용자가 해당 알림 중 하나를 탭하여 대화를 엽니다.
- 앱은 대화를 연 다음 해당 대화에 대한 앱 제공 그룹에서 RemoveGroup 을 사용하여 해당 대화에 대한 모든 알림을 지웁니다.
- 이제 알림 센터에 남아 있는 대화에 대한 부실 알림이 없으므로 사용자의 알림 센터는 알림 상태를 올바르게 반영합니다.
모든 알림을 지우거나 특정 알림을 제거하는 방법에 대한 자세한 내용은 빠른 시작: XAML의 액션 센터에서 토스트 알림 관리를 참조하세요.
ToastNotificationManagerCompat.History.Clear();
Resources
Windows developer