Google Actions не работает с ОК Google. мое приложение не распознается

Я скачал этот базовый пример из Google: https://github.com/actions-on-google/appactions-fitness-kotlin

Теперь, если я сделаю:

adb shell am start -a android.intent.action.VIEW -d "https://fit-actions.firebaseapp.com/start"

Это запустит мое приложение. И глубокая ссылка признается. Пример показывает, что я могу сделать это, сказав в Google Assistant:

Start running in fit actions

Теперь я делаю это, но это только дает мне ответы поиска Google, оно не запускает мое приложение, похожее на команду оболочки adb. Я изменил имя пакета, чтобы оно соответствовало моим google-services.json файл.

Что я делаю неправильно?

Вот что я имею в своем Манифесте:

  <activity
        android:name=".activity.MainActivity"
        android:configChanges="orientation"
        android:exported="true"
        android:launchMode="singleTask"
        android:windowSoftInputMode="adjustResize|stateUnchanged">
        <!-- Required to support search action intents from Google Search -->
        <intent-filter>
            <action android:name="com.google.android.gms.actions.SEARCH_ACTION"/>

            <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>

        <!-- Define your supported deeplinks -->
        <intent-filter
            android:autoVerify="true">
            <action android:name="android.intent.action.VIEW"/>

            <category android:name="android.intent.category.DEFAULT"/>
            <category android:name="android.intent.category.BROWSABLE"/>

            <data
                android:host="com.package.android"
                android:scheme="https"/>
        </intent-filter>
    </activity>

Это мой actions.xml

 <?xml version="1.0" encoding="utf-8"?><!--

<actions>

<!-- This file describes the supported actions by this app -->

<action intentName="actions.intent.START_EXERCISE">

    <!-- Each action requires at least one fulfillment that defines how the app will handle this action -->
    <!-- Define the urlTemplate in the format you define your deeplinks in AndroidManifest.xml -->

    <fulfillment urlTemplate="https://com.package.android/start{?exerciseType}">

        <!-- Define how the actions parameters (intentParameter) is mapped in the urlTemplate above -->

        <parameter-mapping
            intentParameter="exercise.name"
            urlParameter="exerciseType"/>

    </fulfillment>

    <!-- We can define our custom inline inventory, mapping a parameter to an entity set reference -->

    <parameter name="exercise.name">
        <entity-set-reference entitySetId="ExerciseEntitySet"/>
    </parameter>

</action>

<action intentName="actions.intent.STOP_EXERCISE">
    <fulfillment urlTemplate="https://com.package.android/stop"/>
</action>

<action intentName="actions.intent.GET_EXERCISE_OBSERVATION">

    <!-- You can define the fulfillment mode, it can be SLICE or DEEPLINK -->
    <!-- When slice is used, make sure you are supporting slices in your app -->
    <!-- Also, not that the urlTemplate must be of the style content://{slice_provider_authority}/... -->

    <fulfillment
        fulfillmentMode="actions.fulfillment.SLICE"
        urlTemplate="content://com.package.android.FitSliceProvider/stats{?exerciseType}">

        <!-- If a parameter is set as required, the action will only be fulfilled if the parameter is found -->
        <!-- That's why a fallback urlTemplate needs to be provided for such case. -->

        <parameter-mapping
            entityMatchRequired="true"
            intentParameter="exerciseObservation.aboutExercise.name"
            required="true"
            urlParameter="exerciseType"/>

        <!-- Note, that for the parameter above we are setting entityMatchRequired="true" -->
        <!-- This tells the Assistant to only use the entity set values to map this parameter -->
        <!-- Meaning that even if the assistant know how to identify the exercise (i.e "Climbing") -->
        <!-- if it's not defined in our entity set, the parameter won't be use. -->

    </fulfillment>

    <!-- In case the exercise name is not found we fallback to the stats deep-link inside the app -->

    <fulfillment
        fulfillmentMode="actions.fulfillment.DEEPLINK"
        urlTemplate="https://com.package.android/stats"/>

    <!-- Same as the first action, we map the parameter name with out supported entity set. -->

    <parameter name="exerciseObservation.aboutExercise.name">
        <entity-set-reference entitySetId="ExerciseEntitySet"/>
    </parameter>

</action>

<!-- Defines an entity set with our supported entities -->

<entity-set entitySetId="ExerciseEntitySet">

    <!-- For each entity you can specify the name, alternate names and the identifier -->
    <!-- The identifier is the value that will be added to the action uri. -->
    <!-- For our sample we map the supported entities with the class FitActivity.Type  -->

    <entity
        name="@string/activity_running"
        alternateName="@array/runningSynonyms"
        identifier="RUNNING"/>
    <entity
        name="@string/activity_walking"
        alternateName="@array/walkingSynonyms"
        identifier="WALKING"/>
    <entity
        name="@string/activity_cycling"
        alternateName="@array/cyclingSynonyms"
        identifier="CYCLING"/>
</entity-set>

Если я попробую App Actions Test Tool v2.00, приложение не будет найдено. Упражнение также всегда возвращается к этому формату с http://schema.googleapis.com/

РЕДАКТИРОВАТЬ:

После настройки таких действий:

<actions>
<action intentName="actions.intent.OPEN_APP_FEATURE">
    <fulfillment urlTemplate="https://www.xelion.com/start{?feature}">
        <parameter-mapping
            intentParameter="featureType"
            urlParameter="feature"/>
    </fulfillment>

    <parameter name="featureType">
        <entity-set-reference entitySetId="EntitySet"/>
    </parameter>
</action>

<entity-set entitySetId="EntitySet">

    <!-- For each entity you can specify the name, alternate names and the identifier -->
    <!-- The identifier is the value that will be added to the action uri. -->
    <!-- For our sample we map the supported entities with the class FitActivity.Type  -->
    <entity
        name="@string/action_call"
        alternateName="@array/callSynopsis"
        identifier="CALL"/>

</entity-set>

Я получаю это при нажатии на предварительный просмотр обновления в App Action Test Tool:

App Actions Test Tool v2.0.0
        Preview Creation Error
        Status Code: 400
        Message: Precondition check failed.
        - Parameter name 'featureType' is invalid for intent 'actions.intent.OPEN_APP_FEATURE.'
        - Parameter name 'featureType' is invalid for intent 'actions.intent.OPEN_APP_FEATURE.'

Любая идея почему?

1 ответ

Решение

Сначала необходимо запустить действие с помощью подключаемого модуля тестирования действий приложения: https://plugins.jetbrains.com/plugin/12322-app-actions-test-tool

Установив плагин, вы найдете его в разделе "Инструменты" и сможете определить имя вызова для вашего приложения + параметры.

С этого момента вы можете запустить его, используя "Ok Google".

Другие вопросы по тегам