发送特定日期和时间的通知

时间:2016-06-03 06:38:46

标签: c# push-notification notifications

在我们的应用程序中,我们使用Question的startdate,enddate和resultdate存储问题。一旦问题的开始日期到来,我们需要向app(iPhone和Andorid)发送通知。

任何人都可以让我知道我们怎样才能实现这个目标?

我们不想使用pull方法。比如特定的时间间隔,它会检查问题startdate并发送通知。

我有一个URL来发送问题通知。当问题的开始日期到来时,我需要调用此URL。

感谢。

4 个答案:

答案 0 :(得分:1)

看一下Quartz:

  

Quartz.NET是一个功能齐全的开源作业调度系统,可用于从最小的应用程序到大型企业系统

Quartz Enterprise Scheduler .NET

你可以创建一个新的Quarts Job,让我们称之为 QuestionSenderJob 。然后你的应用程序可以schedule在Quartz调度程序中执行任务,作业可以有多个具有自定义数据的相同作业实例 - 在你的情况下 QuestionId

此外,它还支持在SQL数据库中存储作业调度(包括DDL脚本),因此,如果需要UI,可以创建一些关系。

  

您可以在Quartz.NET发行版的“database / dbtables”目录中找到创建表的SQL脚本

Lesson 9: JobStores

这样你就可以在适当的时刻离开石英引擎。

当您阅读Quartz .NET基础知识时,请参阅我为您的案例安排工作的代码片段。也许有必要进行一些修改。

IDictionary<string, object> jobData = new Dictionary<string, object> { { "QuestionId", questionId } };
var questionDate = new DateTime(2016, 09, 01);
var questionTriggerName = string.Format("Question{0}_Trigger", questionId);
var questionTrigger = TriggerBuilder.Create()
    .WithIdentity(questionTriggerName, "QuestionSendGroup")
    .StartAt(questionDate)
    .UsingJobData(new Quartz.JobDataMap(jobData))
    .Build();

scheduler
    .ScheduleJob(questionSenderJob, questionTrigger);

然后在Job中,您将通过JobExecutionContext获得您的问题。

public class QuestionSenderJob: IJob
{
    public void Execute(JobExecutionContext context)
    {            
        JobDataMap dataMap = context.JobDetail.JobDataMap;

        // Extract question Id and send message
    }
}

答案 1 :(得分:0)

如何使用Task Scheduler Managed Wrapper

您不想使用 pooling ,但是如果您编写自己的类来封装Timer(例如 System.Thread.Timer )并检查每个时间第二,这不会占用太多资源。根据您的需要,您可以更少检查,例如每分钟。也许你应该重新考虑它。

答案 2 :(得分:0)

如果您使用任何第三方服务来管理您的推送通知,例如Azure Notification Hub,Parse.com,......它们提供了一种计划推送通知的集成方式。通过传递发送日期或让他们定期运行工作。我是Azure服务的用户,效果非常好。

答案 3 :(得分:0)

我现在可以建议的最佳实现是您从服务器发送通知。 您只需要一个可以调度操作的好调度程序。

对我来说,我的服务器是由Javascript(NodeJS)驱动的,所以我使用&#34; node-schedule&#34;。我只是做的是

var schedule = require('node-schedule');

//Reporting rule at minute 1 every hour
    var rule = new schedule.RecurrenceRule();
    rule.minute = 1;
schedule.scheduleJob(rule, function () {
    console.log(new Date().toTimeString() + ' Testing Scheduler! Executing Every other minute');
//sendPush()
});