이 페이지가 유용했습니까?
이 콘텐츠에 대한 여러분의 의견은 중요합니다. 의견을 알려주십시오.
추가 의견
1500자 남음
내보내기(0) 인쇄
모두 확장

방법: Windows Phone용 App Connect를 사용하여 검색 확장

2012-02-09

Windows Phone OS 7.1 에서 응용프로그램은 App Connect를 사용하여 Windows Phone 의 검색 환경을 확장할 수 있습니다. 이 항목에서는 App Connect 사용 응용프로그램을 만들고, 제품 정보, 장소 정보 및 영화 정보라는 퀵 카드를 사용하여 이를 테스트하는 방법에 대해 설명합니다. 이 항목에서 사용하는 응용프로그램은 App Connect 딥 링크 URI에서 매개 변수를 추출하여 응용프로그램 페이지에 표시합니다. App Connect를 사용한 검색 환경 확장에 대한 자세한 내용은 Windows Phone의 검색 확장성 개요를 참조하십시오.

중요중요:

App Connect를 남용하는 응용프로그램은 마켓플레이스에서 퇴출될 수 있습니다. 응용프로그램과 관련 있는 검색 확장만 등록합니다. Bing에서 어떤 확장을 다양한 퀵 카드와 연결하는지 자세히 알아보려면 퀵 카드 샘플을 사용해 보십시오.

App Connect의 목적은 사용자의 시간을 절약하는 데 있습니다. 응용프로그램에서 유익한 방향으로 App Connect URI 매개 변수를 사용해야 합니다. 예를 들어, 퀵 카드에서 실행될 때 응용프로그램 내에서 자동으로 검색하기 위해 App Connect를 사용할 수 있습니다. 퀵 카드 샘플을 사용하여 퀵 카드로부터 전달되는 URI 매개 변수 값에 대해 자세히 알아보십시오.

퀵 카드별로 모든 사용 가능 확장 및 URI 매개 변수의 목록은 Windows Phone의 검색 등록 및 실행 참조를 참조하십시오.

이 항목에서는 다음 주요 단계에 대해 설명합니다.

  1. 응용프로그램 매니페스트 구성

  2. Extras.xml 파일 만들기

  3. 퀵 카드에서 URI 매핑

  4. 데이터 모델 만들기

  5. ViewModel 만들기

  6. 퀵 카드 대상 페이지 만들기

  7. 응용프로그램 완성

  8. 퀵 카드를 사용한 테스트

  9. 응용프로그램 디버깅

팁팁:

이 항목은 퀵 카드 샘플에 해당합니다. 전체 응용프로그램을 다운로드하려면 Windows Phone용 코드 샘플을 참조하십시오.

이 프로세스에서는 다음 파일을 수정하거나 만듭니다.

  • WMAppManifest.xml: 응용프로그램 매니페스트 파일을 수정하여 응용프로그램에 해당하는 검색 엔진을 지정합니다.

  • Extensions\Extras.xml: 이 파일을 만들어 해당 퀵 카드의 앱 피벗 페이지에 표시될 응용프로그램의 제목과 설명을 지정합니다.

  • App.xaml: 이 파일을 수정하여 퀵 카드 딥 링크에서 퀵 카드 대상 페이지로의 URI 매핑을 지정합니다.

  • App.xaml.cs: 이 파일을 수정하여 응용프로그램에서 URI 매핑이 가능하게 합니다.

  • Model\QuickCardUriParameters.cs: 이 클래스 파일을 만들어 App Connect 딥 링크 URI에서 매개 변수를 나타냅니다. 이 클래스는 INotifyPropertyChanged 인터페이스를 구현합니다.

  • ViewModel\QuickCardViewModel.cs: 이 클래스 파일을 만들어 퀵 카드 대상 페이지의 ViewModel을 나타냅니다. 이 클래스는 App Connect 딥 링크 URI에서 매개 변수를 추출하고 INotifyPropertyChanged 인터페이스를 구현합니다.

  • QuickCardTargetPage.xaml: 퀵 카드 대상 페이지를 만들고 XAML 코드를 수정하여 딥 링크 URI의 매개 변수를 나타냅니다. MVVM 패턴과 관련하여 이 페이지는 보기입니다.

  • QuickCardTargetPage.xaml.cs: 이 페이지를 수정하여 ViewModel 개체를 만들고 페이지가 로드될 때 ViewModel에 매개 변수를 로드합니다.

  • MainPage.xaml: 이 페이지를 수정하여 표준 응용프로그램 실행에 대한 텍스트를 나타냅니다. 이 페이지는 App Connect에 의해 실행되지 않습니다.

이 항목에서 만드는 응용프로그램은 MVVM(Model-View-ViewModel) 패턴을 사용합니다. MVVM 응용프로그램의 다른 예제는 Windows Phone 응용프로그램에서 MVVM(Model-View-ViewModel) 패턴 구현을 참조하십시오.

참고참고:

다음 절차의 단계는 Windows Phone용 Visual Studio 2010 Express에 적용됩니다. Visual Studio 2010 Professional 또는 Visual Studio 2010 Ultimate용 추가 기능을 사용하는 경우에는 메뉴 명령이나 창 레이아웃에서 일부 소규모 변형이 나타날 수 있습니다.  

이 섹션에서는 응용프로그램을 만들고 응용프로그램 매니페스트 파일을 수정하여 이 응용프로그램과 관련된 검색 확장을 지정합니다. 이 예제에서는 퀵 카드의 3가지 유형을 소개하기 위해 3개의 엔진을 지정합니다. 전체 검색 엔진 목록은 Windows Phone의 검색 등록 및 실행 참조를 참조하십시오.

응용프로그램 매니페스트를 구성하려면

  1. Windows Phone용 Visual Studio 2010 Express 에서 파일 | 새 프로젝트 메뉴 명령을 선택하여 새 프로젝트를 만듭니다.

  2. 새 프로젝트 창이 표시됩니다. Visual C# 템플릿을 확장하고 Windows Phone용 Silverlight 템플릿을 선택합니다.

  3. Windows Phone 응용프로그램 템플릿을 선택합니다. 이름 상자에 선택한 이름을 입력합니다.

  4. 확인을 클릭합니다. 새 Windows Phone 응용프로그램 창이 표시됩니다.

  5. 대상 Windows Phone 버전 메뉴에서 Windows Phone 7.1 이 선택되었는지 확인합니다.

  6. 확인을 클릭합니다. 새 프로젝트가 생성되고 MainPage.xaml이 Visual Studio 디자이너 창에서 열립니다.

  7. 솔루션 탐색기에서 속성을 확장하고 WMAppManifest.xml을 두 번 클릭합니다. 응용프로그램 매니페스트 파일이 열립니다.

  8. WMAppManifest.xml에서 App 요소(Tokens 요소 아래)에 다음 코드를 추가합니다.

        <Extensions>
          <!-- Production extensions, for products: video games -->
          <Extension
            ExtensionName="Bing_Products_Video_Games"
            ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5661}"
            TaskID="_default"
            ExtraFile="Extensions\\Extras.xml" />
    
          <!-- Production extensions, for movies. -->
          <Extension
            ExtensionName="Bing_Movies"
            ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5661}"
            TaskID="_default"
            ExtraFile="Extensions\\Extras.xml" />
          
          <!-- Production extensions, for places: travel, food, and dining. -->
          <Extension
            ExtensionName="Bing_Places_Food_and_Dining"
            ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5661}"
            TaskID="_default"
            ExtraFile="Extensions\\Extras.xml" />
        </Extensions>
    
    

    이 코드는 퀵 카드(제품 정보, 영화 정보, 장소 정보)별로 하나씩 3개의 엔진을 추가합니다. 이러한 엔진과 연결되지 않은 퀵 카드는 퀵 카드에 해당하는 피벗 페이지에 이 응용프로그램을 표시하지 않습니다. 전체 검색 엔진 목록은 Windows Phone의 검색 등록 및 실행 참조를 참조하십시오.

이 섹션에서는 Extras.xml 파일을 만들어 해당 퀵 카드의 피벗 페이지에 표시될 응용프로그램의 제목과 설명을 지정합니다.

Extras.xml 파일을 만들려면

  1. 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 추가, 새 폴더를 차례로 선택합니다.

  2. 새 폴더의 이름을 확장명으로 지정합니다.

  3. 솔루션 탐색기에서 확장명 폴더를 마우스 오른쪽 버튼으로 클릭하고 추가, 새 항목을 선택합니다.

  4. 새 항목 추가 창에서 XML 파일을 선택하고 파일의 이름을 Extras.xml로 지정합니다. 추가를 클릭합니다.

  5. Extras.xml에서 코드를 다음 코드로 바꿉니다.

    <?xml version="1.0" encoding="utf-8" ?>
    <ExtrasInfo>
    
      <!-- Application title -->
      <AppTitle>
        <default>Display App Connect URI Parameters</default>
      </AppTitle>
    
      <!-- Search-related captions -->
      <Consumer ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5661}">
    
        <!-- Products caption for video games -->
        <ExtensionInfo>
          <Extensions>
            <ExtensionName>Bing_Products_Video_Games</ExtensionName>
          </Extensions>
          <CaptionString>
            <default>Product URI Details</default>
          </CaptionString>
        </ExtensionInfo>
    
        <!-- Movies caption -->
        <ExtensionInfo>
          <Extensions>
            <ExtensionName>Bing_Movies</ExtensionName>
          </Extensions>
          <CaptionString>
            <default>Movie URI Details</default>
          </CaptionString>
        </ExtensionInfo>
    
        <!-- Places caption for food and dining -->
        <ExtensionInfo>
          <Extensions>
            <ExtensionName>Bing_Places_Food_and_Dining</ExtensionName>
          </Extensions>
          <CaptionString>
            <default>Place URI Details</default>
          </CaptionString>
        </ExtensionInfo>
      </Consumer>
    </ExtrasInfo>
    
    

    이 코드는 퀵 카드의 유형에 따라 응용프로그램 제목 및 설명이 피벗 페이지에 표시되는 방법을 지정합니다. 모든 퀵 카드의 앱 피벗 페이지에서 응용프로그램 제목은 App Connect URI 매개 변수 표시가 됩니다. 설명은 퀵 카드 유형에 따라 달라집니다.

    • 제품 정보(Bing_Products_Electronics 엔진과 연결된 퀵 카드)의 경우: 제품 URI 세부 사항

    • 영화 정보(Bing_Movies 엔진과 연결된 퀵 카드)의 경우: 영화 URI 세부 사항

    • 장소 정보(Bing_Places_Food_and_Dining 엔진과 연결)의 경우: 장소 URI 세부 사항

이 섹션에서는 퀵 카드 딥 링크에서 퀵 카드 대상 페이지로 URI를 매핑합니다. 이를 위해 퀵 카드 UIR-mapper 클래스를 만들고 app.xaml.cs 파일에서 이를 응용프로그램 프레임에 할당합니다. 퀵 카드 대상 페이지는 이 항목의 뒷부분에 나오는 퀵 카드 대상 페이지 만들기 섹션에서 만듭니다.

이 섹션에서 만드는 URI-mapper 클래스는 “SearchExtras”를 실행할 응용프로그램의 페이지 이름으로 대체하면서 URI를 수정합니다. 또한 퀵 카드에서 보내는 특수 문자를 처리하도록 URI 매개 변수 값 각각을 다시 인코딩합니다.

팁팁:

이 항목은 퀵 카드 샘플에 해당합니다. QuickCardUriMapper라는 URI-mapper 클래스를 포함하여 전체 응용프로그램을 다운로드하려면 Windows Phone용 코드 샘플을 참조하십시오.

URI-mapper 클래스를 만들려면

  1. 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 추가, 새 항목을 차례로 선택합니다.

  2. 새 항목 추가 창에서 클래스를 선택하고 파일 이름을 QuickCardUriMapper.cs로 지정합니다. 추가를 클릭합니다.

  3. QuickCardUriMapper.cs에서 지시문의 목록을 다음으로 대체합니다.

    using System;
    using System.Windows.Navigation;
    using System.Net;
    
    
  4. QuickCardUriMapper.cs에서 다음과 같이 클래스 문을 업데이트하여 UriMapperBase 클래스에서 상속하게 합니다.

    public class QuickCardUriMapper : UriMapperBase
    
    
  5. 다음 코드를 QuickCardUriMapper 클래스에 추가합니다. 이 코드는 App Connect URI 매개 변수 값 각각을 다시 인코딩합니다. URI의 대상 페이지는 TargetPageName이라는 정적 문자열에 의해 결정됩니다.

    // Navigation destination. 
    private static string TargetPageName = "QuickCardTargetPage.xaml";
    private string tempUri;
    
    public override Uri MapUri(Uri uri)
    {
        tempUri = uri.ToString();
                
        // Parse URI when launched by App Connect from Search
        if (tempUri.Contains("/SearchExtras"))
        {
            // Decode all characters in the URI.
            tempUri = HttpUtility.UrlDecode(tempUri);
    
            // Create a new URI for product cards.
            if (tempUri.Contains("Bing_Products"))
            {
                return GetProductCardUri(tempUri);
            }
    
            // Create a new URI for place cards.
            if (tempUri.Contains("Bing_Places"))
            {
                return GetPlaceCardUri(tempUri);
            }
    
            // Create a new URI for movie cards.
            if (tempUri.Contains("Bing_Movies"))
            {
                return GetMovieCardUri(tempUri);
            }
        }
    
        // Immediately return the URI when it is not related to App Connect for Search.
        return uri;
    }
    
    // Return a parsed Product Card URI.
    private Uri GetProductCardUri(string uri)
    {
        // Extract parameter values from URI.
        string ProductNameValue = GetURIParameterValue("ProductName=",uri);
        string CategoryValue = GetURIParameterValue("Category=",uri);
    
        // Create new URI.
        string NewURI = String.Format("/{0}?ProductName={1}&Category={2}", 
                                TargetPageName, ProductNameValue, CategoryValue);
    
        return new Uri(NewURI, UriKind.Relative);
    }
    
            
    // Return a parsed Place Card URI.
    private Uri GetPlaceCardUri(string uri)
    {
        // Extract parameter values from URI.
        string PlaceNameValue = GetURIParameterValue("PlaceName=", uri);
        string PlaceLatitudeValue = GetURIParameterValue("PlaceLatitude=", uri);
        string PlaceLongitudeValue = GetURIParameterValue("PlaceLongitude=", uri);
        string PlaceAddressValue = GetURIParameterValue("PlaceAddress=", uri);
        string CategoryValue = GetURIParameterValue("Category=", uri); 
    
        // Create new URI.
        string NewURI = String.Format("/{0}?PlaceName={1}&PlaceLatitude={2}&PlaceLongitude={3}&PlaceAddress={4}&Category={5}", 
                                TargetPageName, PlaceNameValue, PlaceLatitudeValue, PlaceLongitudeValue, PlaceAddressValue, CategoryValue);
    
        return new Uri(NewURI, UriKind.Relative);       
    }
    
    // Return a parsed Movie Card URI.
    private Uri GetMovieCardUri(string uri)
    {
        // Extract parameter values from URI.
        string MovieNameValue = GetURIParameterValue("MovieName=", uri);
        string CategoryValue = GetURIParameterValue("Category=", uri);
    
        // Create new URI.
        string NewURI = String.Format("/{0}?MovieName={1}&Category={2}",
                    TargetPageName, MovieNameValue, CategoryValue);
    
        return new Uri(NewURI, UriKind.Relative);
    }
    
    
    // This method extracts the string values that correspond to parameters in an App Connect URI.
    private string GetURIParameterValue(string parameteridentifier, string uri)
    {
        string tempValue = "";
    
        // If the parameter exists in the string, extract the corresonding parameter value.
        if (uri.Contains(parameteridentifier))
        {
            string subUri; 
    
            // Extract the characters that contain and follow the parameter identifier.
            subUri = uri.Substring(uri.LastIndexOf(parameteridentifier));
    
            // Remove the parameter identifier from the substring.
            subUri = subUri.Replace(parameteridentifier, "");
                    
            // Obtain the position of the next parameter in the substring.
            int nextParameterPosition = FindNextParameter(subUri);
    
                    
            if (nextParameterPosition < int.MaxValue)
            {
                // Remove the characters that contain and follow the next parameter.
                tempValue = subUri.Substring(0, nextParameterPosition);
            }
            else
            {
                // No more parameters follow in the string. 
                tempValue = subUri;
            }
    
            // Encode the parameter values to help prevent issues in the URI.
            tempValue = HttpUtility.UrlEncode(tempValue);
        }
            
        return tempValue;
    }
    
    // Returns the string position of the next App Connect URI parameter, if applicable.
    private int FindNextParameter(string subUri)
    {
        int lowestPosition = int.MaxValue;
        int tempPosition;
    
        tempPosition = subUri.IndexOf("&ProductName");
        if ((tempPosition > -1) && (tempPosition < lowestPosition)) lowestPosition = tempPosition;
    
        tempPosition = subUri.IndexOf("&Category");
        if ((tempPosition > -1) && (tempPosition < lowestPosition)) lowestPosition = tempPosition;
    
        tempPosition = subUri.IndexOf("&PlaceName");
        if ((tempPosition > -1) && (tempPosition < lowestPosition)) lowestPosition = tempPosition;
    
        tempPosition = subUri.IndexOf("?PlaceName");
        if ((tempPosition > -1) && (tempPosition < lowestPosition)) lowestPosition = tempPosition;
    
        tempPosition = subUri.IndexOf("&PlaceLatitude");
        if ((tempPosition > -1) && (tempPosition < lowestPosition)) lowestPosition = tempPosition;
    
        tempPosition = subUri.IndexOf("&PlaceLongitude");
        if ((tempPosition > -1) && (tempPosition < lowestPosition)) lowestPosition = tempPosition;
    
        tempPosition = subUri.IndexOf("&PlaceAddress");
        if ((tempPosition > -1) && (tempPosition < lowestPosition)) lowestPosition = tempPosition;
    
        tempPosition = subUri.IndexOf("&MovieName");
        if ((tempPosition > -1) && (tempPosition < lowestPosition)) lowestPosition = tempPosition;
    
        return lowestPosition;
    }
    
    

응용프로그램 프레임에 URI-mapper를 할당하려면

  • App.xaml.cs에서 InitializePhoneApplication 메서드에 다음 코드를 추가합니다. 이 메서드를 찾기 위해 "Phone application initialization"라는 제목의 코드 영역을 확장해야 할 수도 있습니다.

    // Assign the quick card URI-mapper class to the application frame.
    RootFrame.UriMapper = new QuickCardUriMapper();
    
    

    이 코드는 응용프로그램 프레임의 UriMapper 속성에 QuickCardUriMapper 클래스를 할당합니다. InitializePhoneApplication 메서드의 기존 코드는 수정하지 않습니다. 다음 예제와 같이 UriMapper-assignment만 추가합니다.

    private void InitializePhoneApplication()
    {
        if (phoneApplicationInitialized)
            return;
    
        // Create the frame but don't set it as RootVisual yet; this allows the splash
        // screen to remain active until the application is ready to render.
        RootFrame = new PhoneApplicationFrame();
        RootFrame.Navigated += CompleteInitializePhoneApplication;
    
        // Assign the quick card URI-mapper class to the application frame.
        RootFrame.UriMapper = new QuickCardUriMapper();
    
        // Handle navigation failures
        RootFrame.NavigationFailed += RootFrame_NavigationFailed;
    
        // Ensure we don't initialize again
        phoneApplicationInitialized = true;
    }
    

이 섹션에서는 App Connect 딥 링크 URI에 퀵 카드의 매개 변수를 나타내는 데이터 모델을 만듭니다. 이 클래스는 UI의 요소에 바인딩하는 데 사용됩니다. 각 퀵 카드에 해당하는 전체 매개 변수의 목록은 Windows Phone의 검색 등록 및 실행 참조를 참조하십시오.

데이터 모델을 만들려면

  1. 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 추가, 새 폴더를 차례로 선택합니다.

  2. 새 폴더의 이름을 모델로 지정합니다.

  3. 솔루션 탐색기에서 모델 폴더를 마우스 오른쪽 버튼으로 클릭하고 추가, 새 항목을 차례로 선택합니다.

  4. 새 항목 추가 창에서 코드 파일을 선택하고 파일의 이름을 AppConnectUriParameter.cs로 지정합니다. 추가를 클릭합니다.

  5. AppConnectUriParameter.cs에서 다음 코드를 추가합니다.

    using System.ComponentModel;
    
    namespace AppConnectExample.Model
    {
        // Represents a parameter from a quick card in an App Connect deep link URI
        public class AppConnectUriParameter : INotifyPropertyChanged
        {
            // The parameter name
            private string _paramName;
            public string ParamName
            {
                get {return _paramName;}
                set
                {
                    if (_paramName != value)
                    {
                        _paramName = value;
                        NotifyPropertyChanged("ParamName");
                    }
                }
            }
    
            // The parameter value
            private string _paramValue;
            public string ParamValue
            {
                get {return _paramValue;}
                set
                {
                    if (_paramValue != value)
                    {
                        _paramValue = value;
                        NotifyPropertyChanged("ParamValue");
                    }
                }
            }
    
            // Class constructor
            public AppConnectUriParameter(string pName, string pValue)
            {
                _paramName = pName.Trim();
    
                if (_paramName == "Category")
                {
                // Place multiple categories on new lines.
                    _paramValue = pValue.Replace(",",",\n");
                }
                else
                {
                    _paramValue = pValue;
                }
            }
    
            #region INotifyPropertyChanged Members
    
            public event PropertyChangedEventHandler PropertyChanged;
    
            // Used to notify that a property changed
            private void NotifyPropertyChanged(string propertyName)
            {
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
                }
            }
    
            #endregion
        }
    }
    
    

    이 클래스는 매개 변수 이름과 값의 속성, 이 이름과 값을 수락하는 생성자 및 INotifyPropertyChanged 멤버로 구성됩니다.

이 섹션에서는 퀵 카드 대상 페이지인 QuickCardTargetPage.xaml에 해당하는 ViewModel을 만듭니다. ViewModel은 App Connect 딥 링크에서 URI 매개 변수를 추출합니다.

ViewModel을 만들려면

  1. 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 추가, 새 폴더를 차례로 선택합니다.

  2. 새 폴더의 이름을 ViewModel로 지정합니다.

  3. 솔루션 탐색기에서 ViewModel 폴더를 마우스 오른쪽 버튼으로 클릭하고 추가, 새 항목을 차례로 선택합니다.

  4. 새 항목 추가 창에서 코드 파일을 선택하고 파일의 이름을 QuickCardTargetPageViewModel.cs로 지정합니다. 추가를 클릭합니다.

  5. QuickCardTargetPageViewModel.cs에서 다음 코드를 추가합니다.

    using System.ComponentModel;
    using System.Collections.ObjectModel;
    using System.Collections.Generic;
    
    // Reference the data model.
    using AppConnectExample.Model;
    
    namespace AppConnectExample.ViewModel
    {    
        public class QuickCardTargetPageViewModel: INotifyPropertyChanged
        {
            // Observeable collection for the App Connect deep link URI parameters.
            private ObservableCollection<AppConnectUriParameter> _AppConnectUriParameters;
            public ObservableCollection<AppConnectUriParameter> AppConnectUriParameters
            {
                get {return _AppConnectUriParameters;}
                set
                {
                    if (_AppConnectUriParameters != value)
                    {
                        _AppConnectUriParameters = value;
                        NotifyPropertyChanged("AppConnectUriParameters");
                    }
                }
            }
    
            // Class constructor.
            public QuickCardTargetPageViewModel()
            {
                // Create observeable collection object.
                AppConnectUriParameters = new ObservableCollection<AppConnectUriParameter>();
            }
    
            // Load parameters from quick page; extract from the NavigationContext.QueryString
            public void LoadUriParameters(IDictionary<string,string> QueryString)
            {
                // Clear parameters in the ViewModel.
                AppConnectUriParameters.Clear();
    
                // Loop through the quick card parameters in the App Connect deep link URI.
                foreach (string strKey in QueryString.Keys)
                {
                    // Set default value for parameter if no value is present.
                    string strKeyValue = "<no value present in URI>";
    
                    // Try to extract parameter value from URI.
                    QueryString.TryGetValue(strKey, out strKeyValue);
    
                    // Add parameter object to ViewModel collection.
                    AppConnectUriParameters.Add(new AppConnectUriParameter(strKey, strKeyValue));
                }
            }
    
            #region INotifyPropertyChanged Members
    
            public event PropertyChangedEventHandler PropertyChanged;
    
            // Used to notify that a property has changed.
            private void NotifyPropertyChanged(string propertyName)
            {
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
                }
            }
            #endregion
        }
    }
    
    

    LoadUriParameters 메서드에서 ViewModel이 App Connect 딥 링크 URI에서 매개 변수를 추출하여 AppConnectUriParameter 형식의 관찰 가능 컬렉션에 로드합니다.

이 섹션에서는 퀵 카드 대상 페이지를 만듭니다. 이 페이지는 App Connect 딥 링크 URI를 통해 퀵 카드에서 실행되는 페이지입니다. MVVM 패턴과 관련하여 이 페이지는 보기입니다.

퀵 카드 대상 페이지를 만들려면

  1. 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 추가, 새 항목을 차례로 선택합니다.

  2. 새 항목 추가 창에서 Windows Phone 세로 페이지를 선택하고 파일의 이름을 QuickCardTargetPage.xaml로 지정합니다. 추가를 클릭합니다.

  3. QuickCardTargetPage.xaml에서 LayoutRoot라는 표를 다음 코드로 바꿉니다.

        <!--LayoutRoot is the root grid where all page content is placed-->
        <Grid x:Name="LayoutRoot" Background="Transparent">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
    
            <!--TitlePanel contains the name of the application and page title-->
            <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
                <TextBlock 
                    x:Name="ApplicationTitle" 
                    Text="QUICK CARD EXAMPLE" 
                    Style="{StaticResource PhoneTextNormalStyle}"/>
                <TextBlock 
                    x:Name="PageTitle" 
                    Text="URI details" 
                    Margin="9,-7,0,0" 
                    Style="{StaticResource PhoneTextTitle1Style}"/>
            </StackPanel>
     
            <!--ContentPanel contains ListBox and ListBox ItemTemplate.-->
            <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
                <ListBox x:Name="paramsListBox" Margin="0,0,-12,0" ItemsSource="{Binding AppConnectUriParameters}" >
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel >
                                <TextBlock 
                                    Text="{Binding ParamName}" 
                                    TextWrapping="Wrap" 
                                    Style="{StaticResource PhoneTextExtraLargeStyle}"/>
                                <TextBlock 
                                    Text="{Binding ParamValue}" 
                                    TextWrapping="Wrap" 
                                    Margin="12,-6,12,0" 
                                    Style="{StaticResource PhoneTextAccentStyle}"/>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </Grid>
        </Grid>
    
    

    이 페이지에서 ListBox 컨트롤은 ViewModel의 AppConnectUriParameters라는 관찰 가능 컬렉션에 바인딩됩니다. ListBox 내에서 두 TextBlock 컨트롤은 관찰 가능 컬렉션의 각 매개 변수에 바인딩됩니다. 한 TextBlock 컨트롤은 ParamName 속성에 바인딩되고, 다른 TextBlock 컨트롤은 ParamValue 속성에 바인딩됩니다.

  4. 퀵 카드 대상 페이지인 QuickCardTargetPage.xaml.cs의 코드 숨김 파일에서 페이지 맨 위에 다음 지시문을 추가합니다.

    // Reference the ViewModel.
    using AppConnectExample.ViewModel;
    
    
  5. QuickCardTargetPage.xaml.cs에서 클래스 생성자(InitializeComponent() 호출 뒤)에 다음 코드를 추가합니다.

                // Create the ViewModel object.
                this.DataContext = new QuickCardTargetPageViewModel();
    
                // Create event handler for the page Loaded event.
                this.Loaded += new RoutedEventHandler(QuickCardTargetPage_Loaded);
    
    
    

    이 코드는 새 QuickCardTargetPageViewModel 개체를 만들어 페이지의 데이터 컨텍스트에 할당합니다. 또한 이 코드는 페이지 Loaded 이벤트에 대한 이벤트 처리기를 만들고 구성합니다.

  6. QuickCardTargetPage.xaml.cs에서 다음 코드를 Page 클래스에 추가합니다.

            // A property for the ViewModel.
            QuickCardTargetPageViewModel ViewModel
            {
                get { return (QuickCardTargetPageViewModel)DataContext; }
            }
    
    
            private void QuickCardTargetPage_Loaded(object sender, RoutedEventArgs e)
            {
                // Load the quick card parameters from the App Connect deep link URI.
                ViewModel.LoadUriParameters(this.NavigationContext.QueryString);
            }
    
    

    이렇게 하면 LoadUriParameters 메서드를 호출할 수 있도록 ViewModel에 대한 속성이 만들어집니다. 매개 변수가 App Connect 딥 링크 URI에서 추출될 수 있도록, 페이지 Loaded 이벤트에 대한 처리기에서 NavigationContext QueryString 속성이 ViewModel로 전달됩니다.

이 섹션에서는 표준 응용프로그램 실행을 위해 기본 페이지에 텍스트를 추가합니다.

응용프로그램을 완성하려면

  • 응용프로그램의 기본 페이지인 MainPage.xaml에서 LayoutRoot라는 표를 다음 코드로 바꿉니다.

        <!--LayoutRoot is the root grid where all page content is placed-->
        <Grid x:Name="LayoutRoot" Background="Transparent">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
    
            <!--TitlePanel contains the name of the application and page title-->
            <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
                <TextBlock 
                    x:Name="ApplicationTitle" 
                    Text="QUICK CARD EXAMPLE" 
                    Style="{StaticResource PhoneTextNormalStyle}"/>
                <TextBlock 
                    x:Name="PageTitle" 
                    Text="main page" 
                    Margin="9,-7,0,0" 
                    Style="{StaticResource PhoneTextTitle1Style}"/>
            </StackPanel>
    
            <!--ContentPanel - place additional content here-->
            <Grid x:Name="ContentPanel" Grid.Row="1" Margin="24,0,42,338">
                <TextBlock 
                    Text="With App Connect, you can navigate directly to a relevant page in your app from a Bing quick card."
                    TextWrapping="Wrap"  
                    Style="{StaticResource PhoneTextAccentStyle}" 
                    Margin="0,0,12,181" />
    
                <TextBlock Text="To launch this app from a quick card, perform the testing steps outlined in the documentation."
                    TextWrapping="Wrap" 
                    Style="{StaticResource PhoneTextAccentStyle}" 
                    Margin="0,94,0,83" />
            </Grid>
        </Grid>
    
    

    이렇게 하면 응용프로그램 작성이 완료됩니다.

이 응용프로그램은 라이브 퀵 카드를 탐색하는 데 도움이 되도록 설계되었습니다. 이 섹션에서는 응용프로그램 매니페스트 파일에 구성한 엔진과 연관된 제품, 영화, 장소를 검색합니다. 퀵 카드를 찾은 후 응용프로그램을 실행하여 App Connect 딥 링크 URI에서 응용프로그램으로 전달된 매개 변수를 확인합니다.

퀵 카드에서 응용프로그램을 실행하면 디버깅 연결이 끊어집니다. 응용프로그램을 디버깅하려면 응용프로그램 디버깅이라는 프로시저를 따릅니다.

중요중요:

퀵 카드를 사용하여 응용프로그램을 테스트하려면 PC 또는 Windows Phone 단말기에서 인터넷 연결이 가능해야 합니다.

제품 정보로 테스트하려면

  1. F5 키를 눌러 응용프로그램을 디버깅하고 에뮬레이터나 단말기로 배포합니다.

  2. 응용프로그램이 로드된 후 하드웨어 검색 버튼을 탭하여 Bing을 엽니다.

  3. Bing에서 비디오 게임 제품과 관련된 검색어(예: 비디오 게임 콘솔 이름)를 입력합니다. 예를 들어 "xbox 360"을 입력하면 Xbox 360 콘솔에 관한 제품 정보가 반환됩니다. Bing_Products_Video_Games 엔진을 사용하여 제품 정보를 테스트하려면 두 가지가 필요합니다.

    • Bing이 비디오 게임 제품에 관한 검색어를 찾아야 합니다.

    • 검색어와 관련된 제품 정보가 Bing에 이미 존재해야 하고 Bing_Products_Video_Games 엔진과 연결되어 있어야 합니다.

  4. 피벗 페이지에서 제품 제목 아래에 있는 제품을 선택합니다. 제품과 관련된 퀵 카드가 실행됩니다.

    팁팁:

    제품이라는 제목이 보이지 않으면 다른 검색어를 사용하거나 WMAppManifest.xmlExtras.xml 파일에 제품 엔진을 추가합니다. 전체 검색 엔진 목록은 Windows Phone의 검색 등록 및 실행 참조를 참조하십시오.

  5. 제품에 대한 퀵 카드에서 피벗 페이지로 밀고 URI 매개 변수 표시라는 응용프로그램을 탭합니다. 설명은 제품 URI 세부 사항이라고 되어 있습니다.

    참고참고:

    피벗 페이지가 보이지 않으면 특정 제품 정보가 WMAppManifest.xmlExtras.xml 파일에 있는 제품 엔진에 연결되지 않은 것입니다. 뒤로 버튼을 탭하고 다른 제품 정보로 시도해 보십시오.

  6. 피벗 페이지에서 응용프로그램을 탭한 후 QuickCardTargetPage.xaml 페이지에 제품에 대한 App Connect 링크 URI에 매개 변수가 표시되는지 관찰합니다.

영화 정보로 테스트하려면

  1. F5 키를 눌러 응용프로그램을 디버깅하고 에뮬레이터나 단말기로 배포합니다. 응용프로그램을 이미 배포한 경우 이 단계는 선택 사항입니다.

  2. 응용프로그램이 로드된 후 하드웨어 검색 버튼을 탭하여 Bing을 엽니다.

  3. Bing에서 현재 상영 중인 영화와 관련된 검색어, 이를테면 "영화", "상영 중인 영화" 또는 가까운 상영관에서 상영 중인 작품 이름을 입력합니다. Bing_Movies 엔진을 사용하여 영화 정보를 테스트하려면 두 가지가 필요합니다.

    • Bing이 현재 상영 중인 영화와 관련된 검색어를 고려해야 합니다.

    • 검색어와 관련된 영화 정보가 Bing에 이미 존재해야 하고 Bing_Movies 엔진과 연결되어 있어야 합니다.

  4. 피벗 페이지에서 제목 위쪽의 검색 결과에 나열된 영화를 선택합니다. 영화와 관련된 퀵 카드가 실행됩니다.

    참고참고:

    이라는 제목 위에 영화가 나열되지 않으면 다른 검색어를 사용해 보십시오. 영화에 사용할 수 있는 추가 엔진이 없습니다.

  5. 영화에 대한 퀵 카드에서 피벗 페이지로 밀고 URI 매개 변수 표시라는 응용프로그램을 탭합니다. 설명은 영화 URI 세부 사항이라고 되어 있습니다.

  6. 피벗 페이지에서 응용프로그램을 탭한 후 QuickCardTargetPage.xaml 페이지에 영화에 대한 App Connect 링크 URI에 매개 변수가 표시되는지 관찰합니다.

장소 정보로 테스트하려면

  1. F5 키를 눌러 응용프로그램을 디버깅하고 에뮬레이터나 단말기로 배포합니다.

  2. 응용프로그램이 로드된 후 하드웨어 검색 버튼을 탭하여 Bing을 엽니다.

  3. Bing에서 "맛집" 또는 가까운 음식점의 이름 등 음식과 관련된 검색어를 입력합니다. Bing_Places_Food_and_Dining 엔진을 사용하여 장소 정보를 테스트하려면 두 가지가 필요합니다.

    • Bing이 음식 및 음식점과 관련된 검색어를 찾아야 합니다.

    • 검색어와 관련된 장소 정보가 Bing에 이미 존재해야 하고 Bing_Places_Food_and_Dining 엔진과 연결되어 있어야 합니다.

  4. 로컬 피벗 페이지에서 표시되는 지도 아래에 나열되는 음식점 위치를 선택합니다. 장소와 관련된 퀵 카드가 실행됩니다.

    팁팁:

    로컬 피벗 페이지에 결과가 표시되지 않으면 다른 검색어를 사용하거나 WMAppManifest.xmlExtras.xml 파일에 장소 엔진을 추가합니다. 전체 검색 엔진 목록은 Windows Phone의 검색 등록 및 실행 참조를 참조하십시오.

  5. 장소에 대한 퀵 카드에서 피벗 페이지로 밀고 URI 매개 변수 표시라는 응용프로그램을 탭합니다. 설명은 장소 URI 세부 사항이라고 되어 있습니다.

    참고참고:

    피벗 페이지가 보이지 않으면 특정 장소 정보가 WMAppManifest.xmlExtras.xml 파일에 있는 장소 엔진에 연결되지 않은 것입니다. 뒤로 버튼을 탭하고 다른 장소 정보로 시도해 보십시오.

  6. 피벗 페이지에서 응용프로그램을 탭한 후 QuickCardTargetPage.xaml 페이지에 장소에 대한 App Connect 링크 URI에 매개 변수가 표시되는지 관찰합니다.

응용프로그램이 퀵 카드에서 다시 실행되면 디버깅 프로세스가 끊어집니다. 응용프로그램에 대한 App Connect 실행을 디버깅하려면 딥 링크 URI를 시뮬레이션해야 합니다. 이를 위해서는 다음 프로시저를 수행하여 WPAppManifest.xml 파일에서 DefaultTask 요소를 임시로 바꿉니다.

응용프로그램을 디버깅하려면

  1. 응용프로그램 매니페스트 파일 WPAppManifest.xml에서 원래 DefaultTask 요소를 임시로 주석 처리합니다.

    중요중요:

    원래 DefaultTask 요소를 주석으로 처리하면 응용프로그램이 기본 페이지로의 표준 실행을 수행하지 않습니다. 디버깅을 완료한 후에는 이 요소의 주석 처리를 제거해야 합니다.

  2. WPAppManifest.xml에서 다음 임시 DefaultTask 요소를 Tasks 요소에 추가합니다.

    <DefaultTask Name="_default" NavigationPage="SearchExtras?MovieName=Test&amp;Category=Bing_Movies" />
    

    DefaultTask 요소는 "Test"라는 영화에 대한 영화 정보를 시뮬레이션합니다.

  3. F5 키를 눌러 응용프로그램을 디버깅하고 에뮬레이터나 단말기로 배포합니다.

  4. 응용프로그램이 QuickCardTargetPage.xaml 페이지에서 바로 실행되는지, Test라는 영화에 대한 App Connect 딥 링크 URI에 매개 변수가 표시되는지 관찰합니다.

  5. WPAppManifest.xml에서 임시 DefaultTask 요소를 주석 처리하고 원래 요소의 주석 처리를 제거합니다. 완료되면 Tasks 요소는 다음 코드와 같이 표시됩니다.

    <Tasks>
      <DefaultTask  Name ="_default" NavigationPage="MainPage.xaml"/>
      <!--<DefaultTask  Name="_default" NavigationPage="SearchExtras?MovieName=Test&amp;Category=Bing_Movies" />-->
    </Tasks>
    

표시:
© 2015 Microsoft