Heim  >  Artikel  >  Backend-Entwicklung  >  CakePHP-Middleware: Integrieren Sie Push-Benachrichtigungen und Nachrichtenerinnerungen, um Echtzeitbenachrichtigungen zu erreichen

CakePHP-Middleware: Integrieren Sie Push-Benachrichtigungen und Nachrichtenerinnerungen, um Echtzeitbenachrichtigungen zu erreichen

WBOY
WBOYOriginal
2023-07-29 16:33:08708Durchsuche

CakePHP-Middleware: Integrieren Sie Push-Benachrichtigungen und Nachrichtenerinnerungen, um Echtzeitbenachrichtigungen zu erreichen

[Einführung]
In modernen Internetanwendungen sind Echtzeitbenachrichtigungen eine sehr wichtige Funktion. Um Benachrichtigungen in Echtzeit zu erreichen, verwenden wir in der Regel Push-Benachrichtigungen und Nachrichtenerinnerungen. In diesem Artikel wird erläutert, wie Push-Benachrichtigungen und Nachrichtenerinnerungen in CakePHP-Anwendungen integriert werden, um Echtzeit-Benachrichtigungsfunktionen zu erreichen.

【Push-Benachrichtigungen】
Push-Benachrichtigungen werden hauptsächlich verwendet, um wichtige Echtzeitinformationen an Benutzer zu senden, wie z. B. neue Nachrichten, Aktualisierungen des Bestellstatus usw. In CakePHP können wir Push-Dienste von Drittanbietern wie Firebase Cloud Messaging (FCM) oder Aurora Push verwenden, um Push-Benachrichtigungen zu senden.

Zuerst müssen wir den Schlüssel und andere notwendige Parameter des Push-Dienstes in der CakePHP-Anwendung konfigurieren. Sie können der Datei config/app.php die folgende Konfiguration hinzufügen: 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);
}

Dann müssen wir eine Push-Benachrichtigungs-Middleware erstellen, um die Logik des Sendens von Push-Benachrichtigungen zu verwalten. Die folgende Middleware kann in der Datei src/Middleware/PushNotificationMiddleware.php erstellt werden:

rrreee

Abschließend müssen wir die Middleware in der Datei src/Application.php registrieren . Sie können der Methode bootstrap() den folgenden Code hinzufügen:

rrreee
Wenn unsere Anwendung zu diesem Zeitpunkt die Anfrage empfängt, sendet die Push-Benachrichtigungs-Middleware automatisch eine Push-Benachrichtigung an den entsprechenden Benutzer.

🎜【Nachrichtenerinnerung】🎜Zusätzlich zu Push-Benachrichtigungen müssen wir normalerweise auch Nachrichtenerinnerungen in der Anwendung anzeigen, z. B. das Einblenden einer Nachrichtenaufforderungsbox oder die Anzeige der Anzahl ungelesener Nachrichten auf der Seite. 🎜🎜In CakePHP können wir die Session-Komponente verwenden, um die Anzahl der ungelesenen Nachrichten des Benutzers zu speichern. Wenn der Benutzer die Benachrichtigung erhält, erhöhen wir die Anzahl der ungelesenen Nachrichten um 1 und speichern sie in der Sitzung. Wenn ein Benutzer eine Nachricht anzeigt, setzen wir die Anzahl der ungelesenen Nachrichten auf Null zurück. 🎜🎜Zur Vereinfachung der Verwendung können wir eine Nachrichtenerinnerungskomponente erstellen. Sie können die folgende Komponente in der Datei src/Controller/Component/NotificationComponent.php erstellen: 🎜rrreee🎜 Dann müssen wir die Komponente in den Controller laden und notify() verwenden. code > und die Methode <code>markAsRead() zum Senden von Nachrichten und Markieren von Nachrichten als gelesen: 🎜rrreee🎜An diesem Punkt haben wir erfolgreich Push-Benachrichtigungen und Nachrichtenerinnerungen integriert und so Echtzeit-Benachrichtigungsfunktionen realisiert. Benutzer können wichtige Echtzeitinformationen zeitnah erhalten und ungelesene Nachrichten innerhalb der App anzeigen und verwalten. 🎜🎜【Zusammenfassung】🎜In diesem Artikel wird erläutert, wie Push-Benachrichtigungen und Nachrichtenerinnerungen in CakePHP-Anwendungen integriert werden, um Echtzeit-Benachrichtigungsfunktionen zu erreichen. Durch die Integration von Push-Diensten von Drittanbietern und die Verwendung von Session-Komponenten können wir problemlos Echtzeitbenachrichtigungen und Nachrichtenerinnerungen für Benutzer in unseren Anwendungen implementieren. Dies ist eine sehr wichtige Funktion für moderne Internetanwendungen, die das Benutzererlebnis verbessern und die Benutzerbindung erhöhen kann. Ich hoffe, dieser Artikel ist für alle hilfreich! 🎜

Das obige ist der detaillierte Inhalt vonCakePHP-Middleware: Integrieren Sie Push-Benachrichtigungen und Nachrichtenerinnerungen, um Echtzeitbenachrichtigungen zu erreichen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn