@amazon-devices/kepler-amazon-device-messaging
该库在适用于Kepler的React Native应用中启用亚马逊设备消息传递服务功能。亚马逊设备消息传递 (ADM) 可让您:
- 向运行您的应用的亚马逊设备发送消息
- 将消息从您的云服务传送到安装在亚马逊设备上的应用
开始使用
设置
-
将以下库依赖项添加到package.json文件的
dependencies部分。"@amazon-devices/kepler-amazon-device-messaging": "~1.0.0", "@amazon-devices/headless-task-manager": "~0.1.0", -
要访问ADM,请在您的manifest.toml中添加以下权限和服务。
[needs] [[needs.privilege]] id = "com.amazon.device-messaging.privilege.access" [wants] [[wants.module]] id = "/com.amazon.ace.messaging.service@IDeviceMessaging" [[wants.service]] id = "com.amazon.ace.messaging.service"
用法
要使用亚马逊设备消息传递服务,您必须:
- 在manifest.toml文件中声明您的组件和进程。
- 在您的App.ts文件中向该服务注册您的应用。
- 添加代码来处理任务执行。
- 添加用于注册和处理ADM消息的代码。
-
在您的manifest.toml中,声明一项后台运行的任务来接收ADM消息,并使用
<程序包ID>. amazon-device-messaging-receiver作为组件ID。重要须知: 将
<程序包ID>替换为您的特定程序包ID。[components] [[components.task]] id = "<程序包ID>.amazon-device-messaging-receiver" runtime-module = "/com.amazon.kepler.keplerscript.runtime.loader_2@IKeplerScript_2_0" [processes] [[processes.group]] component-ids = ["<程序包ID>.amazon-device-messaging-receiver"] -
在您的App.ts中,使用设备消息传递服务注册您的应用并获得注册ID。
import { AmazonDeviceMessagingMessage, AmazonDeviceMessagingServer, AmazonDeviceMessagingHandler, } from '@amazon-devices/kepler-amazon-device-messaging'; export const App = () => { const register = async () => { try { console.log('调用registerAsync'); const registrationId: string = await AmazonDeviceMessagingServer.registerAsync(); console.log('注册ID:' + registrationId); } catch (error) { console.error('注册失败:', error); } } }; -
创建task.js并通过
HeadlessEntryPointRegistry注册HeadlessTask。import { HeadlessEntryPointRegistry } from "@amazon-devices/headless-task-manager"; import { doTask } from "./src/AdmHeadlessTask"; HeadlessEntryPointRegistry.registerHeadlessEntryPoint("com.amazon.device_messaging.sample.amazon-device-messaging-receiver::doTask", () => doTask); -
创建AdmHeadlessTask.ts文件。该文件的基本结构采用以下格式。
class AdmHeadlessTask { async doTask(): Promise<void> { console.log('无头任务已启动'); return Promise.resolve(); } } const AdmHeadlessTaskInstance = new AdmHeadlessTask(); export const doTask = (): Promise<void> => { return AdmHeadlessTaskInstance.doTask(); }; -
在AdmHeadlessTask.ts中,在处理ADM消息的后台任务中实现
AmazonDeviceMessagingHandler接口。import { AmazonDeviceMessagingServer, AmazonDeviceMessagingHandler, AmazonDeviceMessagingMessage, } from '@amazon-devices/kepler-amazon-device-messaging'; . . . const handler: AmazonDeviceMessagingHandler = { handleOnMessage(message: AmazonDeviceMessagingMessage): Promise<void> { // 处理消息 console.log( '应用收到的ADM消息 = ' + JSON.stringify(message.data), ); console.log( '应用收到的ADM通知 = ' + JSON.stringify(message.notification), ); return Promise.resolve(); }, }; -
将处理程序作为参数传递给
AdmHeadlessTask。class AdmHeadlessTask { private handler: AmazonDeviceMessagingHandler; constructor(handler: AmazonDeviceMessagingHandler) { this.handler = handler; } . . . } -
调用
AmazonDeviceMessagingServer.registerHandler()注册名为handler的AmazonDeviceMessagingHandler的实现。class AdmHeadlessTask { . . . async doTask(): Promise<void> { console.log('无头任务已启动'); AmazonDeviceMessagingServer.registerHandler(handler); return Promise.resolve(); } . . . } -
调用
registerHandler方法后,调用waitForMessageHandlerCompletionAsync。class AdmHeadlessTask { . . . async doTask(): Promise<void> { console.log('无头任务已启动'); AmazonDeviceMessagingServer.registerHandler(handler); try { // 传递等待消息处理完成的最长持续时间。 // 等待参数是未来的时间戳,在本例中, // 是在当前时间之后5000毫秒。 await AmazonDeviceMessagingServer.waitForMessageHandlerCompletionAsync( new Date(Date.now() + 5 * 1000), ); } catch (error) { console.error('Error:', error); } return Promise.resolve(); } . . . } -
等待
waitForMessageHandlerCompletionAsync完成。如果该方法没有抛出错误,则表示成功处理了消息。如果在处理消息时出现故障,ADM不会重新尝试传送消息。
注意: 当处理程序未在通过waitDuration指定的时间内处理消息或处理消息失败时,waitForMessageHandlerCompletionAsync方法会引发一个错误。这些错误会报告给生命周期管理器,由您的应用来处理。
示例AdmHeadlessTask.ts
import {
AmazonDeviceMessagingMessage,
AmazonDeviceMessagingServer,
AmazonDeviceMessagingHandler,
} from '@amazon-devices/kepler-amazon-device-messaging';
class AdmHeadlessTask {
private handler: AmazonDeviceMessagingHandler;
constructor(handler: AmazonDeviceMessagingHandler) {
this.handler = handler;
}
async doTask(): Promise<void> {
console.log('后台任务已启动');
AmazonDeviceMessagingServer.registerHandler(handler);
try {
// 传递等待消息处理完成的最长持续时间
await AmazonDeviceMessagingServer.waitForMessageHandlerCompletionAsync(
new Date(Date.now() + 5 * 1000),
);
} catch (error) {
console.error('Error:', error);
}
console.log('无头任务完成');
return Promise.resolve();
}
}
const handler: AmazonDeviceMessagingHandler = {
handleOnMessage(message: AmazonDeviceMessagingMessage): Promise<void> {
console.log(
'示例应用收到的消息 = ' + JSON.stringify(message.data),
);
console.log(
'示例应用收到的通知 = ' +
JSON.stringify(message.notification),
);
return Promise.resolve();
}
};
const admHeadlessTaskInstance = new AdmHeadlessTask(handler);
export const doTask = (): Promise<void> => {
return admHeadlessTaskInstance.doTask();
};
类
模块
- index
- turbo-modules/AmazonDeviceMessagingHandler
- turbo-modules/AmazonDeviceMessagingHandler
- turbo-modules/AmazonDeviceMessagingServer
- turbo-modules/AmazonDeviceMessagingServer
- turbo-modules/AmazonDeviceMessagingTurboModule
- turbo-modules/AmazonDeviceMessagingTurboModule
- turbo-modules/types/Error
- turbo-modules/types/Error
- turbo-modules/types/Error
- turbo-modules/types/Response
- turbo-modules/types/Response
- turbo-modules/types/Response
Last updated: 2025年11月17日

