情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

方法: Windows Phone のアプリ コネクトで検索を拡張する

2012/02/09

Windows Phone OS 7.1 では、アプリケーションでアプリ コネクトを使用して、Windows Phone での検索の操作性を拡張できます。このトピックでは、アプリ コネクト対応アプリケーションを作成する方法、および製品カード、場所カード、ムービー カードといった各種クイック カードでテストする方法を説明します。このトピックで扱うアプリケーションは、アプリ コネクトのディープ リンク URI からパラメーターを抽出してアプリケーション ページに表示します。アプリ コネクトを使用して検索機能を拡張する方法の詳細については、「Windows Phone の検索の機能拡張の概要」を参照してください。

重要な注重要な注:

アプリ コネクトを濫用するアプリケーションは、Marketplace から削除されるおそれがあります。アプリケーションに関連する検索拡張機能のみを登録してください。Bing でさまざまなクイック カードに関連付けられている拡張機能の詳細を確認するには、クイック カードのサンプルをお試しください。

アプリ コネクトの目的はユーザーの時間を節約することです。アプリケーションは、アプリ コネクト URI パラメーターを効果的に使用する必要があります。たとえば、クイック カードから起動された場合に、アプリケーション内部で自動的に検索を実行するようにアプリ コネクトを使用します。クイック カードから渡される 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: このクラス ファイルを作成して、アプリ コネクト ディープ リンク URI でパラメーターを示します。このクラスは、INotifyPropertyChanged インターフェイスを実装します。

  • ViewModel\QuickCardViewModel.cs: このファイルを作成して、クイック カード ターゲット ページの ViewModel を示します。このクラスはアプリ コネクト ディープ リンク URI からパラメーターを抽出し、INotifyPropertyChanged インターフェイスを実装します。

  • QuickCardTargetPage.xaml: クイック カードのターゲット ページを作成して XAML コードを変更し、ディープ リンク URI からのパラメーターを示します。MVVM パターンに関して、このページはビューです。

  • QuickCardTargetPage.xaml.cs: このページを変更して ViewModel オブジェクトを作成し、ページのロード時に ViewModel にパラメーターをロードします。

  • MainPage.xaml: このページを変更して標準のアプリケーション起動のためのテキストを表示します。このページは、アプリ コネクトにより開かれるものではありません。

このトピックで作成されるアプリケーションは、Model-View-ViewModel (MVVM) パターンを使用します。MVVM アプリケーションの他の例については、「Windows Phone アプリケーションでの Model-View-ViewModel パターンの実装」を参照してください。

注注:

次の手順は、Visual Studio 2010 Express for Windows Phone 向けです。 Visual Studio 2010 Professional や Visual Studio 2010 Ultimate のアドインを使用している場合は、メニュー コマンドやウィンドウのレイアウトが多少異なる場合があります。

このセクションでは、アプリケーションを作成してアプリケーション マニフェスト ファイルを変更し、アプリケーションに関連する検索拡張機能を指定します。この例では、3 つの拡張機能を指定して、3 種類のクイック カードを示します。すべての拡張機能の一覧については、「Windows Phone の検索登録および起動参照」を参照してください。

アプリケーション マニフェストの設定方法

  1. Visual Studio 2010 Express for Windows Phone で、[ファイル] メニューの [新しいプロジェクト] をクリックして新しいプロジェクトを作成します。

  2. [新しいプロジェクト] ウィンドウが表示されます。Visual C# のテンプレートを展開してから、Silverlight for Windows Phone のテンプレートを選択します。

  3. Windows Phone アプリケーション テンプレートを選択します。[名前] ボックスに選択した名前を入力します。

  4. [OK] をクリックします。[新しい Windows Phone アプリケーション] ウィンドウが表示されます。

  5. [ターゲットの Windows Phone のバージョン] メニューで、Windows Phone 7.1 が選択されていることを確認します。

  6. [OK] をクリックします。新しいプロジェクトが作成され、Visual Studio のデザイナー ウィンドウに MainPage.xaml が表示されます。

  7. ソリューション エクスプローラーで [プロパティ] を展開して、[WMAppManifest.xml] をクリックします。これにより、アプリケーション マニフェスト ファイルが開きます。

  8. WMAppManifest.xml で、Tokens 要素の下にある App 要素に次のコードを追加します。

        <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 種類のクイック カードにそれぞれ 1 つずつ、合計 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>
    
    

    このコードは、クイック カードの種類によってアプリケーションとキャプションが [アプリ] ピボット ページにどのように表示されるかを指定します。すべてのクイック カードのアプリ ピボット ページで、アプリケーションのタイトルは「アプリ コネクト URI パラメーターを表示」です。クイック カードの種類によって、このキャプションは異なります。

    • 製品カード (Bing_Products_Electronics 拡張に関連付けられたもの): 製品 URI の詳細

    • ムービー カード (Bing_Movies 拡張に関連付けられたもの): ムービー URI の詳細

    • 場所カード (Bing_Places_Food_and_Dining 拡張に関連付けられたもの): 場所 URI の詳細

このセクションでは、クイック カード ディープ リンクから、クイック カードのターゲット ページに URI をマッピングします。これを行うには、クイック カードの URI マッパー クラスを作成し、app.xaml.cs ファイル内のアプリケーション フレームに割り当てます。クイック カード ターゲット ページは、このトピックの後半にある「クイック カード ターゲット ページの作成」で作成されます。

このセクションで作成される URI マッパー クラスは、"SearchExtras" を起動されるアプリケーションのページの名前で置き換えることによって URI を変更します。また、各 URI パラメーター値を再度エンコードして、クイック カードから送信される可能性がある特殊文字を処理します。

ヒントヒント:

このトピックは、クイック カードのサンプルに対応しています。QuickCardUriMapper という名前の URI マッパー クラスを含む、完全なアプリケーションをダウンロードするには、「Windows Phone のコード サンプル」を参照してください。

URI マッパー クラスを作成するには

  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 クラスで、次のコードを追加します。このコードは、各アプリ コネクト 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 マッパーを割り当てるには

  • 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 の割り当ての追加のみを行います。

    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;
    }
    

このセクションでは、アプリ コネクト ディープ リンク URI のクイックカードからのパラメーターを示すデータ モデルを作成します。このクラスは、UI 内の要素にバインディングするのに使用します。各クイック カードに対応するパラメーターの完全なリストについては、「Windows Phone の検索登録および起動参照」を参照してください。

データ モデルを作成するには

  1. ソリューション エクスプローラーで、プロジェクトを右クリックし、[追加] を選択して、[新しいフォルダー] をクリックします。

  2. 新しいフォルダーに Model という名前を付けます。

  3. ソリューション エクスプローラーModel フォルダーを右クリックし、[追加] を選択して [新しい項目] を選択します。

  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 は、アプリ コネクト ディープ リンクから 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 はアプリ コネクト ディープ リンク URI からパラメーターを抽出し、タイプ AppConnectUriParameter のオブザーバブル コレクションにロードします。

このセクションでは、クイック カード ターゲット ページを作成します。これは、アプリ コネクト ディープ リンク URI を通じてクイック カードから起動されるページです。MVVM パターンに関して、このページはビューです。

クイックカードのターゲット ページの作成方法

  1. ソリューション エクスプローラーで、プロジェクトを右クリックし、[追加] を選択して、[新しい項目] をクリックします。

  2. [新しいアイテムの追加] ウィンドウで [Windows Phone ポートレート ページ] を選択し、ファイル名を「QuickCardTargetPage.xaml」に設定します。[追加] をクリックします。

  3. QuickCardTargetPage.xamlLayoutRoot という名前のグリッドを次のコードに置き換えます。

        <!--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>
    
    

    このページにおいて、ViewModel 内の AppConnectUriParameters という名前のオブザーバブル コレクションにListBox コントロールがバインドされています。ListBox では、2 つの TextBlock コントロールがオブザーバブル コレクション内の各パラメーターにバインドされています。TextBlock コントロールのうちの 1 つは ParamName プロパティにバインドされ、もう 1 つの 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 で、次のコードをページ クラスに追加します。

            // 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);
            }
    
    

    これによって ViewModel のプロパティが作成され、LoadUriParameters メソッドを呼び出せるようになります。ページの Loaded イベントのハンドラーで、NavigationContext QueryString プロパティが ViewModel に渡され、アプリ コネクト ディープ リンク URI からパラメーターが抽出可能になります。

このセクションでは、標準のアプリケーション起動のためのテキストをメイン ページに追加します。

アプリケーションを完成させるには

  • アプリケーションのメイン ページ 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>
    
    

    これにより、アプリケーションの構築が完了します。

このアプリケーションは、実際のクイック カードを参照する一助となるように設計されています。このセクションでは、アプリケーション マニフェスト ファイルで設定された拡張機能に関連付けられた製品、ムービー、および場所を検索します。クイック カードを見つけてからアプリケーションを起動し、アプリ コネクト ディープ リンク URI からアプリケーションに渡されたパラメーターを表示します。

クイック カードからアプリケーションを起動すると、デバッグの接続が中断されます。アプリケーションをデバッグするには、「アプリケーションのデバッグ」の手順に従います。

重要な注重要な注:

アプリケーションとクイック カードをテストするには、PC または Windows Phone デバイスからのインターネット接続が必要です。

製品カードとのテスト方法

  1. F5 キーを押して、アプリケーションをデバッグし、それをエミュレーターまたはデバイスに展開します。

  2. アプリケーションが読み込まれたら、ハードウェアの [検索] ボタンをタップして、Bing を開きます。

  3. Bing で、ビデオ ゲームのコンソール名など、ビデオ ゲーム製品に関連する検索用語を入力します。たとえば、「xbox 360」と入力すると、Xbox 360 に関連する製品カードが返されます。Bing_Products_Video_Games の拡張機能について製品カードをテストするには、次の 2 項目が必要です。

    • Bing によって、検索用語がビデオ ゲーム製品に関連すると見なされている必要があります。

    • 検索用語に関連する製品カードが既に Bing に存在しており、Bing_Products_Video_Games の拡張機能に関連付けられている必要があります。

  4. [Web] ピボット ページで、[製品] の見出しの下の製品を選択します。これにより、製品に関連するクイック カードが起動します。

    ヒントヒント:

    [製品] の見出しが表示されていない場合は、他の検索用語を試してみるか、または WMAppManifest.xml および Extras.xml ファイルに製品の拡張機能を追加します。すべての検索拡張機能については「Windows Phone の検索登録および起動参照」を参照してください。

  5. 製品のクイック カード上で [アプリ] ピボット ページをスワイプし、「URI パラメーターの表示」というタイトルのアプリケーションをタップします。キャプションは「製品 URI の詳細」となっています。

    注注:

    [アプリ] ピボット ページが表示されない場合は、その製品カードは WMAppManifest.xml および Extras.xml ファイルに示される製品の拡張に関連付けられていません。[戻る] ボタンをタップして他の製品カードを試してください。

  6. [アプリ] ピボット ページでアプリケーションをタップしてから、[QuickCardTargetPage.xaml] ページがその製品のアプリ コネクト ディープ リンク URI 内のパラメーターを表示するのを確認します。

ムービー カードとのテスト方法

  1. F5 キーを押して、アプリケーションをデバッグし、それをエミュレーターまたはデバイスに展開します。アプリケーションを既に展開済みの場合は、この手順はオプションです。

  2. アプリケーションが読み込まれたら、ハードウェアの [検索] ボタンをタップして、Bing を開きます。

  3. Bing で、「ムービー」、「映画館の映画」、近隣で上映中の映画のタイトルなど、映画館で現在上映中の映画に関連する検索用語を入力します。Bing_Movies の拡張機能についてムービー カードをテストするには、次の 2 項目が必要です。

    • Bing によって、検索用語が映画館で現在上映中の映画に関連すると見なされている必要があります。

    • 検索用語に関連するムービー カードが既に Bing に存在しており、Bing_Movies の拡張機能に関連付けられている必要があります。

  4. [Web] ピボット ページで、[Web] の見出しの上の検索結果に表示される映画を選択します。これにより、その映画に関連するクイック カードが起動します。

    注注:

    [Web] 見出しの上に映画が表示されていない場合は、他の検索用語を試してください。映画については他の拡張機能はありません。

  5. ムービーのクイック カード上で [アプリ] ピボット ページをスワイプし、「URI パラメーターの表示」というタイトルのアプリケーションをタップします。キャプションは「ムービー URI の詳細」となっています。

  6. [アプリ] ピボット ページでアプリケーションをタップしてから、[QuickCardTargetPage.xaml] ページがそのムービーのアプリ コネクト ディープ リンク URI 内のパラメーターを表示するのを確認します。

場所カードとのテスト方法

  1. F5 キーを押して、アプリケーションをデバッグし、それをエミュレーターまたはデバイスに展開します。

  2. アプリケーションが読み込まれたら、ハードウェアの [検索] ボタンをタップして、Bing を開きます。

  3. Bing で、「食事」や近隣のレストラン名など、食事やレストランに関連する検索用語を入力します。Bing_Places_Food_and_Dining の拡張機能について場所カードをテストするには、次の 2 項目が必要です。

    • Bing によって、検索用語が食事やレストランの場所に関連すると見なされている必要があります。

    • 検索用語に関連する場所カードが既に Bing に存在しており、Bing_Places_Food_and_Dining の拡張機能に関連付けられている必要があります。

  4. [近隣] ピボット ページ上で、表示された地図上の食事およびレストランの場所を選択します。これにより、その場所に関連するクイック カードが起動します。

    ヒントヒント:

    [近隣] ピボット ページに結果が表示されない場合は、他の検索用語を試してみるか、または WMAppManifest.xml および Extras.xml ファイルに場所の拡張を追加します。すべての検索拡張機能については「Windows Phone の検索登録および起動参照」を参照してください。

  5. 場所のクイック カード上で [アプリ] ピボット ページをスワイプし、「URI パラメーターの表示」というタイトルのアプリケーションをタップします。キャプションは「場所 URI の詳細」となっています。

    注注:

    [アプリ] ピボット ページが表示されない場合は、その場所カードは WMAppManifest.xml および Extras.xml ファイルに示される場所の拡張に関連付けられていません。[戻る] ボタンをタップして他の場所カードを試してください。

  6. [アプリ] ピボット ページでアプリケーションをタップしてから、[QuickCardTargetPage.xaml] ページがその場所のアプリ コネクト ディープ リンク URI 内のパラメーターを表示するのを確認します。

クイック カードからアプリケーションを再起動すると、デバッグ プロセスが中断されます。アプリケーションに対するアプリ コネクトの起動をデバッグするには、ディープ リンク URI をシミュレートする必要があります。これには、次の手順を実行して WPAppManifest.xml ファイルの DefaultTask 要素を一時的に置き換えます。

アプリケーションのデバッグ方法

  1. アプリケーション マニフェスト ファイル WPAppManifest.xml で、元の DefaultTask 要素に一時的にコメントをつけます。

    重要な注重要な注:

    元の DefaultTask 要素をコメント化すると、アプリケーションはメイン ページへの標準の起動を実行しません。デバッグ終了時には、この要素のコメント化を必ず解除する必要があります。

  2. WPAppManifest.xml で、Tasks 要素に次の一時的な DefaultTask 要素を追加します。

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

    この DefaultTask 要素は、"Test" という名前の映画に対してムービー カードをシミュレートします。

  3. F5 キーを押して、アプリケーションをデバッグし、それをエミュレーターまたはデバイスに展開します。

  4. アプリケーションが [QuickCardTargetPage.xaml] ページから直接起動し、Test という名前の映画のアプリ コネクト ディープ リンク 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>
    

表示:
© 2014 Microsoft