Rumah > pembangunan bahagian belakang > tutorial php > Perisian tengah CakePHP: Sepadukan pemberitahuan tolak dan peringatan mesej untuk mencapai pemberitahuan masa nyata

Perisian tengah CakePHP: Sepadukan pemberitahuan tolak dan peringatan mesej untuk mencapai pemberitahuan masa nyata

WBOY
Lepaskan: 2023-07-29 16:36:01
asal
812 orang telah melayarinya

Perisian tengah CakePHP: Sepadukan pemberitahuan tolak dan peringatan mesej untuk mencapai pemberitahuan masa nyata

[Pengenalan]
Dalam aplikasi Internet moden, pemberitahuan masa nyata ialah fungsi yang sangat penting. Untuk mencapai pemberitahuan masa nyata, kami biasanya menggunakan pemberitahuan tolak dan peringatan mesej. Artikel ini akan memperkenalkan cara menyepadukan pemberitahuan tolak dan peringatan mesej dalam aplikasi CakePHP untuk mencapai fungsi pemberitahuan masa nyata.

【Pemberitahuan Tolak】
Pemberitahuan Tolak digunakan terutamanya untuk menghantar maklumat masa nyata yang penting kepada pengguna, seperti mesej baharu, kemas kini status pesanan, dsb. Dalam CakePHP, kami boleh menggunakan perkhidmatan tolak pihak ketiga, seperti Firebase Cloud Messaging (FCM) atau Aurora Push, untuk menghantar pemberitahuan tolak.

Pertama, kita perlu mengkonfigurasi kunci dan parameter lain yang diperlukan untuk perkhidmatan tolak dalam aplikasi CakePHP. Anda boleh menambah konfigurasi berikut pada fail 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',
    ],
],
Salin selepas log masuk

然后,我们需要创建一个推送通知的中间件,用来处理发送推送通知的逻辑。可以在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();
    }
}
Salin selepas log masuk

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

$this->addMiddleware(new AppMiddlewarePushNotificationMiddleware());
Salin selepas log masuk

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

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

在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);
    }
}
Salin selepas log masuk

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

public function index()
{
    // 加载Notification组件
    $this->loadComponent('Notification');
    
    // 发送消息通知
    $this->Notification->notify($userId, '您有一条新消息!');
    
    // 标记所有消息为已读
    $this->Notification->markAsRead($userId);
}
Salin selepas log masuk
Kemudian, kita perlu mencipta perisian tengah pemberitahuan tolak untuk mengendalikan logik menghantar pemberitahuan tolak. Perisian tengah berikut boleh dibuat dalam fail src/Middleware/PushNotificationMiddleware.php:

rrreee

Akhir sekali, kita perlu mendaftarkan middleware dalam fail src/Application.php . Anda boleh menambah kod berikut dalam kaedah bootstrap():

rrreee
Pada masa ini, apabila aplikasi kami menerima permintaan, perisian tengah pemberitahuan tolak akan menghantar pemberitahuan tolak secara automatik kepada pengguna yang sepadan.

🎜【Peringatan Mesej】🎜Selain pemberitahuan tolak, kami biasanya juga perlu memaparkan peringatan mesej di dalam aplikasi, seperti muncul kotak gesaan mesej atau memaparkan bilangan mesej yang belum dibaca pada halaman. 🎜🎜Dalam CakePHP, kita boleh menggunakan komponen Sesi untuk menyimpan bilangan mesej yang belum dibaca pengguna. Apabila pengguna menerima pemberitahuan, kami menambah bilangan mesej yang belum dibaca sebanyak 1 dan menyimpannya dalam Sesi. Apabila pengguna melihat mesej, kami menetapkan semula kiraan mesej yang belum dibaca kepada sifar. 🎜🎜Untuk kemudahan penggunaan, kami boleh mencipta komponen peringatan mesej. Anda boleh mencipta komponen berikut dalam fail src/Controller/Component/NotificationComponent.php: 🎜rrreee🎜 Kemudian, kita perlu memuatkan komponen dalam pengawal dan menggunakan notify() kod > dan kaedah <code>markAsRead() untuk menghantar mesej dan menandakan mesej sebagai dibaca: 🎜rrreee🎜Pada ketika ini, kami telah berjaya menyepadukan pemberitahuan tolak dan peringatan mesej, merealisasikan fungsi pemberitahuan masa nyata. Pengguna akan dapat menerima maklumat masa nyata yang penting tepat pada masanya dan melihat serta mengurus mesej yang belum dibaca dalam apl. 🎜🎜【Ringkasan】🎜Artikel ini memperkenalkan cara menyepadukan pemberitahuan tolak dan peringatan mesej dalam aplikasi CakePHP untuk mencapai fungsi pemberitahuan masa nyata. Dengan menyepadukan perkhidmatan tolak pihak ketiga dan menggunakan komponen Sesi, kami boleh melaksanakan pemberitahuan masa nyata dan peringatan mesej dengan mudah untuk pengguna dalam aplikasi kami. Ini adalah fungsi yang sangat penting untuk aplikasi Internet moden, yang boleh meningkatkan pengalaman pengguna dan meningkatkan kelekatan pengguna. Semoga artikel ini bermanfaat kepada semua orang! 🎜

Atas ialah kandungan terperinci Perisian tengah CakePHP: Sepadukan pemberitahuan tolak dan peringatan mesej untuk mencapai pemberitahuan masa nyata. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan