我需要在Laravel 5.0中延迟执行一个方法,或者更具体一点,我需要在特定的时间执行它。该方法是通过GCM向移动应用程序发送通知,我需要反复进行并将其设置为不同的时间。正如我发现的那样,如何故意在GCM中延迟通知。我知道在Laravel中使用cron和日程安排的基础知识,但我无法找到问题的答案。
我需要延迟执行的方法是:
public function pushAndroid($receiver, $message, $data)
{
$pushManager = new PushManager(PushManager::ENVIRONMENT_DEV);
$gcmAdapter = new GcmAdapter(array(
'apiKey' => self::GCM_API_KEY
));
$androidDevicesArray = array(new Device($receiver));
$devices = new DeviceCollection($androidDevicesArray);
$msg = new GcmMessage($message, $data);
$push = new Push($gcmAdapter, $devices, $msg);
$pushManager->add($push);
$pushManager->push();
}
应该执行的(日期+时间)信息存储在数据库的表中。对于每个通知,我只需要做一次,而不是重复。
答案 0 :(得分:1)
如果您查看https://laravel.com/docs/5.6/scheduling,可以设置符合您需求的内容。
使用
的外观制作一些东西$schedule->call(function () {
// Here you get the collection for the current date and time
$notifications = YourModel::whereDate('datecolumn',\Carbon\Carbon::now());
...
})->everyMinute();
答案 1 :(得分:0)
如果这更有意义,您也可以使用Queues with Delayed Dispatching。既然你暗示你只需要做一次。
ProcessJobClassName::dispatch($podcast)->delay(now()->addMinutes(10));