コード例 #1
0
 public function SendGCMFromNotification()
 {
     DB::statement("SET SESSION group_concat_max_len = 1000000;");
     //$notifications = DB::select("SELECT GROUP_CONCAT(users.DeviceUDID) AS Devices, GROUP_CONCAT(NotificationID) AS NotificationIDs, n.NotificationID, NotificationType, Message, `Key`, ImageUrl, IsPast FROM notifications n INNER JOIN users ON users.UserID = n.UserID AND users.DeviceUDID IS NOT NULL AND users.DeviceUDID != '' WHERE issent = 0 GROUP BY `NotificationType`, `Key`, `Message`");
     $notifications = DB::select("SELECT GROUP_CONCAT(users.DeviceUDID) AS Devices, GROUP_CONCAT(NotificationID) AS NotificationIDs, n.NotificationID, NotificationType,Message, `Key`, ImageUrl, IsPast FROM notifications n LEFT JOIN users ON users.UserID = n.UserID and users.IsAndroid = 1 WHERE issent = 0\nAND IFNULL(users.DeviceUDID,'') != '' GROUP BY `NotificationType`, `Key`, `Message`");
     foreach ($notifications as $notification) {
         if ($notification && $notification->Devices) {
             $AlldeviceUdIDs = explode(',', $notification->Devices);
             $AllnotificationIDs = explode(',', $notification->NotificationIDs);
             if ($AlldeviceUdIDs && is_array($AlldeviceUdIDs) && count($AlldeviceUdIDs) > 0) {
                 $listOfdeviceUdIDs = array_chunk($AlldeviceUdIDs, 20);
                 $listOfnotificationIDs = array_chunk($AllnotificationIDs, 20);
                 $total = DB::update("update notifications set IsSent = 2 where NotificationID IN (" . $notification->NotificationIDs . ") and IsSent = 0");
                 foreach ($listOfdeviceUdIDs as $num => $deviceUdIDs) {
                     if ($deviceUdIDs && is_array($deviceUdIDs) && count($deviceUdIDs) > 0) {
                         $notificationResponse = Common::SendGoogleCloudMessage($deviceUdIDs, Common::GetGoogleCloudMessage($notification->Message, $notification->NotificationType, $notification->Key, $notification->ImageUrl, $notification->IsPast));
                         if ($notificationResponse) {
                             $results = json_decode($notificationResponse)->results;
                             if ($results && count($results) > 0) {
                                 foreach ($results as $key => $result) {
                                     if (!property_exists($result, 'error')) {
                                         $notificationEntity = NotificationEntity::where("NotificationID", $listOfnotificationIDs[$num][$key])->update(array("IsSent" => 1, "SentDate" => date(Constants::$DefaultDateTimeFormat)));
                                     } else {
                                         $notificationEntity = NotificationEntity::where("NotificationID", $listOfnotificationIDs[$num][$key])->update(array("IsSent" => 3, "SentDate" => date(Constants::$DefaultDateTimeFormat)));
                                     }
                                 }
                             } else {
                                 $notificationEntity = DB::update("update notifications set IsSent = 0 where NotificationID IN (" . implode(',', $listOfnotificationIDs[$num]) . ") and IsSent = 2");
                             }
                         } else {
                             $notificationEntity = DB::update("update notifications set IsSent = 0 where NotificationID IN (" . implode(',', $listOfnotificationIDs[$num]) . ") and IsSent = 2");
                         }
                     }
                 }
             }
         }
     }
     $this->SendAPNsFromNotification();
 }