本文是原始日文文章的中文译本。
当用户点击推送通知时,入口点会根据应用程序是否正在运行而有所不同。如果你仅使用一个监听器配合 Expo 路由来导航至通知目标屏幕,可能会错过从终止状态启动的情况。
在我的应用中,我通过两种独立的机制来处理这两种情况:
-
getLastNotificationResponseAsync():当应用因点击通知而启动时 -
addNotificationResponseReceivedListener():当应用在运行时点击通知时
构建通知数据结构
从服务器发送的通知在 data.url 中包含目标路径。
{
title: "出勤截止提醒",
body: "请确认明天训练的出勤情况",
data: {
url: "/organizations/org_123/schedules/schedule_456"
}
}
与其解析显示的 title 或 body 来确定目标,我将应用可处理的路径作为独立数据传递。
处理从通知启动的情况
当应用处于终止状态时,我在启动后检查最后一条通知响应。
void Notifications.getLastNotificationResponseAsync().then((response) => {
if (response) {
handleNotificationTap(response.notification);
}
});
此过程是异步的。如果在验证身份认证之前或在导航器准备就绪之前调用 router.push,可能会导致导航冲突。在我的应用中,我在登录检查完成后执行此操作。
useRegisterPushToken(authChecked);
处理运行时点击通知的情况
当从后台或前台点击通知时,监听器会接收到该事件。
const subscription =
Notifications.addNotificationResponseReceivedListener((response) => 免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。