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

2014/06/18

対象: Windows Phone 8 および Windows Phone Silverlight 8.1 | Windows Phone OS 7.1

 

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

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

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

  1. UI を作成する

  2. App Instant Answer の起動を確認する

  3. アプリを完成させる

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

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

UI を作成するには

  1. Windows Phone SDK を開き、[Windows Phone アプリ ] テンプレートを使用して新しいプロジェクトを作成します。

  2. 新しいプロジェクトが読み込まれた後、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 app was not launched by an App Instant Answer." 
                    TextWrapping="Wrap" 
                    Style="{StaticResource PhoneTextSubtleStyle}"
                    Visibility="Collapsed"/>
                
            </StackPanel>
        </Grid>
    
    

    txtUriParameterName および txtUriParameterValue という名前の TextBlock コントロールには、App Instant Answer URI のパラメーター名と値が表示されます。この値は、アプリ起動のきっかけとなった検索キーワードに対応します。txtNoLaunch という名前の TextBlock には、アプリが App Instant Answer 以外から起動されたことを示すメッセージが表示されます。

  3. メイン ページの分離コード ファイル 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 によって Windows Phone アプリが検索結果と共にいつ表示されるかは制御できないので、App Instant Answer による起動をシミュレートする必要があります。

メモメモ:

開発したアプリが App Instant Answer によって検索結果と共に表示されるようにするには、アプリを Windows Phone ストア に申請する必要があります。

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

  1. アプリ マニフェスト ファイルを開きます。ソリューション エクスプローラーで、[プロパティ] を展開し、WMAppManifest.xml ファイルを探します。次に、ファイル名を右クリックし、[ファイルを開くアプリケーションの選択] をクリックし、[XML (テキスト) エディター] をクリックします。

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

  3. 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 が正常に動作しなくなります。一度にただ 1 つの DefaultTask 要素のみが存在できます。

  4. F5 キーを押してアプリをデバッグし、エミュレーターまたはデバイスに展開します。

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

  6. 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=Xbox+360+4+GB+Console+with+Kinect"/>-->
        </Tasks>
    
    
  7. F5 キーを押してアプリをデバッグし、エミュレーターまたはデバイスに展開します。

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

表示:
© 2015 Microsoft