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());
通常、プッシュ通知に加えて、メッセージ プロンプト ボックスをポップアップ表示したり、ページに未読メッセージの数を表示したりするなど、アプリケーション内にメッセージ リマインダーを表示する必要もあります。
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 サイトの他の関連記事を参照してください。