티스토리 뷰
윈도우 폰에는 Push Notification이란 서비스가 존재 한다. 혹시, 이 부분에 대해서 잘 모른다면, 여러 자료들을 찾아서 보면 쉽게 이해할 수 있을 것이다. 그런데, 대부분의 예제나 사용하는 것들을 보면 윈도우 폰에서 서버로 채널 Uri를 보내고, 서버에서 MPNS 서버로 Push Notification을 신청을 하는 구조로만 설명이 되어 있다. 왜 윈도우 폰에서 다른 윈도우 폰에게 바로 보낼 수 없을까? 라는 의문을 가지고 시작한 작업이고, 결과는 성공이다.
일단, 이 예제는 자기 자신한테 Push Notification을 보내는 예제이다. 하지만, 다른 윈도우 폰의 channel uri만 알고 있으면 다른 윈도우 폰으로 직접 메세지를 보낼 수 있다.
1. MainPage.xaml
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<StackPanel>
<TextBlock Text="Input other Uri"/>
<TextBox x:Name="uri" />
<TextBlock Text="Send Message"/>
<TextBox x:Name="tbMessage"/>
<Button Content="Send Message" Click="Button_Click" />
<TextBlock Text="Response"/>
<TextBlock x:Name="tbResponse"/>
<TextBlock Text="Receive Message"/>
<TextBlock Name="Receive"/>
</StackPanel>
</Grid>
2. MainPage.xaml.cs
채널 만드는 부분은 직접 소스를 보기 바란다. 여기서는 Push Notification 작업을 윈도우 폰에서 하는 부분만을 적어 보겠다.
//Self Raw Notification Send
private void SendRawNotification()
{
uri.Text = channelUri;
Uri sendUri = new Uri(uri.Text, UriKind.Absolute);
//Request 생성
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(sendUri);
//POST로 지정
request.Method = "POST";
//뒤에 utf-8을 넣어 주어야 한글도 깨지지 않고 넘어감
request.ContentType = "text/xml;charset=utf-8";
//Raw Notification
request.Headers["X-NotificationClass"] = "3";
request.BeginGetRequestStream(new AsyncCallback(channelRequest), request);
}
//보내는 곳과 연결 하고
private void channelRequest(IAsyncResult asyncResult)
{
Dispatcher.BeginInvoke(() =>
{
HttpWebRequest request = (HttpWebRequest)asyncResult.AsyncState;
//몸통 만들고
Stream body = request.EndGetRequestStream(asyncResult);
//전송할 데이터 만들고
byte[] contents = Encoding.UTF8.GetBytes(tbMessage.Text);
//전송
body.Write(contents, 0, contents.Length);
body.Flush();
body.Close();
request.BeginGetResponse(new AsyncCallback(channelResponse), request);
});
}
private void channelResponse(IAsyncResult asyncResult)
{
string notificationStatus = "";
string notificationChannelStatus = "";
string deviceConnectionStatus = "";
var request = (HttpWebRequest)asyncResult.AsyncState;
var response = request.EndGetResponse(asyncResult);
//전송 결과 뽑아내고
notificationStatus = response.Headers["X-NotificationStatus"];
notificationChannelStatus = response.Headers["X-SubscriptionStatus"];
deviceConnectionStatus = response.Headers["X-DeviceConnectionStatus"];
//표시해준다
Dispatcher.BeginInvoke(() =>
{
tbResponse.Text = notificationStatus
+ " " + notificationChannelStatus
+ " " + deviceConnectionStatus;
});
}
3. 결과 화면
4. 이제 윈도우 폰끼리 서로 Push Notification 을 주고 받으면서 놀아보자. ㅎ
'Previous Platforms' 카테고리의 다른 글
NMessenger using WCF RIA Service SOAP endpoint (0) | 2012.02.10 |
---|---|
[Rx] Google Maps for Windows Phone 7.1 using Bing Map Control (2) | 2012.02.07 |
Deploy SQL CE 3.5 DB to Windows Phone 7.1 (1) | 2012.02.05 |
Windows Phone 7 Isolated Storage Explorer using (0) | 2012.02.05 |
Seoul Bus Info for Windows 8 Metro Style (2) | 2012.01.21 |
- Total
- Today
- Yesterday
- MVVM
- IOT
- Always Encrypted
- PRISM
- ComboBox
- .net 5.0
- C#
- Cross-platform
- #MVVM
- UWP
- Windows 10
- dotNETconf
- ef core
- kiosk
- .net
- visual studio 2019
- uno-platform
- #Windows Template Studio
- Behavior
- windows 11
- #prism
- LINQ
- Build 2016
- #uwp
- Microsoft
- uno platform
- WPF
- Visual Studio 2022
- XAML
- Bot Framework
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |