英文:
Recurring Notifications- OneSignal API Flutter
问题
我正在制作一个日历应用,用户可以安排事件。
问题: 用户创建一个每周/每天/每月/每年重复的事件。我需要使用OneSignal API在那个日期永远安排通知。
我已经完成的
✅ 使用POST请求和API创建了普通的定时通知
✅ 找到了使用另一个插件的类似方法:
await flutterLocalNotificationsPlugin.showDailyAtTime(2, 'notification title', 'message here',
time, platformChannel,payload: 'new payload'));
我需要翻译这个,但是使用 OneSignal。
我需要什么?
- 在 OneSignal API 中找到设置定期安排通知的选项[应该是可能的]
- 如果这不可能,提供一些逻辑或指导,如何安排无限可能的通知。
英文:
I am making a Calendar app where the user can schedule events.
The problem: User creates an event that repeats every week/day/month/year. I need to schedule a notification for every week/day/month/year at that date forever using the OneSignal API
What I've done
✅ Created normal scheduled notifications with POST requests and API
✅ Found a similar method using another plugin:
await flutterLocalNotificationsPlugin.showDailyAtTime(2, 'notification title', 'message here',
time, platformChannel,payload: 'new payload'));
I would need to translate this but using OneSignal.
What do I need?
- Find an option in OneSignal API to setup a recurring scheduled notification [Should be possible]
- In the case this is not possible, some logic or guidance as to how to schedule infinite possible notifications.
答案1
得分: 2
我遇到了这个问题,而我找不到通过 OneSignal API 安排通知的方法。
我所做的是创建了一个 Express API,并添加了一个端点来创建一个 cron job,以通过 OneSignal REST API 安排通知的发送。
英文:
I have faced this issue, and I couldn't find any way to schedule notifications via OneSignal API.
What I did was I created an express API and added an endpoint to create a cron job to schedule the notification sending via one signal REST API.
答案2
得分: 2
根据我的知识,使用OneSignal API没有直接的解决方案来安排定期通知,但你可以创建一些东西:
首先,确保你有所有的依赖项:
import 'package:onesignal_flutter/onesignal_flutter.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
然后使用类似这样的函数来安排每日通知(确保更新API):
Future<void> scheduleDailyNotification(
String title, String message, DateTime startTime) async {
Map<String, dynamic> notification = {
"app_id": "YOUR_APP_ID",
"contents": {"en": message},
"headings": {"en": title},
"send_after": startTime.toUtc().toIso8601String(),
"delayed_option": "daily",
"delivery_time_of_day": startTime.toUtc().toIso8601String().substring(11, 19),
};
final headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_REST_API_KEY',
};
final response = await http.post(
Uri.parse("https://onesignal.com/api/v1/notifications"),
headers: headers,
body: jsonEncode(notification),
);
}
然后调用这个函数:
scheduleDailyNotification(
'Daily Notification Title',
'Daily Notification Message',
DateTime.now().add(Duration(minutes: 1)),
);
这将安排每日通知,从调度时间的一分钟后开始。
这个解决方案适用于每日重复通知,对于每周/每月/每年通知,你可能需要使用类似的方法修改请求中的delayed_option和delivery_time_of_day的值。
对于可扩展性问题,我会创建一个带有端点的后端服务,该端点创建一个cron作业,通过OneSignal安排通知发送。
英文:
Based on my own knowledge, there isn't a direct solution to schedule recurring notifications using OneSignal API but you can make something:
First, make sure you have all the dependencies:
import 'package:onesignal_flutter/onesignal_flutter.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
Then use a function like this to schedule daily notifications (make sure to update APIs)
<!-- begin snippet: js hide: false console: true babel: false -->
<!-- language: lang-js -->
Future<void> scheduleDailyNotification(
String title, String message, DateTime startTime) async {
Map<String, dynamic> notification = {
"app_id": "YOUR_APP_ID",
"contents": {"en": message},
"headings": {"en": title},
"send_after": startTime.toUtc().toIso8601String(),
"delayed_option": "daily",
"delivery_time_of_day": startTime.toUtc().toIso8601String().substring(11, 19),
};
final headers = {
'Content-Type': 'application/json',
'Authorization': 'Basic YOUR_REST_API_KEY',
};
final response = await http.post(
Uri.parse("https://onesignal.com/api/v1/notifications"),
headers: headers,
body: jsonEncode(notification),
);
}
<!-- end snippet -->
Then call the function
<!-- begin snippet: js hide: false console: true babel: false -->
<!-- language: lang-js -->
scheduleDailyNotification(
'Daily Notification Title',
'Daily Notification Message',
DateTime.now().add(Duration(minutes: 1)),
);
<!-- end snippet -->
This will schedule a daily notification starting one minute from the time of scheduling.
This solution can be suitable for daily recurring notifications and you may need to use a similar approach for weekly/monthly/yearly notifications by modifying the delayed_option and delivery_time_of_day values in the request.
For the scalability issue, I would create a backend service with an endpoint that creates a cron job to schedule the notification sending via OneSignal.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论