APL 1.3の新機能



APL 1.3の新機能

Alexa Presentation Language 1.3では、APLに新機能が追加されました。

新しいレスポンシブ対応コンポーネントとテンプレート

新しいレスポンシブ対応コンポーネントとテンプレートを使用して、APLレスポンシブ対応ドキュメントを作成します。この新しいコンポーネントとテンプレートを使用するには、alexa-layoutsパッケージをドキュメントに読み込みます。versionには、必ず1.1.0を指定してください。

{
  "import": [
    {
      "name": "alexa-layouts",
      "version": "1.1.0"
    }
  ]
}

コンポーネントとテンプレートの概要については、レスポンシブ対応コンポーネントとテンプレートを参照してください。

新しいレスポンシブ対応コンポーネントについて詳しくは、以下を参照してください。

新しいレスポンシブ対応テンプレートについて詳しくは、以下を参照してください。

遅延読み込みと動的データソース

ユーザーが大きなリストのコンテンツをスクロールして、その項目を順次読み込むには、遅延読み込みを使用します。これにより、Alexaにすべてのデータを一度に送信するのではなく、データソースを「断片的」な形にして送信できます。

またデータソースをAlexaに送信した後でも、更新できるようになりました。項目の追加、編集、削除を臨機応変に行い、ユーザーに表示されるデータを変更できます。

この2つの機能では、データで新しいdynamicIndexListデータソースタイプを使用します。次に、新しいAPLディレクティブとリクエストを使用して、必要に応じてスキルコードから、より多くのデータとデータソースの更新を送信します。詳細については、以下のドキュメントを参照してください。

データバインディング式でのデータソースへのアクセスの簡素化

データソースをドキュメントにバインドするために、mainTemplate.parameters配列でデータソース用のキーを指定できるようになりました。キーを指定すると、データバインディング式を簡素化できます。

たとえば、1.3より前のバージョンでは、mainTemplate.parametersを次のように設定します。

{
  "type": "APL",
  "version": "1.2",
  "mainTemplate": {
    "parameters": [
      "payload"
    ],
    "items": []
  }
}

次に、以下のようなデータバインディング式を記述します。

${payload.myDocumentData.title}

1.3では、mainTemplate.parametersを次のように設定します。

{
  "type": "APL",
  "version": "1.3",
  "mainTemplate": {
    "parameters": [
      "myDocumentData"
    ],
    "items": []
  }
}

次に、以下のようなデータバインディング式を記述します。

${myDocumentData.title}

mainTemplate.parametersとして "payload"を使用するドキュメントは、引き続き機能します。ただし、新しいAPLドキュメントには、簡略化したフォームを使用することをお勧めします。パラメーターとして他の文字列を使用しても機能しません。データソースキーまたは "payload"を使用する必要があります。

ドキュメントでdynamicIndexListデータソースを使用するには、mainTemplate.parameterでデータソースキーを使用する必要があります。1.3より前の "payload"パラメーターは使用しないでください。

データソースについて詳しくは、APLデータソースとトランスフォーマーを参照してください。

更新情報

APLドキュメントのプロパティ

ドキュメントで、次の新しいプロパティを指定できるようになりました。

  • backgroundプロパティ – ドキュメントの背景色またはグラデーションを指定できるようになりました。設定すると、ドキュメントを読み込むときに、デバイスはこの色またはグラデーションを使用します。このプロパティは、最初のデータバインディングコンテキストのプロパティにアクセスできますが、データソースやドキュメントリソースのデータにはアクセスできません。
  • export – ドキュメントをパッケージとして読み込むときに、他のユーザーが使用するドキュメントの要素を特定できるようになりました。検証およびオーサリングツールでは、export情報を使用して、APL作成者が適切に構成されたドキュメントを作成できるようにします。

コマンド

次の新しいコマンドを使用できます。

  • Selectはコマンドとデータの配列から、1つのコマンドを選択します。
  • Finishは現在のAPLドキュメントを閉じて、スキルを終了します。

クロックとタイマーの変数と関数

データバインディングコンテキストには、時間を取得するための新しい上位レベルの変数が含まれるようになりました。

データバインディングコンテキストには、Timeオブジェクトも含まれています。これは、時間を操作およびフォーマットするための組み込みのTime関数のコレクションです。

APLのバージョンを指定する

APLドキュメントで、version"1.3"に設定します。

APLの最新バージョンをサポートしていない古いデバイスで、スキルが呼び出される場合があります。特定のバージョンのAPLで導入された機能を使用する場合は、それ以前のバージョンのAPLを実行しているデバイス向けに代替機能を提供してください。データバインディングコンテキストenvironment.aplVersionプロパティを使用すると、デバイスのAPLのバージョンを取得できます。このプロパティでは、APL 1.0についてはnullが、APL 1.1以降では実際のバージョン番号が返されます。このプロパティをwhenステートメントで使用すると、バージョンに基づく条件付きブロックを作成できます。

たとえば、次のようにすると、APL 1.1以降を使用しているデバイスではVectorGraphicを、APL 1.0を使用しているデバイスでは画像(Image)をレンダリングできます。

[
  {
    "type": "Image",
    "when": "${environment.aplVersion == null}",
    "width": 100,
    "height": 100,
    "source": "https://example.com/alternate/image/for/older/versions.jpg"
  },
  {
    "type": "VectorGraphic",
    "when": "${environment.aplVersion != null}",
    "source": "lightbulb",
    "width": 100,
    "height": 100,
    "scale": "best-fit"
  }
]

APLのバージョンは、スキルに送信されるリクエストにも含まれています。

context.System.device.supportedInterfaces.['Alexa.Presentation.APL'].runtime.maxVersion

次の例は、APL 1.3に対応したデバイスからのリクエストを示しています。短くするために、sessionrequestviewportの各プロパティは省略しています。

{
  "version": "1.0",
  "session": {},
  "context": {
    "System": {
      "application": {
        "applicationId": "amzn1.ask.skill.1"
      },
      "user": {
        "userId": "amzn1.ask.account.1"
      },
      "device": {
        "deviceId": "amzn1.ask.device.1",
        "supportedInterfaces": {
          "Alexa.Presentation.APL": {
            "runtime": {
              "maxVersion": "1.3"
            }
          }
        }
      },
      "apiEndpoint": "https://api.amazonalexa.com",
      "apiAccessToken": "eyJ..."
    },
    "Viewport": {}
  },
  "request": {}
}

以前のバージョンのAPL