Windows Phone의 콜백 등록 요청을 설정하는 방법

2013-03-11

적용 대상: Windows Phone 8 | Windows Phone OS 7.1

클라우드 서비스가 인증된 경우 콜백 URI 및 메시지와 구독을 연결하는 콜백 등록 요청을 설정할 수 있습니다. 콜백이 등록된 후 단말기가 비활성 상태로 바뀌면 Microsoft 푸시 알림 서비스는 콜백 URI로 메시지를 보냅니다. 단말기가 활성 상태로 돌아오면 클라우드 서비스는 콜백을 다시 등록해야 합니다.

각 구독에 대해 하나의 콜백만 등록될 수 있습니다. 클라우드 서비스가 콜백 등록을 여러 번 시도할 경우에는 마지막 콜백의 데이터만 유지됩니다.

페이로드는 구독과 연결된 등록 이벤트가 트리거되면 클라우드 서비스로 푸시될 콘텐츠를 포함해야 합니다. 현재 콜백 알림을 트리거하는 유일한 이벤트는 단말기가 비활성 상태로 바뀔 때입니다. Microsoft 푸시 알림 서비스는 이 페이로드 정보를 구독과 함께 저장합니다. 페이로드는 최대 1KB의 텍스트 또는 이진 데이터로 구성될 수 있습니다.

다음 코드 샘플에서는 콜백 등록 요청을 보내는 방법을 설명합니다.


// The notification channel URI that the Push Notification Service returns to the app. 
// The following value is an example URI for an authenticated cloud service.
string notificationUri = "https://notify.mpnf1.live-int.com/unthrottledthirdparty/01.00/AAEecz4fHY3eRoEfxiI6WayjAgAAAAADAQAAAAQUZm52Ojk0MzAwOUIxRUExQkQ2ODY";

// The cloud service must append "/callback" to the notification channel URI.  
string mpnCallbackServiceUri = notificationUri + "/callback";

// The URI to post the set callback request to.
string callbackUri = "http://www.contoso.com";

// Sets the callback message payload to send to the Push Notification Service. It is an opaque blob that the Push Notification Service posts to the provided callback URI
// when an associated event triggers. The maximum allowed size for this payload is 1 KB.
byte[] callbackMessage = new byte[1024];

// Create a web request to send the register callback request to the Push Notification Service.
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(mpnCallbackServiceUri);

// A mandatory custom header that specifies the URI to post the callback message to when any registered event with the associated subscription triggers.
webRequest.Headers.Add("X-CallbackURI", callbackUri);  

// HTTP POST is the only allowed method to send the notification.
webRequest.Method = "POST";

// Sets the web request content length.
webRequest.ContentLength = callbackMessage.Length;

// Set the content type according to the type of callback message being sent. 
webRequest.ContentType = "application/*";

using (Stream requestStream = webRequest.GetRequestStream())
{
    requestStream.Write(callbackMessage, 0, callbackMessage.Length);
}

// Get the response. This example gets the web response synchronously, but a cloud service can get it asynchronously as well.
HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse();

// Ensure that the 'HTTP 200 OK' response is received from the Push Notification Service.
Debug.Assert(response.StatusCode == HttpStatusCode.OK);

// You can get the status of the notification channel associated with the callback request
// using the custom headers in the received response. 
string subscriptionStatus = response.Headers.Get("X-SubscriptionStatus");

// You can get the device connection status of the notification channel associated with the callback request
// using the custom headers in the received response. 
string deviceConnectionStatus = response.Headers.Get("X-DeviceConnectionStatus");

표시: