我在我的Spring MVC4项目中使用了Amazon推送通知。我每天早上8点用CronTrigger向Android应用程序发送推送通知。我还将Timezone与CronTrigger一起使用,这样用户就可以根据各自的时区获得通知。
下面是我的webconfig.java:
@Configuration
@EnableScheduling
@EnableWebMvc
@ComponentScan(basePackages="com.project")
public class WebConfig implements SchedulingConfigurer
{
protected static final Logger slf4jLogger = Logger.getLogger(WebConfig.class.getName());
private static final String cronExpression = "0 8 * * * ?";
/*@Bean
public MobileNotifSchedulerBean schedulerbean()
{
return new MobileNotifSchedulerBean();
}*/
@Bean
public InternalResourceViewResolver getInternalResourceViewResolver()
{
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/jsp/");
resolver.setSuffix(".jsp");
resolver.setSuffix(".html");
resolver.setSuffix(".htm");
return resolver;
}
@Bean
CronTrigger cronTrigger()
{
//The code in FetchUserTimeZones.java fetches all the user timezones which are stored in DynamoDb. Eg timeZone = "Asia/Calcutta";
String timeZone = null;
HashSet<String> userTimeZonesfromDB = FetchUserTimeZones.fetchUserTimeZone();
for (String s : userTimeZonesfromDB)
{
timeZone = s;
slf4jLogger.info(s);
}
return new CronTrigger(cronExpression, TimeZone.getTimeZone(timeZone));
}
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar)
{
taskRegistrar.addCronTask(new CronTask(new MobileNotifSchedulerBean(), cronTrigger()));
}
@Bean(destroyMethod="shutdown")
public Executor taskExecutor()
{
return Executors.newScheduledThreadPool(1);
}
}
@EnableScheduling
public class MobileNotifSchedulerBean implements Runnable
{
protected static final Logger slf4jLogger = Logger.getLogger(MobileNotifSchedulerBean.class.getName());
public MobileNotifSchedulerBean()
{
run();
}
public void sendQuestionNotif()
{
try
{
HashSet<String> reg_ids = FetchRegistrationIDs.fetchItems();
for (String s : reg_ids)
{
String REGISTRATION_IDs = s;
slf4jLogger.info(s);
MobileSNSPushNotification.sendNotification(REGISTRATION_IDs);
}
}
catch (IOException e)
{
//e.printStackTrace();
slf4jLogger.error(e);
slf4jLogger.error(e.getMessage());
slf4jLogger.error(e.getStackTrace());
}
}
@Override
public void run()
{
sendQuestionNotif();
}
}
更新:在Cron表达式中有一个修正。我纠正了。
private static final String cronExpression = "0 0 8 * * ?"; // For everyday 8 am.
但问题还没有解决
您应该为每个用户创建单独的计划
// spring bean
class Task implements Runnable {
public Task(TaskScheduler scheduler, String cron) {
HashSet<String> userTimeZonesfromDB = FetchUserTimeZones.fetchUserTimeZone();
for (String tz : userTimeZonesfromDB) {
scheduler.schedule(this, new CronTrigger(cron, TimeZone.getTimeZone(tz)));
}
}
@Override
public void run() {
// notify
}
}
我有一个场景,我需要安排一个工作,必须每天在特定时间执行。当我用特定的时间作为调度器的开始时间来调度它时,quartz不会在设定的开始时间触发作业,而是在下一个周期即延迟24小时后触发作业。即使在检查下一个FireTime时,我们也会得到一天的延迟。 例如:我需要每天安排一项工作在晚上6点进行。今天(2018年3月27日)下午5点开始。工作没有开始,下一次火灾时间是2018年3月28日下午6点。
我对Android系统比较陌生,所以我在这里很困惑... NotificationReceiver.java manifest.xml
我试图在指定时间触发通知和警报。我已经将日志信息放在控制台上,以查看是否设置了正确的时间,并且一切正常。但是,仍然没有触发警报。请帮忙。 创建通知和警报的/Code/ /通知消息类/ 请帮帮我,我做错了什么?
我管理一切都很好,创建了一个通知服务,用于作为警报的结果触发通知。不幸的是,使用AlarmManager设置警报不能正常工作。它会在几分钟后触发(而不是几小时,这将表示时区问题)。循环周期为1周,所以我使用了常数INTERVAL_DAY,并将其乘以7。为了确保一个PendingIntent不会替换另一个,我将dayOfWeek作为第二个参数传递给PendingIntent.getService()
我正在尝试使用Firebase云功能创建消息推送。以下是我的代码: 我得到以下错误: 错误:提供给sendToDevice()的注册令牌必须是非空字符串或非空数组。在FirebaseMessagingeror。FirebaseError[作为构造函数](/srv/node_modules/firebase admin/lib/utils/error.js:42:28)位于FirebaseMessa
这是舱单 这是我的注册令牌类 这是我的Firebase服务类