티스토리 뷰
윈도우 폰의 푸시 노티피케이션(Push Notifications)은 3가지가 존재하는데, 각각은 서로 장단점을 가지고 있으며, 필요에 따라서 다르게 사용해야 한다. 그 중 타일 노티피케이션(Tile Notifications)은 엡의 메인 타일에 글씨를 출력할 수 있는 것으로 MSDN의 자료들과 몇가지 테스트 해본 내용을 가지고 살펴 보도록 하자.
1. 일단 프로그램을 윈도 폰 에물레이터에 설치를 하고, 프로그램 목록에 가서 마우스로 쿡~찍고 있으면 pin to start라는 메뉴가 나타난다. 그 메뉴를 선택한다.
2. 그러면 시작화면에 프로그램의 Application Tile이 고정되어 있는 것을 확인 할 수 있다.
3. KakiSample 타일을 클릭해서 프로그램으로 들어 온 후에 하단에 + 버튼을 누른다. 그러면 Application Tile의 내용이 변경되어 있는 것을 확인할 수 있다. 이렇게 메인 타일의 내용을 변경 할 수 있으며, 응용하면 세컨드리 타일의 내용도 업데이트가 가능한다.
4. 어플리케이션타일이 변경된 모습
5. 첨부되어있는 ASP.Net 프로젝트를 실행 시킨다. 시작 페이지는 SendTile.aspx 이 화면은 윈도폰에게 타일 노티피케이션 메시지를 작성해서 전달할 페이지이다
6. 엡에서 사용되는 채널 주소를 복사해야한다. vs2010의 Output텝에 들어가서 스크롤 바를 위로 살짝 올리면 아래와 같이 주소를 찾을 수 있다. 그 주소를 복사한다.
7. 복사한 수로를 웹페이지의 Enter URI에 붙여 넣고 나머지 내용도 대충 넣구 맨아래 있는 Send Tile Notification 버튼을 클릭한다. 그러면 잠시 후에 Response에 잘 도착했는지에 대한 결과를 받을 수 있다.
8. 다시 에물레이터로 가서 전송 받은 내용을 확인해 보자
9. 더 자세한 사항은 아래 링크들을 참고 한다.
Push Notifications Overview for Windows Phone
http://msdn.microsoft.com/en-us/library/ff402558(v=VS.92).aspx
A Really Long Post About the Windows Phone 7 Push Notification System
http://www.thisisfanzoo.com/Blog/JeffF/archive/2010/08/02/a-really-long-post-about-the-windows-phone-7-push.aspx
10. MainPage.xaml.cs
using System;
using System.Linq;
using System.Windows;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using Microsoft.Phone.Notification;
using System.Collections.ObjectModel;
using System.Collections.Generic;
namespace WPSample1
{
public partial class MainPage : PhoneApplicationPage
{
//생성자
public MainPage()
{
//푸쉬 채널생성
HttpNotificationChannel pushChannel;
//푸쉬 채널이름 설정
string channelName = "TileSampleChannel";
InitializeComponent();
//채널이름 찾아보기
pushChannel = HttpNotificationChannel.Find(channelName);
if (pushChannel == null)
{
//생성된 채널이 없으면 생성
pushChannel = new HttpNotificationChannel(channelName);
//채널정보 업데이트시 이벤트 연결
pushChannel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(pushChannel_ChannelUriUpdated);
//채널 오류 발생 이벤트 연결
pushChannel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(pushChannel_ErrorOccurred);
//채널 열기
pushChannel.Open();
}
else
{
//채널 업데이트 이벤트 연결
pushChannel.ChannelUriUpdated +=new EventHandler<NotificationChannelUriEventArgs>(pushChannel_ChannelUriUpdated);
//채널 오류 발생 이벤트 연결
pushChannel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(pushChannel_ErrorOccurred);
//채널 Uri정보 조회
System.Diagnostics.Debug.WriteLine("[ChannelUri] " + pushChannel.ChannelUri.ToString());
}
this.Loaded += new RoutedEventHandler(MainPage_Loaded);
}
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
MessageBox.Show("MainPage_Loaded");
}
void pushChannel_ErrorOccurred(object sender, NotificationChannelErrorEventArgs e)
{
//발생된 에러 메시지 조회
Dispatcher.BeginInvoke(() =>
{
MessageBox.Show(String.Format("푸쉬 노티피케이션 {0} 에러 발생. {1} ({2}) {3}",
e.ErrorType, e.Message, e.ErrorCode, e.ErrorAdditionalData)
);
});
}
void pushChannel_ChannelUriUpdated(object sender, NotificationChannelUriEventArgs e)
{
Dispatcher.BeginInvoke(() =>
{
//sender를 푸시체널로 형변환하고
HttpNotificationChannel pushChannel = sender as HttpNotificationChannel;
//푸시체널을 어플리케이션타일과 바인딩
pushChannel.BindToShellTile();
//변경된 채널 Uri정보 디버그 창에 출력
System.Diagnostics.Debug.WriteLine("[ChannelUri] " + e.ChannelUri.ToString());
});
}
//하단 툴박스 클릭 이벤트 처리
private void ApplicationBarIconButton_Click(object sender, System.EventArgs e)
{
ApplicationBarIconButton btn = sender as ApplicationBarIconButton;
if (btn != null)
{
//ApplicationTile 가져오기
var shellTile = ShellTile.ActiveTiles.FirstOrDefault();
//SecondaryTile 가져오기
//var shellTile = ShellTile.ActiveTiles
// .FirstOrDefault(p => p.NavigationUri.ToString().Contains("MainPage.xaml"));
//버튼 텍스트를 가지구 어떤 버튼인지 확인
switch (btn.Text)
{
case "Pin":
//SecondaryTile 새로 만들때 사용했던 부분
if (shellTile == null)
{
var tileData = new StandardTileData
{
Title = "Sample1",
Count = 1,
BackgroundImage = new Uri("/icons/appbar.sleep.png", UriKind.Relative),
BackTitle = "Back Sample1",
BackContent = "Back Content",
BackBackgroundImage = new Uri("/icons/appbar.sleep.dark.png", UriKind.Relative)
};
ShellTile.Create(new Uri("/MainPage.xaml", UriKind.Relative), tileData);
MessageBox.Show("Pin 작업을 완료했습니다.");
}
else
{
//ApplicationTile 업데이트 데이터 생성
var tileUpdate = new StandardTileData
{
Title = "AppTile",
Count = 1,
BackgroundImage = new Uri("/icons/appbar.sleep.png", UriKind.Relative),
BackTitle = "Back AppTile",
BackContent = "Back Content",
BackBackgroundImage = new Uri("/icons/appbar.sleep.dark.png", UriKind.Relative)
};
shellTile.Update(tileUpdate);
MessageBox.Show("ApplicationTile의 내용을 업데이트 했습니다~");
}
break;
case "Unpin":
//지금은 ApplicationTile을 가지고 놀고 있기 때문에 삭제 못함
//Unpin버튼이라면 타일이 존재하는 경우에 타일 제거
//if (shellTile != null)
//{
// shellTile.Delete();
// MessageBox.Show("UnPin 작업을 완료했습니다.");
//}
break;
}
}
}
}
}
10. 이런저런 테스트를 해봤는데..Tile Notification은 메인 타일로 바로 업데이트가 되기 때문에 중간에 어떤 노티피케이션이 날라왔는지 확인을 할 수 없는 듯하다..아마도, 메인 타일에 뭔가가 떠있으면 그 타일을 누를거구 누르면 MainPage_Loaded이벤트가 발생하니 그 이벤트에서 먼가 처리하는 것을 넣어 주면 될것 같다. 하지만..그래도 뭔가 날라왔는데..뭐가 날라온것인지 모른다는 건 좀 찝찝하다..그래서 추가적으로 토스트 노티피케이션과 Raw 노티피케이션도 알아보도록 하겠다.
'Previous Platforms' 카테고리의 다른 글
BusInfo for Windows8 Metro UI (0) | 2012.01.19 |
---|---|
Seoul Bus Info Search App Dev 8 (0) | 2012.01.08 |
Tile create (0) | 2012.01.07 |
Basic sample (0) | 2012.01.07 |
Twitter Client Lecture(강좌 목록) by Silverlight 5 (0) | 2012.01.05 |
- Total
- Today
- Yesterday
- .net
- #MVVM
- UWP
- IOT
- visual studio 2019
- ComboBox
- kiosk
- Bot Framework
- Always Encrypted
- #uwp
- uno-platform
- Behavior
- #prism
- ef core
- Build 2016
- WPF
- PRISM
- XAML
- uno platform
- Microsoft
- .net 5.0
- dotNETconf
- Windows 10
- C#
- MVVM
- #Windows Template Studio
- Cross-platform
- Visual Studio 2022
- LINQ
- windows 11
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |