目前,亚马逊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种:
1.提醒通知
默认情况下,当有新的应用或新的更新应用可用时,Fire TV会向客户发送通知。您还可以使用Android通知API向客户发送提醒通知,并将通知优先级指定为高。
这是您需要引用的方法:
.setPriority(NotificationCompat.PRIORITY_HIGH)
Fire TV显示的提醒通知与标准Android通知略有不同。有关Fire TV上提醒通知的用户体验,请参阅以下内容:
2.标准通知
当开发者未指定通知优先级时,将发送标准通知。标准通知将存储在Fire TV设置下的通知中心内。这些通知不会以平视显示的形式示出,因此当客户使用不同的应用或浏览Fire TV主用户界面时,不会以任何可见的方式中断用户体验。
Fire TV上通知中心的外观如下:
3.toast
toast是一个小弹出窗口,它会在您的应用中短暂显示,然后消失,用户无法与消息交互。与提醒通知不同,toast不存储在通知中心内。开发者可以使用下面的makeText()和show()方法发送toast消息。显示持续时间也可以在makeText()方法中调整:
Context context = getApplicationContext();
CharSequence text = title + message;
int duration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
以下就是toast消息在Fire TV上的显示方式:
如何选择通知方法
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文件夹中的服务器脚本。要运行服务器,请执行以下操作:
对于第2点中所说的PROD_CLIENT_ID和PROD_CLIENT_SECRET,这些凭证将由亚马逊分配给您。您的服务器在请求访问令牌时,需要使用这些凭证的两组数据。
在上述的第3点之后,您可以通过浏览器访问服务器。在下图中,您可以看到用于向客户端发送消息的服务器用户界面。
下图显示了从服务器到应用的消息流概览。在本例中,“您的服务器”将替换为一个以Python脚本编写的独立示例网页应用,该脚本会作为ADM SDK的一部分提供。网页应用模拟服务器可以实现的一系列任务,通过这些任务向客户端应用发送消息。
2.客户端设置
在同一示例文件夹下,您应该可以看到客户端项目所在的ADMMessenger文件夹。
要运行客户端,请执行以下操作:
<string name="server_address">http://xxx.xxx.xx.xx</string>
<string name="server_port">8080</string>
完成上述设置后,您可以从Android Studio构建、安装和运行客户端应用。
以下是基于ADM SDK的示例代码,介绍了我们如何通过ADM使用JSON文件中的数据构建本地通知,并将其作为提示通知显示在Fire TV上。
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);
}
以下是从应用发送警报时的客户体验示例:
结论
Fire TV与AWS Pinpoint、Amazon Device Messaging和本地通知功能等营销通信服务相结合,为提高参与度提供了一种强大的方式。要进一步了解,请参阅我们的Amazon Device Messaging (ADM) 文档。