我正在使用此程序包来实现本地推送通知:
https://github.com/zo0r/react-native-push-notification
我使用这样的操作按钮来在通知中显示按钮以及文本和标题:
PushNotification.localNotification({
...
actions: '["Yes", "No"]'
})
我想知道当用户单击这些操作并且应用程序可见时如何调用函数吗?
我已经在我的主屏幕上的PushNotification.configure
方法中尝试过componentDidMount
,但是控制台中什么也没出现:
PushNotification.configure({
// (required) Called when a remote or local notification is opened or received
onNotification: function(notification) {
console.log("NOTIFICATION:", notification);
if (notification.userInteraction) {
console.log("NOTIFICATION:");
}
// process the notification
}
});
答案 0 :(得分:2)
我知道了。
在App.js中,您需要将popInitialNotification设置为true。像这样:
async componentDidMount() {
PushNotification.configure({
// (required) Called when a remote or local notification is opened or received
onNotification: function(notification) {
console.log("NOTIFICATION:", notification.action);
},
// IOS ONLY (optional): default: all - Permissions to register.
permissions: {
alert: true,
badge: true,
sound: true
},
// Should the initial notification be popped automatically
// default: true
popInitialNotification: true,
/**
* (optional) default: true
* - Specified if permissions (ios) and token (android and ios) will requested or not,
* - if not, you must call PushNotificationsHandler.requestPermissions() later
*/
requestPermissions: true
});
}
notification.action将为您提供所单击按钮的标签。
答案 1 :(得分:1)
在您的按钮/应用活动事件中,您忘了打电话来安排通知并在发生通知时进行了实际设置,因此您需要
PushNotification.localNotificationSchedule(details: Object)
使用相同的id
立即为立即安排时间,然后您的通知将立即出现。
查看所有用于安排here的选项
答案 2 :(得分:1)
import PushNotificationAndroid from 'react-native-push-notification'
(function() {
// Register all the valid actions for notifications here and add the action handler for each action
PushNotificationAndroid.registerNotificationActions(['Accept','Reject','Yes','No']);
DeviceEventEmitter.addListener('notificationActionReceived', function(action){
console.log ('Notification action received: ' + action);
const info = JSON.parse(action.dataJSON);
if (info.action == 'Accept') {
// Do work pertaining to Accept action here
} else if (info.action == 'Reject') {
// Do work pertaining to Reject action here
}
// Add all the required actions handlers
});
})();
答案 3 :(得分:0)
不要在组件,甚至是应用程序中使用 .configure()
如果这样做,通知处理程序将不会触发,因为它们未加载。相反,在应用的第一个文件中使用 .configure(),通常是 index.js。
文档中提到了这一点。
尝试按照他们的示例进行实施这将帮助您在项目中进行设置。