티스토리 뷰

 

Windows Azure – Mobile Services (2)

 

두 번째 글은 Mobile Services를 통해 Push Notification을 구성해보도록 하겠습니다. Push Notification Windows Phone 7 에서  서비스를 이용해서 Notification을 받아  Tile을 업데이트 하거나 했었는데요. Windows 8 App 에서도 Push Notification을 구성할 수 있는데 여러가지 작업을 해야 겠지만 Mobile Services 를 통해 손쉽게 처리할 수 있습니다.

 

Mobile Services를 통해 Push Notification 을 구성하기 위해서는 Metro 스타일 앱의 응용 프로그램 관리 사이트 로 이동해서 App의 패키지 표시 이름과 게시자를 구성하여야 합니다.

Mobile Services를 통해 생성한 프로젝트의 package.appxmanifest 를 클릭하여 패키지 이름과 게시자를 확인 합니다.

그리고 위 사이트로 이동하여 아래 그림처럼 Step 2 에서 값을 입력하고 동의함을 클릭합니다.

 

그러면 다음 페이지에서 Package name, Client secret Package Security Identifier (SID)를 확인 가능합니다.

Package name은 아래 그림처럼 Visual Studio 프로젝트에서 변경해주시면 됩니다.

 

Client secret Package Security Identifier (SID) Windows Azure Mobile Services 에서 사용하게 됩니다. Windows Azure Management Portal Mobile Services의 상세 페이지로 이동하여 아래 그림처럼 PUSH 메뉴를 클릭합니다. Client secret Package Security Identifier (SID) 를 입력합니다.  

Windows 8 App Push Notification 을 구성하도록 하겠습니다. 먼저 package.appxmanifst 파일에서 응용프로그램 UI 탭에서 알림가능을 예로 선택되었는지 확인합니다. 아니오라면 예로 선택합니다.

App.xaml.cs 로 이동하여 아래처럼 Channel 클래스를 추가하고 Push Notification 을 구성하겠습니다.

 

public class Channel

    {

        public int Id { get; set; }

        public string Uri { get; set; }

    }

 

Push Notification을 위해 아래와 같은 using 구문을 추가합니다.

using Windows.Networking.PushNotifications;

 

onLaunched 메서드는 async로 아래와 같이 변경합니다.

protected async override void OnLaunched(LaunchActivatedEventArgs args)

 

Push Notification 을 구성하기 위해 아래와 같은 코드를 onLaunched 메서드의 맨 아래에 추가합니다.

var ch = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();

 

await MobileService.GetTable<Channel>().InsertAsync(new Channel() { Uri = ch.Uri });

 

 

Todolist 테이블에 값이 추가될 때 마다  Push Notification 을 전송하기 위해 Channel 테이블을 Mobile Services에 생성하도록 하겠습니다. Windows Azure Management Portal Mobile Services의 상세 페이지에서 DATA 메뉴를 클릭하고 하단의 CREATE 메뉴를 클릭합니다. 테이블 이름은 Channel로 지정합니다. 

생성된 테이블은 아래와 같으며 컬럼이 id 만 생성되어 있는 것을 확인가능하며 코드와 Script를 통해 구 성할 것입니다.

 위 그림의 Script 메뉴를 클릭합니다. Script를 통해 추가적인 작업이 가능하며 여기서는 동일한  Uri 일 경우 Notification을 하지 않도록 스크립트를 아래와 같이 추가하고 Save 버튼을 클릭합니다. 

스크립트의 실제 내용은 아래와 같습니다.

function insert(item, user, request) {

    var channelTable = tables.getTable('Channel');

    channelTable.where({ uri: item.Uri })

        .read({ success: insertChannelIfNotFound});    

 

    function insertChannelIfNotFound(existingChannels) {

        if(existingChannels.length > 0) {

                                          request.respond(200, existingChannels[0]);

        } else {

                                          request.execute();

        }

    }

}

 

 

왼쪽의 TodoItem을 클릭하여 마찬가지로 Script를 통해 Insert 동작에서 Channel 테이블에 등록된 Uri ToastNotification을 전송하는 스크립트를 작성합니다. 

실제  스크립트는 아래와 같습니다.

function insert(item, user, request) {

    request.execute({

        success: function(){

                                          request.respond();

                                          sendNotifications(item);

        },

        error: function(err){

                                          request.respond(500, "Error");

        }

    });

}

 

function sendNotifications(item){              

    var channelTable = tables.getTable('Channel');

        channelTable.read({

            success: function(channels){

                channels.forEach(function(channel){

                    push.wns.sendToastText04(channel.Uri, {

                        text1: item.text,

                        text2: "text line 2",

                        text3:  "text line 3"

                    }, {

                        success: function(response){                                              

                            console.log(response);

                        },                                   

                        error: function(err){                                              

                            console.error(err);                      

                        }                   

                    });

                });

            }       

    });   

}

 

 

이제 Visual Studio 2012에서 로컬 컴퓨터로 실행하여 TodoItem에 값을 입력하면 ToastNotification이 발생되는 것을 확인할 수 있습니다.

 


Live Connect, App Channel 등록과 Azure의 스크립트를 통해 손쉽게 Push Notification을 구성할 수 있습니다. 

 

 

댓글