ホームページ >バックエンド開発 >PHPチュートリアル >CakePHP ミドルウェア: プッシュ通知とメッセージ リマインダーを統合して、リアルタイム通知を実現します

CakePHP ミドルウェア: プッシュ通知とメッセージ リマインダーを統合して、リアルタイム通知を実現します

WBOY
WBOYオリジナル
2023-07-29 16:33:08811ブラウズ

CakePHP ミドルウェア: プッシュ通知とメッセージ リマインダーを統合してリアルタイム通知を実現

[はじめに]
現代のインターネット アプリケーションでは、リアルタイム通知は非常に重要な機能です。リアルタイムの通知を実現するために、通常はプッシュ通知とメッセージリマインダーを使用します。この記事では、CakePHP アプリケーションにプッシュ通知とメッセージリマインダーを統合して、リアルタイム通知機能を実現する方法を紹介します。

[プッシュ通知]
プッシュ通知は主に、新しいメッセージや注文ステータスの更新など、重要なリアルタイム情報をユーザーに送信するために使用されます。 CakePHP では、Firebase Cloud Messaging (FCM) や Aurora Push などのサードパーティのプッシュ サービスを使用して、プッシュ通知を送信できます。

まず、CakePHP アプリケーションでプッシュ サービス キーとその他の必要なパラメーターを設定する必要があります。 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 つ増やしてセッションに保存します。ユーザーがメッセージを表示すると、未読メッセージ数がゼロにリセットされます。

使いやすくするために、メッセージ リマインダー コンポーネントを作成できます。次のコンポーネントは

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);
}

この時点で、プッシュ通知とメッセージ リマインダーを正常に統合して、リアルタイム通知機能を実装しました。 。ユーザーは重要なリアルタイム情報をタイムリーに受け取り、アプリ内で未読メッセージを表示および管理できるようになります。

[概要]

この記事では、CakePHP アプリケーションにプッシュ通知とメッセージリマインダーを統合して、リアルタイム通知機能を実現する方法を紹介します。サードパーティのプッシュ サービスを統合し、セッション コンポーネントを使用することで、アプリケーションにユーザーへのリアルタイム通知とメッセージ リマインダーを簡単に実装できます。これは最新のインターネット アプリケーションにとって非常に重要な機能であり、ユーザー エクスペリエンスを向上させ、ユーザーの定着率を高めることができます。この記事が皆さんのお役に立てば幸いです!

以上がCakePHP ミドルウェア: プッシュ通知とメッセージ リマインダーを統合して、リアルタイム通知を実現しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。