params; if($this->_firebase === null) { $this->_firebase = (new Factory) ->withServiceAccount($params['firebaseKey']); } return $this->_firebase; } function firestore() { if($this->_firestore === null) { $this->_firestore = self::firebase() ->createFirestore() ->database(); } return $this->_firestore; } function messaging() { if($this->_messaging === null) { $this->_messaging = $this->firebase() ->createMessaging(); } return $this->_messaging; } public static function enviarNotificacion($idCliente, CloudMessage $notificacion) { $model = new self(); return $model->enviar($idCliente, $notificacion); } public function enviar($idCliente, CloudMessage $notificacion) { if(!$idCliente) return null; $firestore = $this->firestore(); $doc = $firestore->collection("clientes") ->document($idCliente); $data = $doc->snapshot()->data(); $tokens = $data["tokens"]; if(empty($tokens)) return null; $resultado = $this->messaging()->sendMulticast($notificacion, $tokens); # Actualizar los tokens en firestore con los que si funcionaron $tokenValidos = $resultado->validTokens(); $doc->update([ ["path" => "tokens", "value" => $tokenValidos], ]); } }