开发者控制台

Fire TV上的Amazon Device Messaging (ADM) 和本地通知

Kevin Tsang Jul 21, 2021
Share:
Fire TV How to
Blog_Header_Post_Img

目前,亚马逊Fire TV通过Android通知API支持标准的Android通知,使用该API开发者可以向客户发送出现在应用用户界面之外的本地通知。如今,应用开发者向智能手机用户发送通知以吸引其注意是很常见的做法。

同样,在Fire TV上的通知可以让开发者联系您的客户,促使该客户重新访问您的应用。当您的应用中有新功能、内容或推广市场活动时,您可以使用通知来告知客户。

这篇博客文章将向您介绍几种类型的通知和客户体验,如何通过Amazon Device Messaging (ADM) 发送服务器消息,以及如何通过Android通知API将该消息转换为Fire TV上的本地通知。

注意:​请注意,ADM需要将消息从后端推送到亚马逊Fire OS设备,包括Fire TV和Fire平板电脑。

本地通知

Fire TV上支持的本地通知类型有3种:

  • 提醒通知
  • 标准通知
  • toast


1.提醒通知

默认情况下,当有新的应用或新的更新应用可用时,Fire TV会向客户发送通知。您还可以使用Android通知API向客户发送提醒通知,并将通知优先级指定为高。

这是您需要引用的方法:

Copied to clipboard
.setPriority(NotificationCompat.PRIORITY_HIGH)

Fire TV显示的提醒通知与标准Android通知略有不同。有关Fire TV上提醒通知的用户体验,请参阅以下内容:

ADM notification

2.标准通知

当开发者未指定通知优先级时,将发送标准通知。标准通知将存储在Fire TV设置下的通知中心内。这些通知不会以平视显示的形式示出,因此当客户使用不同的应用或浏览Fire TV主用户界面时,不会以任何可见的方式中断用户体验。

Fire TV上通知中心的外观如下:

ADM standard notification

3.toast

toast是一个小弹出窗口,它会在您的应用中短暂显示,然后消失,用户无法与消息交互。与提醒通知不同,toast不存储在通知中心内。开发者可以使用下面的makeText()show()方法发送toast消息。显示持续时间也可以在makeText()方法中调整:

Copied to clipboard
        Context context = getApplicationContext();
        CharSequence text = title + message;
        int duration = Toast.LENGTH_LONG;

        Toast toast = Toast.makeText(context, text, duration);
        toast.show();

以下就是toast消息在Fire TV上的显示方式:

ADM toasts

如何选择通知方法

toast通知允许显示弹出对话框,而提醒通知则可以通过更丰富的图形吸引客户的注意力,并引导客户立即启动您的应用。

注意:​请记住,当另一个应用处于前台时,您的应用不应发送提醒通知,因为这会造成糟糕的客户体验。建立您的通知机制,以验证另一个应用是否在前台,如果是则不显示提醒通知。

对于应用发布信息等重要但不太紧急的通知,标准通知可能是更好的选择。标准通知与提醒通知不同,不会在客户欣赏内容时分散其注意力。在规划通知机制时,务必注意客户体验。

使用ADM的服务器端消息传递

服务器端消息传递解决方案为移动开发者提供了可扩展的通信工具。开发者可以向数百万跨平台设备发送消息,并通过电子邮件、短信、推送或语音等渠道与客户联系。

服务器端消息传递解决方案的一个例子是AWS Pinpoint,它支持向Fire TV等Fire OS设备发送消息所需的Amazon Device Messaging (ADM)。通过AWS Pinpoint,开发者还可以衡量客户参与度,并从其应用中生成分析数据。然后,营销团队可以利用由此获得的洞见来加强市场活动,并确定如何最有效地与客户沟通。

在本篇博客文章中,我们要讨论的重点是使用亚马逊开发者门户上提供的ADM SDK来进行ADM的实现工作。在阅读下面的设置过程之前,您可以参阅ADM概述页面,进一步了解ADM体系结构和每个ADM组件的角色/职责


1.服务器设置

下载ADM SDK,在示例文件夹下,您可以看到server-python文件夹中的服务器脚本。要运行服务器,请执行以下操作:

  1. 将server.py开头的PORT值更改为您希望服务器侦听的端口。继续操作之前,请确保此端口已打开并且可供访问。
  2. 将PROD_CLIENT_ID和PROD_CLIENT_SECRET的值更改为您从亚马逊收到的值。这些参数也位于server.py的开头。
  3. 在命令行中运行:> python server.py

对于第2点中所说的PROD_CLIENT_ID和PROD_CLIENT_SECRET,这些凭证将由亚马逊分配给您。您的服务器在请求访问令牌时,需要使用这些凭证的两组数据。

在上述的第3点之后,您可以通过浏览器访问服务器。在下图中,您可以看到用于向客户端发送消息的服务器用户界面。

Select a Device

下图显示了从服务器到应用的消息流概览。在本例中,“您的服务器”将替换为一个以Python脚本编写的独立示例网页应用,该脚本会作为ADM SDK的一部分提供。网页应用模拟服务器可以实现的一系列任务,通过这些任务向客户端应用发送消息。

Servers

2.客户端设置

在同一示例文件夹下,您应该可以看到客户端项目所在的ADMMessenger文件夹。

要运行客户端,请执行以下操作:

  1. 在ADMMessenger/assets/api_key.txt中,将您看到的文本行替换为您从亚马逊收到的API密钥。
  2. 在ADMMessenger/res/values/strings.xml中,将server_address和server_port的值更改为引用您服务器的值。

Copied to clipboard
<string name="server_address">http://xxx.xxx.xx.xx</string>
<string name="server_port">8080</string>

完成上述设置后,您可以从Android Studio构建、安装和运行客户端应用。

以下是基于ADM SDK的示例代码,介绍了我们如何通过ADM使用JSON文件中的数据构建本地通知,并将其作为提示通知显示在Fire TV上。

Copied to clipboard
public static void createADMNotification(final Context context, final String titleKey, final String msgKey, final String urlKey, final String timeKey,
                                             final String intentAction, final String title, final String msg, final String url, final String time)
    {

        /* Clicking the notification should bring up the MainActivity. */
        /* Intent FLAGS prevent opening multiple instances of MainActivity. */
        final Intent notificationIntent = new Intent(context, MainActivity.class);
        notificationIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        notificationIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        notificationIntent.putExtra(titleKey, title);
        notificationIntent.putExtra(msgKey, msg);
        notificationIntent.putExtra(urlKey, url);
        notificationIntent.putExtra(timeKey, time);

        /* Android reuses intents that have the same action. Adding a time stamp to the action ensures that */
        /* the notification intent received in onResume() isn't one that was recycled and that may hold old extras. */
        notificationIntent.setAction(intentAction + time);

        final PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, notificationIntent,Notification.DEFAULT_LIGHTS | Notification.FLAG_AUTO_CANCEL);

        Bitmap largeIcon = BitmapFactory.decodeResource(context.getResources(), R.drawable.amazon1280);

        Notification.Builder builder;

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            builder = new Notification.Builder(context, CHANNEL_ID)
                    .setContentTitle(title)
                    .setContentText(msg)
                    .setContentText(url)
                    .setColor(Color.BLUE)
                    .setSmallIcon(R.drawable.ic_launcher_foreground)
                    .setLargeIcon(largeIcon)
                    .setContentIntent(pendingIntent)
                    .setAutoCancel(true);
        } else {
            builder = new Notification.Builder(context)
                    .setContentTitle(title)
                    .setContentText(msg)
                    .setContentText(url)
                    .setColor(Color.BLUE)
                    .setPriority(NotificationCompat.PRIORITY_HIGH)
                    .setSmallIcon(R.drawable.ic_launcher_foreground)
                    .setLargeIcon(largeIcon)
                    .setContentIntent(pendingIntent)
                    .setAutoCancel(true);
        }

        Notification notification = builder.build();

        NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
        notificationManager.notify(context.getResources().getInteger(R.integer.sample_app_notification_id), notification);
    }

以下是从应用发送警报时的客户体验示例:

Customer experience

 

结论

Fire TV与AWS Pinpoint、Amazon Device Messaging和本地通知功能等营销通信服务相结合,为提高参与度提供了一种强大的方式。要进一步了解,请参阅我们的Amazon Device Messaging (ADM) 文档

相关文章

最新文章

 

查看有关亚马逊应用商店、应用开发与盈利、亚马逊服务以及更多主题的最新消息。