| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- <?php
- namespace app\components;
- use Kreait\Firebase\Factory;
- use Kreait\Firebase\Messaging\CloudMessage;
- class FirebaseHelper {
- const TIPO_PAGO = "pago";
- const TIPO_PEDIDO = "pedido";
- const TIPO_PROMOCION = "promocion";
- private $_firebase = null;
- private $_firestore = null;
- private $_messaging = null;
- function firebase() {
- $params = \Yii::$app->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],
- ]);
- }
- }
|