スキルサービスでのAPL Viewport特性



スキルのLambda関数でのAPL Viewport特性

スキルサービスに送信されたリクエストには、デバイスがAPLをサポートしている場合、viewport特性が含まれます。スキルコードのこの情報を使用して、デバイスの表示特性に依存する、カスタマイズした応答を作成できます。詳細については、Viewportプロパティを参照してください。

このリクエストのViewportオブジェクト

viewportの詳細は、スキルリクエストのcontext.Viewportオブジェクトで確認できます。

{
    "version": "1.0",
    "session": { 
        ...
    },
    "context": {
        "AudioPlayer": {
            "playerActivity": "IDLE"
        },
        "Display": {
            "token": "listToken"
        },
        "Viewport": {
           "experiences": [
               {
                   "canRotate": true,
                   "canResize": true
               },
               {
                   "canRotate": false,
                   "canResize": false
               }
           ],
           "shape": "RECTANGLE",
           "pixelWidth": 1024,
           "pixelHeight": 600,
           "dpi": 160,
           "currentPixelWidth": 640,
           "currentPixelHeight": 500,
           "touch": [ "SINGLE" ],
           "keyboard": [ "DIRECTION" ],
           "video": {
              "codecs": ["H_264_42", "H_264_41"]
           }
        },
        "System": {
            ...
        }
    },
    "request": {
        ...
    }
}

プロパティ

viewportオブジェクトでは、次のプロパティが定義されています。

プロパティ 型/値 説明
experiences experienceオブジェクトの配列 ユーザーがviewportととの対話で求めている別のモードです。
shape ROUNDまたはRECTANGLE viewportの形状です。
pixelHeight 整数 ピクセル単位のviewportの高さです。
pixelWidth 整数 ピクセル単位のviewportの幅です。
currentPixelWidth 整数 現在使用しているピクセル単位のviewportの幅です。
currentPixelHeight 整数 現在使用しているピクセル単位のviewportの高さです。
dpi 整数 viewportのピクセル密度です。
touch 文字列の配列 viewportがサポートするタッチイベントです。
keyboard 文字列の配列 viewportとの対話で使用する入力メカニズムです。
video オブジェクト デバイスでのビデオ再生に使用できる技術の仕様

エクスペリエンス

experiencesプロパティには、デバイスがサポートしているエクスペリエンスのタイプのリストが含まれています。エクスペリエンスのタイプは、viewportがサポートするモードによって異なります。この情報を使用して、特定のエクスペリエンスでのスキルの動作を最適化できます。たとえば、タブレットデバイスには2つの異なるエクスペリエンスがあります。1つは、タブレットがドックに装着されている場合、もう1つはユーザーがタブレットを手に持っている場合です。これらの場合、スキルの表示応答は両方のエクスペリエンスに最適化される必要があります。デバイスの所有者は自由にエクスペリエンスを切り替えることができるようにするためです。

experienceプロパティ

プロパティ 型/値 説明
canRotate ブール値 viewportが90、180、270度回転できるかどうかを示します。
canResize ブール値 viewportのサイズが変更できるかどうかを示します。

pixel高さおよび幅

pixelHeightおよびpixelWidthプロパティは、高さと幅が上限の場合にviewportで表示されるピクセル数を表します。これらの値は静的なデバイスの向きとみなされ、viewportの領域が現在他のアプリケーションで使用されているかいないかに関係なく、viewport全体のサイズを表します。

現在のpixel幅および高さ

currentPixelWidthおよびcurrentPixelHeightプロパティはAlexaがエクスペリエンスをレンダリングできる縦横のピクセル数を表します。これらの値も静的なデバイスの向きとみなされます。

形状

画面のshapeは、ROUNDまたはRECTANGLEのどちらかに設定されています。

dpi

画面非依存ピクセル(dp)は、携帯電話を見るときの距離で画面を持ち、画面のピクセル密度が1インチ(3cm)あたり約160ピクセルであると仮定した場合の画面のビジュアルサイズを表す測定単位です。物理的な大きさが同じ2つの画面を同じ距離から見た場合、画面の実際のピクセル密度にかかわらず、2つの画面のdpディメンションはほぼ同じになります。

viewportのdpi(インチあたりのドット数)とは、人が見たとおりのポイントまたはピクセルのサイズを表した値であり、画面の実際のインチあたりのピクセル数とは異なります。dpiを求める公式は次のとおりです。

dpi = 160 * (ピクセルサイズ/dpサイズ)

簡略化のため、dpiの値は120、160、240、320などのバケットにまとめられています。

タッチ

touchプロパティは、デバイスがサポートするタッチ入力の種類を表します。touch配列には、次の値を含めることができます。

  • SINGLE - デバイスがシングルタッチ入力をサポートしていることを示します

キーボード

keyboardプロパティは、viewportとの対話に使用できる物理ボタン入力メカニズムを表します。keyboard配列には、次の値を含めることができます。

  • DIRECTION - ボタンと同様に、現在の位置で選択する上下左右方向の入力があります。

ビデオ

videoプロパティは、デバイスでのビデオ再生に使用できる技術を詳細に指定します。videoプロパティを使用して、APL応答に送信するビデオリソースの種類を決定します。たとえば、スキルのAPL応答が、デバイスがサポートするビデオコーデックのレベルに応じて、異なるエンコードのビデオリソースを返す場合があります。

画面付きのデバイスでも、ビデオ再生をサポートしていないものもあることに注意してください。この場合、videoプロパティはありません。スキルにビデオが含まれる場合、このプロパティを確認して、ビデオをサポートしていないデバイス向けに適切なエクスペリエンスを提供するようにしてください。ビデオをサポートしていないデバイスにVideoを送信する場合は、そのコンポーネントは画面上に表示されていますが、コンテンツは表示されないため、ユーザーには画面に空白の領域が見えることになります。

videoプロパティ

プロパティ 型/値 説明
codecs 文字列の配列

出力デバイスがサポートするビデオコーデックです。サポートされる値:

  • H_264_41: 最大解像度1080p @ 30fps(コーデックレベル4.1)のH.264、および主機能および高機能プロファイルをサポート(MPおよびHP)
  • H_264_42: 最大解像度1080p @ 60fps(コーデックレベル4.2)のH.264、および主機能および高機能プロファイルをサポート(MPおよびHP)

H_264_41H_264_42のサブセットです。H_264_42を指定するすべてのスキルリクエストは、H_264_41も指定します。すべてのビデオ再生可能なデバイスは、AACおよびMP3オーディオコーデックと共にMPEG-4 Part-14コンテナ(MP4)もサポートしています。

コードのviewport情報にアクセスする

Alexa Skills Kit SDKsには、スキルのリクエストからviewport情報を取得する、ヘルパー関数が含まれます。getViewportProfileメソッドは、context.Viewport内で複数の判断基準を確認して、viewportプロファイルパッケージで使用できるviewportプロファイルに対応する値を返します。

  • HUB-ROUND-SMALL
  • HUB-LANDSCAPE-SMALL
  • HUB-LANDSCAPE-MEDIUM
  • HUB-LANDSCAPE-LARGE
  • TV-LANDSCAPE-XLARGE
  • UNKNOWN-VIEWPORT-PROFILE

クリップボードにコピーされました。

このサンプルコードはAlexa Skills Kit SDK for Node.js (v2)を使用しています。 このコードを含む完全な作業用サンプルは、次を参照してください: APL Pager Karaokeサンプル

ハンドラーでは、以下のようにgetViewportProfileにアクセスします。

const Alexa = require('ask-sdk-core');

//...他のコード

const viewportProfile = Alexa.getViewportProfile(handlerInput.requestEnvelope);

// HUB_LANDSCAPE_LARGEなどのViewportProfileを返します。

クリップボードにコピーされました。

このサンプルコードはAlexa Skills Kit SDK for Pythonを使用しています。 このコードを含む完全な作業用サンプルは、次を参照してください: APL Pager Karaokeサンプル

ハンドラーでは、以下のようにget_viewport_profileにアクセスします。

from ask_sdk_core.utils import viewport

# other code...

viewport.get_viewport_profile 

# Returns a ViewportProfile such as viewport.ViewportProfile.HUB_LANDSCAPE_MEDIUM

クリップボードにコピーされました。

このサンプルコードはAlexa Skills Kit SDK for Javaを使用しています。 このコードを含む完全な作業用サンプルは、次を参照してください: APL Pager Karaokeサンプル

ViewportUtils静的クラスを使用して、viewport情報を取得してください。以下のコードは、ViewportProfile列挙値から値を返します。

ViewportProfile viewportProfile = ViewportUtils
    .getViewportProfile(input.getRequestEnvelope());