Определите, когда отправлять push-уведомления на выставку с HTTP/2 API
Я пытаюсь создать приложение для напоминания о воде. У меня 3 экрана и я использую реагирующую навигацию
- Дом (что я позволяю пользователям увеличить количество выпитого в этот день)
- Уведомления (где пользователи определяют с помощью кнопок переключения, хотят ли они получать уведомления и когда их получать)
- Настройки (где пользователь вводит возраст, вес, чтобы определить, сколько он должен пить ежедневно). это первый экран, который пользователи видят при загрузке приложения
Я пытаюсь отправить push-уведомления своим пользователям с помощью expo push-уведомлений и их HTTP/2 API. Но я в некотором роде заблудился и у меня есть эти вопросы ниже.
- Где написать код push-уведомлений ниже и вызвать HTTP/2 API? (App.js, уведомления или настройки?)
- Как я могу определить, когда отправлять такие уведомления, например, за каждый час на основе выбора пользователей.
Мой код для получения разрешения, ключ хранилища и вызов API для отправки уведомлений.
registerforPushNotifications = async () => {
// check fox existing permission
const { status } = await Permissions.getAsync(Permissions.NOTIFICATIONS);
let finalStatus = status;
// if no existing permission granted ask user
if (status !== 'granted') {
const { status } = await Permissions.askAsync(Permissions.NOTIFICATIONS);
finalStatus = status;
}
//if no permission is granted exit the status
if (finalStatus !== 'granted') {
return;
}
// get the token
let token = await Notifications.getExpoPushTokenAsync();
const request = {
to: token,
title: "Don't forget to drink water",
};
_storeToken = async () => {
try {
await AsyncStorage.setItem('token', token.toString());
} catch (error) {
console.log(error.message);
}
};
_storeToken();
return fetch('https://exp.host/--/api/v2/push/send', {
method: 'POST',
headers: {
'host':'exp.host',
'accept': 'application/json',
'content-Type': 'application/json',
'accept-encoding': 'gzip, deflate'
},
body: JSON.stringify(request),
}).then(data => {console.log(data)});
};
ответ, который я получаю
"_bodyInit": "{\"data\":{\"status\":\"ok\",\"id\":\"93d0f654-d8f6-4587-b4bb-ed4f5cd08b68\"}}",
0 ответов
Вместо того, чтобы использовать firebase, я решил использовать
Notifications.scheduleLocalNotificationAsync(localNotification, schedulingOptions)
Это помогает мне планировать локальное уведомление для срабатывания в определенное время в будущем или через определенный интервал.
аргументы
localNotification (объект) - объект со свойствами, описанными в LocalNotification.
schedulingOptions (object) - объект, который описывает, когда уведомление должно сработать.
время (дата или число) - объект Date, представляющий, когда следует запускать уведомление или число во время эпохи Unix. Пример: (new Date()). GetTime() + 1000 через одну секунду.
repeat (необязательно) (string) - "минута", "час", "день", "неделя",
"месяц" или "год".(Только для Android) intervalMs (необязательно) (number) - повторять интервал в
количество миллисекундcomponentDidMount () {this.willFocusSubscription = this.props.navigation.addListener ('willFocus', payload => {
// call the functions after component did mounted this._handleLocalNotification(); this.listenForNotifications(); });} // function to request permission to send notifications and schedule notifications _handleLocalNotification = async () => { // check fox existing permission const { status } = await Permissions.getAsync(Permissions.NOTIFICATIONS); let finalStatus = status; // if no existing permission granted ask user if (status !== 'granted') { const { status } = await Permissions.askAsync(Permissions.NOTIFICATIONS); finalStatus = status; } //if no permission is granted exit the status if (finalStatus !== 'granted') { return; } const localnotification = { title: 'Water Reminder', body: 'Dont forget to drink water!', android: { sound: true, }, ios: { sound: true, }, }; let sendAfterFiveSeconds = Date.now(); sendAfterFiveSeconds += 5000; const schedulingOptions = { time: sendAfterFiveSeconds }; Notifications.scheduleLocalNotificationAsync(localnotification, schedulingOptions); };
// функция для прослушивания, если уведомление получено, когда приложение открыто. Когда он получит, он создаст и предупредит
listenForNotifications = () => {
Notifications.addListener(notification => {
if (notification.origin === 'received') {
Alert.alert(localnotification.title, localnotification.body);
}
});
};