当应用程序被杀死/关闭时,世博会通知不会触发方法
Posted
技术标签:
【中文标题】当应用程序被杀死/关闭时,世博会通知不会触发方法【英文标题】:Expo notification doesnt fire method when app is killed/closed 【发布时间】:2021-03-09 13:54:36 【问题描述】:当应用程序正在运行或在后台但应用程序关闭时,我使用 react native expo 和推送通知工作正常。它不调用处理通知的方法。我需要重定向到详细信息页面。我尝试使用函数组件和类组件,尝试迁移到旧通知和新通知。
import React, useState, useEffect, useRef from 'react';
import
Image, ScrollView,
StyleSheet, Text, TouchableOpacity, Platform,
View, Linking,
from 'react-native';
import * as Notifications from "expo-notifications";
const HomeScreen = (props) =>
useEffect(() =>
notificationListener.current = Notifications.addNotificationReceivedListener(notification =>
const request, date = notification ||
const content = request ||
const data = content ||
const annKey,type = data ||
if(annKey)
// navigation.navigate('Detail', annKey, updateFeed: true, onSelect,)
);
responseListener.current = Notifications.addNotificationResponseReceivedListener(response =>
const notification = response ||
console.log(notification);
const request, date = notification ||
const content = request ||
const data = content ||
const annKey, type = data ||
if(annKey)
navigation.navigate('Detail', annKey, updateFeed: true, onSelect,)
);
return () =>
Notifications.removeNotificationSubscription(notificationListener);
Notifications.removeNotificationSubscription(responseListener);
;
, []);
export default HomeScreen;
【问题讨论】:
【参考方案1】:问题是在应用程序完成初始化后调用useEffect()
太晚了。因此,在系统放弃通知之前不会添加侦听器,并且不会调用处理程序。
幸运的是,由于您使用的是新的 expo-notifications
库,它引入了 useLastNotificationResponse()
React 钩子。它可以替换addNotificationResponseReceivedListener()
监听器并返回用户交互的最后一个通知(即点击)。它可以安全地用于useEffect()
钩子中。
您可以在此处找到文档:https://docs.expo.io/versions/latest/sdk/notifications/#uselastnotificationresponse-undefined--notificationresponse--null
这里是如何使用它(最好在你的根组件上实现它):
import * as Notifications from 'expo-notifications';
export default function App()
const lastNotificationResponse = Notifications.useLastNotificationResponse();
React.useEffect(() =>
if (
lastNotificationResponse &&
lastNotificationResponse.notification.request.content.data['someDataToCheck'] &&
lastNotificationResponse.actionIdentifier === Notifications.DEFAULT_ACTION_IDENTIFIER
)
// navigate to your desired screen
, [lastNotificationResponse]);
return (
/*
* your app
*/
);
【讨论】:
您能给我一个建议吗?我在 useEffect() 中使用 setWebViewUri() 钩子在我的您必须将其添加到您的 app.json 文件中:
"android":
"useNextNotificationsApi": true,
,
【讨论】:
以上是关于当应用程序被杀死/关闭时,世博会通知不会触发方法的主要内容,如果未能解决你的问题,请参考以下文章