方法: Windows Phone の App Instant Answer と統合する

2012/02/09

Windows Phone 7.5 では、Windows Phone アプリケーションを App Instant Answer から起動することができます。App Instant Answer とは、Windows Phone アプリケーションへのリンクを検索結果と共に表示する機能です。App Instant Answer から起動されたアプリケーションは、起動のきっかけとなった検索キーワードを特定できるので、そのキーワードを使用してリッチなユーザー エクスペリエンスを作ることができます。

このトピックでは、基本的なアプリケーションの作成方法を通して、アプリケーションが App Instant Answer によって起動されたかどうか、および対応する検索キーワードを特定する方法を説明します。また、App Instant Answer による起動をシミュレートする方法も説明します。アプリケーションと検索エクスペリエンスとを統合するためのその他の方法については、「Windows Phone の検索の機能拡張の概要」を参照してください。

このトピックでは、次の主な手順について説明します。

  1. UI の作成

  2. App Instant Answer によって起動されたかどうかを調べる

  3. アプリケーションの完成

  4. App Instant Answer による起動をシミュレートする

注注:

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

このセクションでは、App Instant Answer のパラメーターと値を表示する基本的な UI を作成します。アプリケーションが App Instant Answer によって起動されたのではない場合は、そのことを示すメッセージを表示します。対応する TextBlock コントロールを閉じるか展開するかは、アプリケーションがどのように起動されたかに応じて決定します。

UI を作成するには

  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. 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="APP INSTANT ANSWER EXAMPLE" 
                    Style="{StaticResource PhoneTextNormalStyle}"/>
                <TextBlock 
                    x:Name="PageTitle" 
                    Text="URI details" 
                    Margin="9,-7,0,0" 
                    Style="{StaticResource PhoneTextTitle1Style}"/>
    
                <!-- Made visible when app is launched by App Instant Answer, otherwise collapsed. -->
                <TextBlock
                    x:Name="txtUriParameterName"
                    Text="bing_query" 
                    TextWrapping="Wrap" 
                    Style="{StaticResource PhoneTextExtraLargeStyle}"
                    Visibility="Collapsed"/>
                <TextBlock
                    x:Name="txtUriParameterValue"
                    Text="URI parameter value here" 
                    TextWrapping="Wrap" 
                    Style="{StaticResource PhoneTextAccentStyle}"
                    Visibility="Collapsed"/>
    
                <!-- Made visible when app is not launched by App Instant Answer, otherwise collapsed. -->
                <TextBlock
                    x:Name="txtNoLaunch"
                    Text="This application was not launched by an App Instant Answer." 
                    TextWrapping="Wrap" 
                    Style="{StaticResource PhoneTextSubtleStyle}"
                    Visibility="Collapsed"/>
                
            </StackPanel>
        </Grid>
    
    

    TextBlock コントロール txtUriParameterNametxtUriParameterValue に、App Instant Answer URI のパラメーター名と値を表示します。この値は、アプリケーション起動のきっかけとなった検索キーワードを表します。txtNoLaunch という名前の TextBlock には、App Instant Answer によってアプリケーションが起動されたのではないことを示すメッセージを表示します。

  8. メイン ページの分離コード ファイル MainPage.xaml.cs の中で、次のコードを MainPage コンストラクターに追加します。

                // Configure event handler for page Loaded event.
                this.Loaded += new RoutedEventHandler(MainPage_Loaded);
    
    

    ページが読み込まれたときに、このコードによって MainPage_Loaded イベントが呼び出されます。このメソッドは、この後で作成します。

このセクションでは、起動 URI の中に bing_query URI パラメーターが存在するかどうかを調べるコードを追加します。bing_query が存在する場合は、アプリケーションが App Instant Answer から起動されたことになります。そうでない場合は、アプリケーションは標準の方法で起動されています。

App Instant Answer によって起動されたかどうかを調べるには

  • MainPage.xaml.cs で、次のコードを MainPage クラスに追加します。

            void MainPage_Loaded(object sender, RoutedEventArgs e)
            {
                try
                {
                    // Try to obtain App Instant Answer URI parameter & value.
                    string tempSearchTerms = NavigationContext.QueryString["bing_query"];
    
                    // Show App Instant Answer URI parameter and value.
                    ShowUriParameter(tempSearchTerms);            
                }
                catch
                {
                    // Hide App Instant Answer URI parameter and value.
                    HideUriParameter();
                }
            }
    
    

    bing_query パラメーターが起動 URI の中に存在する場合は、NavigationContext.QueryString を呼び出すと、起動のきっかけとなった検索キーワードが返されます。ShowUriParameter および HideUriParameter は、次の手順で作成するヘルパー メソッドです。

このセクションでは、UI 要素を閉じるための、および展開して表示するためのヘルパー メソッドを作成します。これらのメソッドは、アプリケーションがどのように起動されたかに応じて呼び出されます。

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

  • MainPage.xaml.cs で、次のコードを MainPage クラスに追加します。

            void ShowUriParameter(string searchTerms)
            {
                // Hide message that app was not launched by App Instant Answer.
                txtNoLaunch.Visibility = Visibility.Collapsed;
    
                // Show URI parameter and value.
                txtUriParameterName.Visibility = Visibility.Visible;
                txtUriParameterValue.Visibility = Visibility.Visible;
                txtUriParameterValue.Text = searchTerms;
            }
    
            void HideUriParameter()
            {
                // Show message that app was not launched by App Instant Answer.
                txtNoLaunch.Visibility = Visibility.Visible;
    
                // Hide URI parameter and value.
                txtUriParameterName.Visibility = Visibility.Collapsed;
                txtUriParameterValue.Visibility = Visibility.Collapsed;
            }
    
    

このセクションでは、App Instant Answer からのアプリケーション起動をシミュレートするようにアプリケーション マニフェスト ファイルを変更します。App Instant Answer による起動のシミュレートが必要であるのは、いつ App Instant Answer によって Windows Phone アプリケーションが検索結果と共に表示されるかを制御するのが不可能であるからです。

注注:

開発したアプリケーションが App Instant Answer によって検索結果と共に表示されるようにするには、アプリケーションを Marketplace で公開する必要があります。

App Instant Answer による起動をシミュレートするには

  1. アプリケーション マニフェスト ファイル WMAppManifest.xml の中の DefaultTask 要素をコメントにします。この要素は、標準のアプリケーション起動を指定するものです。

  2. WMAppManifest.xml の中の Tasks 要素に次のコードを追加します。

          <!-- To simulate App Instant Answer launch from search terms "Xbox 360 4 GB Console with Kinect" -->
          <DefaultTask  Name ="_default" NavigationPage="MainPage.xaml?bing_query=Xbox 360 4 GB Console with Kinect"/>
    
    

    この DefaultTask 要素は、Bing 検索で "Xbox 360 4 GB Console with Kinect" というキーワードが指定されたときの App Instant Answer による起動をシミュレートするものです。

    注意点注意:

    デバッグが完了したら、アプリケーションが標準起動を実行できるように、元の DefaultTask 要素のコメント化を解除してください。この要素がコメント化されているときは、実際の App Instant Answer が正常に動作しなくなります。2 つ以上の DefaultTask 要素が同時に存在していてはなりません。

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

  4. アプリケーションが起動してメイン ページが開き、DefaultTask 要素で指定された bing_query パラメーターと検索キーワードが表示されることを確認してください。

  5. WMAppManifest.xml に追加した一時的な DefaultTask 要素をコメント化し、元の要素のコメント化を解除します。終了すると、Tasks 要素は次のコードのように見えるはずです。

        <Tasks>
          <DefaultTask  Name ="_default" NavigationPage="MainPage.xaml"/>
          
          <!-- To simulate App Instant Answer launch from search terms "Xbox 360 4 GB Console with Kinect" -->
          <!--<DefaultTask  Name ="_default" NavigationPage="MainPage.xaml?bing_query=simulated search terms"/>-->
        </Tasks>
    
    
  6. F5 キーを押して、アプリケーションをデバッグし、それをエミュレーターまたはデバイスに展開します。

  7. アプリケーションが起動して、メイン ページに標準起動を表すメッセージが表示されることを確認します。

表示: