从 Fire TV UI 深层链接到特色内容


从 Fire TV UI 深层链接到特色内容

深层链接是指绕过应用主页,直接将用户定向到应用内的特定内容的链接。在广告情景中,深层链接将用户从广告位置带到广告中推广的确切内容,假定用户已经下载了您的应用。要设置深层链接,您必须提供指向内容的已编码深层链接意图。然后,亚马逊将在您的市场活动中实现此深层链接意图。

深层链接将用户从 Fire TV 操作系统带到 Fire TV 上的应用中的特定目标位置。在特色内容上下文中,深层链接将用户带到正在推广的内容。

例如,如果“ACME 媒体”的广告位置宣传足球季后赛,则点击足球季后赛位置的任何 ACME 客户都将直接转到应用内该足球季后赛的页面,在那里他们可以观看比赛或录制比赛以供日后观看。

如果客户之前未在 Fire TV 上下载您的应用,该市场活动会将用户带入您的应用详情页面,用户可以选择下载并打开您的应用。用户下载并打开您的应用后,他们将直接转到市场活动中推广的内容。

总体而言,深层链接为 Fire TV 上显示的精选内容提供了更高的即时性和连续性,因为深层链接提供了从市场活动中显示的内容到应用中相同内容的目的地的无缝过渡。

Fire TV 上的深层链接的新功能

以前,当客户点击 Fire TV 上的特色内容时,他们会被带到该应用的详情页面,即使他们已经下载了该应用。最近的技术发展使得深层链接到应用内的内容成为可能。

先决条件

您将需要使用 Android Studio 和 adb 来生成编码的深层链接意图。adb 默认情况下随 Android Studio 一起安装。如果您刚接触 adb,并且需要有关设置它的更多信息,请参阅安卓文档中的安卓调试桥 (adb)

您需要通过在一个简单的应用中自定义一些代码来生成编码的深层链接意图。深层链接意图的自定义将取决于 adb 命令中使用的参数。要生成内容的编码深层链接意图,请遵循以下两部分。

步骤 1: 创建用于深层链接到您的媒体的 adb 命令

如果您已经知道媒体的深层链接意图值,可以直接进入下一部分,步骤 2: 使用 Android Studio 编码您的深层链接意图。但是,您仍然应该配置 adb 命令来测试值是否会显示媒体,因为在提交之前没有其他方法可以测试深层链接意图。

要为媒体创建 adb 命令,请执行以下操作:

  1. 创建一个 adb 命令,提供您的深层链接意图。例如,用于播放媒体的 adb 命令可能如下所示:

    adb shell am start -a android.intent.action.VIEW -n air.ACMEMobilePlayer/.ACMEActivity -d http://app.site.acme.com/amazonfiretv/?channel=acme
    

    在安卓中,深层链接可以用不同的方式构建,每个应用选择构建深层链接的方式仅为该应用所知。您可以在命令中使用不同的参数和组件。您的 adb 命令通常使用 adb shell am start 和几个参数:

    • -a(动作)- 指定意图动作
    • -n(程序包 + 组件)- 指定程序包和组件名称
    • -d(数据 URI)- 指定意图数据 URI

    有关传递给 adb 的参数的说明,请参阅安卓文档中的意图参数的规范。有关创建深层链接的更多一般信息,请参阅创建应用内容的深层链接

  2. 将 adb 连接到 Fire TV 并运行 adb 命令。(有关连接的帮助,请参阅通过 adb 连接到 Fire TV。)
  3. 确保您的 Fire TV 上显示正确的媒体。(如果 adb 命令失败,那么您在下一节中生成的编码深层链接也将失败。)

您需要将 adb 命令(深层链接意图)转换为编码字符串。要做到这一点,您需要下载一个简单的安卓应用。该应用有一个包含各种方法的类,您将根据需要自定义这些方法。在应用中,您将从 adb 命令中获取参数并将其存储在名为 amazonIntent 的对象中。

将您的所有 adb 参数添加到 amazonIntent 中后,toURI 方法会将此 amazonIntent 对象转换为编码的 URI 字符串。编码的 URI 字符串包含来自 adb 命令的所有信息(动作、程序包、组件、标记、额外信息等)。运行安卓应用时,编码的 URI 字符串会在 Logcat 控制台中输出。

要在 Android Studio 中生成编码的深层链接意图,请执行以下操作:

  1. 下载这个简单的安卓应用:toURI。下载后,解压缩它。
  2. 打开 Android Studio 并打开 toURI 应用。(当您打开应用时,Android Studio 将自动更新安卓 SDK 的位置。)

  3. MainActivity.java 文件(在 app/java/com/example/touri 内)中,根据注释中的描述自定义代码。有六个部分可以自定义。

    package com.example.touri;
    
    import android.content.ComponentName;
    import android.content.Intent;
    import android.net.Uri;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.util.Log;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
    // 1.指定应用的 ASIN。(如果您不知道您的 ASIN,请转到
    // 亚马逊应用商店中您的应用。ASIN 显示在商品详情下。)
            String asin = "B123ABC456";
    
    // 将以下行保持原样。在这里,您正在创建一个名为
    // amazonIntent 的新意图对象,您将在其中存储您的 adb 命令的所有参数。
    
            Intent amazonIntent = new Intent();
    
    // 2.指定操作。在 adb 命令中,从 -a 参数中获取值
    // 并将其作为参数插入到下面的方法中,替换
    // android.intent.action.VIEW。如果您的 adb 命令中没有 -a 参数,// 将现有值保持原样(不要注释掉)。
    
            amazonIntent.setAction("android.intent.action.VIEW");
    
    // 3.指定任何标记。在 adb 命令中,从 -f 参数中获取值
    // 并将其作为参数插入到下面的方法中,替换
    // Intent.FLAG_ACTIVITY_SINGLE_TOP。然后取消注释行。如果 adb 命令中没有任何
    // 标记,请跳过此部分。
    
            //amazonIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    
    // 4.指定类和组件。在 adb 命令中,从 
    //-n 参数获取值并将其作为参数插入到下面的 ComponentName 方法中。在
    // adb 命令中,一个斜杠将程序包名称与组件分隔开来。在
    // 这里的参数格式中,用一个逗号后跟显示的格式
    // 将程序包与组件分开。如果您没有 -n 参数,请跳过此部分。
    
            //amazonIntent.setComponent(new ComponentName("tv.acme.android","tv.acme.android.leanback.controller.LeanbackSplashOnboardActivity"));
    
    // 5.指定任何额外信息。在 adb 命令中,从 -e 参数中获取值
    // 并将它作为参数插入到下面 .putExtra 方法中,遵循
    // 显示的键值对格式。如果您没有 -e 参数,请跳过此部分。
    
            //amazonIntent.putExtra("acme_id", 12345);
    
    // 6.指定数据。在 adb 命令中,从 -d 参数中获取值并
    // 将它作为参数插入到下面的 .Uri.parse 方法中。(这假定您的
    // 内容 ID 是一个 URI。) 如果您的 adb 命令中没有 -d 参数,请跳过
    // 此部分。
    
            //amazonIntent.setData(Uri.parse("https://www.acme.com/some/show/rrn:content:shows:123456789"));
    
            Intent DeepLinkIntent = new Intent(Intent.ACTION_VIEW, android.net.Uri.parse("amzns://apps/android?asin=" + asin));
            DeepLinkIntent.putExtra("intentToFwd", amazonIntent.toURI());
            Log.i("amazon_intent=", DeepLinkIntent.toURI());
        }
    
     // 完成 1 到 6 中列出的任何自定义后,运行您的应用(在任何
     // 模拟器或设备上)// 并打开 Logcat 来筛选“amazon”。您的编码深层
     // 链接意图将在那里显示。
    }
    
  4. 完成自定义代码后,单击运行应用按钮运行“应用”并在任何设备(任何模拟器或连接的 Fire TV 设备等)上运行应用。
  5. 打开 Logcat 并筛选单词“amazon”。该值显示在“amazon_intent=:”之后。

    筛选 amazon 以获取编码的深层链接意图
    筛选 amazon 以获取编码的深层链接意图

    该值将是一个编码的字符串,如下所示:

    amzns://apps/android?asin=B123ABC456#Intent;S.intentToFwd=https%3A%2F%2Fwww.acme.com%2Fsome%2Fshow%2Frrn%3Acontent%3Ashows%3A123456789;end
    
  6. 复制该值并将其发送给您的亚马逊代表。

大多数情况下,用户将单击市场活动,您的应用中的媒体将打开并播放。但是,您应该处理深层链接可能在用户打开应用之前已被破坏的情况,或者(出于任何原因)深层链接中的媒体不可用的情况。在这种情况下,您可能会决定将用户带到您的主页。

下图显示了深层链接可能被破坏的情况。

深层链接的工作流程
深层链接的工作流程

单击市场活动后,如果用户没有应用,则会转至应用详情页面,其中包含下载应用的选项。只要应用详情页面保持活动状态,深层链接意图就将存储在内存中。 (这就是所谓的“延迟深层链接”。)但是,如果用户离开详情页面,则存储的意图数据将被删除。

例如,假设用户安装了应用,但在打开应用之前,用户导航到别处(可能是用户没有耐心等待下载完成)。当用户返回并打开应用时,深层链接内容已经被删除,因为用户离开了应用详情页面。在这些情况下,请将用户带到您的主页。

常见问题解答

如何在我的应用中实现深层链接功能?
有关更多详细信息,请参阅安卓文档中的创建应用内容的深层链接
如何判断我的应用是否已准备好进行深层链接?
如果您可以通过 adb 命令(深层链接意图)在应用中播放媒体,则您的应用已准备就绪,无需更新。
如何知道我的深层链接在 Fire TV 上是否起作用?
您可以将 adb 连接到 Fire TV 并运行 adb 命令,以确保您的 Fire TV 上会显示正确的媒体,如步骤 1 所述。如果您的 adb 命令正常工作,并且您按照有关生成编码的深层链接字符串的说明操作,则深层链接应该起作用。亚马逊还将使用内部工具测试深层链接。您没有办法自行测试编码的深层链接意图。
如果用户尝试打开已被破坏的深层链接,或者深层链接指向已移动或丢失的媒体,应用会如何表现?
链接应正常失败,例如显示应用的默认主页。
你们是否支持延迟深层链接?
是。​延迟深层链接是在应用中缓存特定目标的机制,即使用户尚未下载应用,在用户首次下载并打开应用时,也会将用户转移到应用中缓存的该特定目标。在本文档中,所有对“深层链接”的引用都同时包括深层链接和延迟深层链接。仅当用户在完成下载和打开应用之前没有离开应用详情页面时,延迟深层链接才起作用。