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

Jul 29, 2023 pm 04:33 PM
perisian tengah pemberitahuan masa nyata cakephp

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!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Konfigurasi Projek CakePHP Konfigurasi Projek CakePHP Sep 10, 2024 pm 05:25 PM

Dalam bab ini, kita akan memahami Pembolehubah Persekitaran, Konfigurasi Umum, Konfigurasi Pangkalan Data dan Konfigurasi E-mel dalam CakePHP.

CakePHP Bekerja dengan Pangkalan Data CakePHP Bekerja dengan Pangkalan Data Sep 10, 2024 pm 05:25 PM

Bekerja dengan pangkalan data dalam CakePHP adalah sangat mudah. Kami akan memahami operasi CRUD (Buat, Baca, Kemas Kini, Padam) dalam bab ini.

Pengesah Mencipta CakePHP Pengesah Mencipta CakePHP Sep 10, 2024 pm 05:26 PM

Pengesah boleh dibuat dengan menambah dua baris berikut dalam pengawal.

Bincangkan CakePHP Bincangkan CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ialah rangka kerja sumber terbuka untuk PHP. Ia bertujuan untuk menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP adalah berdasarkan seni bina seperti MVC yang berkuasa dan mudah difahami. Model, Pandangan dan Pengawal gu

Penghalaan CakePHP Penghalaan CakePHP Sep 10, 2024 pm 05:25 PM

Dalam bab ini, kita akan mempelajari topik berikut yang berkaitan dengan penghalaan ?

Muat naik Fail CakePHP Muat naik Fail CakePHP Sep 10, 2024 pm 05:27 PM

Untuk mengusahakan muat naik fail, kami akan menggunakan pembantu borang. Di sini, adalah contoh untuk muat naik fail.

Tarikh dan Masa CakePHP Tarikh dan Masa CakePHP Sep 10, 2024 pm 05:27 PM

Untuk bekerja dengan tarikh dan masa dalam cakephp4, kami akan menggunakan kelas FrozenTime yang tersedia.

Pembalakan CakePHP Pembalakan CakePHP Sep 10, 2024 pm 05:26 PM

Log masuk CakePHP adalah tugas yang sangat mudah. Anda hanya perlu menggunakan satu fungsi. Anda boleh log ralat, pengecualian, aktiviti pengguna, tindakan yang diambil oleh pengguna, untuk sebarang proses latar belakang seperti cronjob. Mengelog data dalam CakePHP adalah mudah. Fungsi log() disediakan

See all articles