Maison >développement back-end >tutoriel php >Middleware CakePHP : intégrez les notifications push et les rappels de messages pour obtenir des notifications en temps réel

Middleware CakePHP : intégrez les notifications push et les rappels de messages pour obtenir des notifications en temps réel

WBOY
WBOYoriginal
2023-07-29 16:33:08817parcourir

Middleware CakePHP : intégrez les notifications push et les rappels de messages pour obtenir des notifications en temps réel

[Introduction]
Dans les applications Internet modernes, les notifications en temps réel sont une fonction très importante. Afin d'obtenir des notifications en temps réel, nous utilisons généralement des notifications push et des rappels de messages. Cet article expliquera comment intégrer les notifications push et les rappels de messages dans les applications CakePHP pour obtenir des fonctions de notification en temps réel.

【Notifications push】
Les notifications push sont principalement utilisées pour envoyer des informations importantes en temps réel aux utilisateurs, telles que de nouveaux messages, des mises à jour de l'état des commandes, etc. Dans CakePHP, nous pouvons utiliser des services push tiers, tels que Firebase Cloud Messaging (FCM) ou Aurora Push, pour envoyer des notifications push.

Tout d'abord, nous devons configurer la clé et les autres paramètres nécessaires du service push dans l'application CakePHP. Vous pouvez ajouter la configuration suivante au fichier config/app.php : config/app.php文件中添加如下配置:

'PushNotification' => [
    'fcm' => [
        'server_key' => 'YOUR_SERVER_KEY',
        'sender_id' => 'YOUR_SENDER_ID',
    ],
    'jpush' => [
        'app_key' => 'YOUR_APP_KEY',
        'master_secret' => 'YOUR_MASTER_SECRET',
    ],
],

然后,我们需要创建一个推送通知的中间件,用来处理发送推送通知的逻辑。可以在src/Middleware/PushNotificationMiddleware.php文件中创建如下中间件:

<?php
namespace AppMiddleware;

use CakeCoreConfigure;
use CakeHttpResponse;
use CakeHttpServerRequest;
use CakeORMTableRegistry;
use JPushClient as JPushClient;
use PsrHttpMessageResponseInterface;
use PsrHttpMessageServerRequestInterface;
use RuntimeException;

class PushNotificationMiddleware
{
    public function __invoke(ServerRequestInterface $request, ResponseInterface $response, $next)
    {
        // 获取请求参数
        $data = $request->getParsedBody();
        
        // 获取需要发送的推送通知内容
        $message = $data['message'];
        $userId = $data['user_id'];
        
        // 获取用户deviceId
        $table = TableRegistry::getTableLocator()->get('Devices');
        $device = $table->find()->where(['user_id' => $userId])->first();
        $deviceId = $device->device_id;
        
        // 发送推送通知
        $this->sendPushNotification($message, $deviceId);
        
        return $next($request, $response);
    }
    
    private function sendPushNotification($message, $deviceId)
    {
        // 获取推送服务配置
        $pushConfig = Configure::read('PushNotification');
        
        // 使用极光推送发送推送通知
        $jpush = new JPushClient($pushConfig['jpush']['app_key'], $pushConfig['jpush']['master_secret']);
        $jpush->push()
            ->setPlatform('all')
            ->addAlias($deviceId)
            ->message($message)
            ->send();
    }
}

最后,我们需要在src/Application.php文件中注册中间件。可以在bootstrap()方法中添加以下代码:

$this->addMiddleware(new AppMiddlewarePushNotificationMiddleware());

此时,当我们的应用接收到请求时,推送通知中间件将自动发送推送通知给对应用户。

【消息提醒】
除了推送通知,我们通常还需要在应用内部显示消息提醒,例如弹出消息提示框或者在页面上显示未读消息数。

在CakePHP中,我们可以使用Session组件来存储用户的未读消息数。在用户收到通知的同时,我们将未读消息数加1,并将其存储到Session中。当用户查看消息后,我们将未读消息数归零。

为了方便使用,我们可以创建一个消息提醒的组件。可以在src/Controller/Component/NotificationComponent.php文件中创建如下组件:

<?php
namespace AppControllerComponent;

use CakeControllerComponent;
use CakeControllerComponentRegistry;
use CakeORMTableRegistry;

class NotificationComponent extends Component
{
    protected $_defaultConfig = [];
    
    public function notify($userId, $message)
    {
        // 获取用户的未读消息数
        $table = TableRegistry::getTableLocator()->get('Notifications');
        $notification = $table->find()->where(['user_id' => $userId])->first();
        
        // 更新未读消息数
        if (!$notification) {
            $notification = $table->newEntity(['user_id' => $userId]);
        }
        
        $notification->unread_count++;
        $table->save($notification);
        
        // 发送消息通知
        $this->Flash->success($message);
    }
    
    public function markAsRead($userId)
    {
        $table = TableRegistry::getTableLocator()->get('Notifications');
        $notification = $table->find()->where(['user_id' => $userId])->first();
        
        // 标记所有消息为已读
        $notification->unread_count = 0;
        $table->save($notification);
    }
}

然后,我们需要在控制器中加载该组件,并使用notify()markAsRead()

public function index()
{
    // 加载Notification组件
    $this->loadComponent('Notification');
    
    // 发送消息通知
    $this->Notification->notify($userId, '您有一条新消息!');
    
    // 标记所有消息为已读
    $this->Notification->markAsRead($userId);
}

Ensuite, nous devons créer un middleware de notification push pour gérer la logique d'envoi des notifications push. Le middleware suivant peut être créé dans le fichier src/Middleware/PushNotificationMiddleware.php :

rrreee

Enfin, nous devons enregistrer le middleware dans le fichier src/Application.php . Vous pouvez ajouter le code suivant dans la méthode bootstrap() :

rrreee
A ce moment, lorsque notre application reçoit la demande, le middleware de notification push enverra automatiquement une notification push à l'utilisateur correspondant.

🎜【Rappel de message】🎜En plus des notifications push, nous devons généralement également afficher des rappels de message dans l'application, comme faire apparaître une boîte de dialogue d'invite de message ou afficher le nombre de messages non lus sur la page. 🎜🎜Dans CakePHP, nous pouvons utiliser le composant Session pour stocker le nombre de messages non lus de l'utilisateur. Lorsque l'utilisateur reçoit la notification, nous augmentons le nombre de messages non lus de 1 et le stockons dans la session. Lorsqu'un utilisateur consulte un message, nous réinitialisons le nombre de messages non lus à zéro. 🎜🎜Pour faciliter l'utilisation, nous pouvons créer un composant de rappel de message. Vous pouvez créer le composant suivant dans le fichier src/Controller/Component/NotificationComponent.php : 🎜rrreee🎜 Ensuite, nous devons charger le composant dans le contrôleur et utiliser notify() code > et la méthode <code>markAsRead() pour envoyer des messages et marquer les messages comme lus : 🎜rrreee🎜À ce stade, nous avons intégré avec succès les notifications push et les rappels de messages, réalisant des fonctions de notification en temps réel. Les utilisateurs pourront recevoir des informations importantes en temps réel en temps opportun et afficher et gérer les messages non lus au sein de l'application. 🎜🎜【Résumé】🎜Cet article explique comment intégrer les notifications push et les rappels de messages dans les applications CakePHP pour obtenir des fonctions de notification en temps réel. En intégrant des services push tiers et en utilisant des composants de session, nous pouvons facilement mettre en œuvre des notifications en temps réel et des rappels de messages pour les utilisateurs de nos applications. Il s'agit d'une fonction très importante pour les applications Internet modernes, qui peut améliorer l'expérience utilisateur et augmenter la fidélité de l'utilisateur. J'espère que cet article sera utile à tout le monde ! 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn