Only include recently active sessions when sending FCM notifications #799

This commit is contained in:
Ramon Gutierrez 2024-10-29 17:22:51 +08:00
parent 0800fc1066
commit 97ebaa05a0

View file

@ -12,6 +12,8 @@ use App\Entity\JobOrder;
use App\Entity\Subscription;
use Exception;
use RuntimeException;
use DateTime;
use DateInterval;
class FCMSender
{
@ -246,11 +248,23 @@ class FCMSender
return false;
}
// get device timestamp cutoff
$oldest_timestamp = (new DateTime())->sub(new DateInterval('P1M'));
// send to every customer session
foreach ($sessions as $sess) {
$device_id = $sess->getDevicePushID();
if (!empty($device_id) && !isset($device_ids[$device_id])) {
// ignore duplicates and empty device IDs
if (empty($device_id) || isset($device_ids[$device_id])) {
continue;
}
// get latest device timestamp
$latest_timestamp = $sess->getDateLatestActivity();
// make sure we only send to devices that have been active on or after the cutoff
if ($latest_timestamp >= $oldest_timestamp) {
// send to this device
$device_ids[$device_id] = true;
}