溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Yii1.1框架模擬PHP極光推送消息通知的案例

發(fā)布時間:2020-11-03 11:59:31 來源:億速云 閱讀:110 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關Yii1.1框架模擬PHP極光推送消息通知的案例的內容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。

一、下載極光推送PHP SDK,解壓后放在/protected/components/目錄下,如下圖所示:

Yii1.1框架模擬PHP極光推送消息通知的案例

二、完善修改下官方的demo例子,我這里復制一份demo,改為NotifyPush.php,如下代碼:

<?php
require dirname(__FILE__) . '/jpush-api-php-client/autoload.php';
use JPush\Client as JPush;
class NotifyPush {
    static function pushAlias($alias,$ticket='消息提醒',$alert){
        $appKey=Yii::app()->params['push']['AppKey'];
        $appMasterSecret=Yii::app()->params['push']['AppMasterSecret'];
        $production_mode=Yii::app()->params['push']['production_mode'];



        $client = new JPush($appKey, $appMasterSecret);


// 完整的推送示例
// 這只是使用樣例,不應該直接用于實際生產環(huán)境中 !!
        try {
            $response = $client->push()
                ->setPlatform(array('ios', 'android'))
                // 一般情況下,關于 audience 的設置只需要調用 addAlias、addTag、addTagAnd  或 addRegistrationId
                // 這四個方法中的某一個即可,這里僅作為示例,當然全部調用也可以,多項 audience 調用表示其結果的交集
                // 即是說一般情況下,下面三個方法和沒有列出的 addTagAnd 一共四個,只適用一個便可滿足大多數的場景需求

                ->addAlias($alias)
                ->setNotificationAlert($alert)
                ->iosNotification($ticket, array(
                    'sound' => 'sound.caf',
                    // 'badge' => '+1',
                    // 'content-available' => true,
                    // 'mutable-content' => true,
                    'category' => 'jiguang',
                    'extras' => array(
                        'key' => 'value',
                        'jiguang'
                    ),
                ))
                ->androidNotification($ticket, array(
                    'title' => $alert,
                    // 'build_id' => 2,
                    'extras' => array(
                        'key' => 'value',
                        'jiguang'
                    ),
                ))
                ->message($alert, array(
                    'title' => $alert,
                    // 'content_type' => 'text',
                    'extras' => array(
                        'key' => 'value',
                        'jiguang'
                    ),
                ))
                ->options(array(
                    // sendno: 表示推送序號,純粹用來作為 API 調用標識,
                    // API 返回時被原樣返回,以方便 API 調用方匹配請求與返回
                    // 這里設置為 100 僅作為示例

                    // 'sendno' => 100,

                    // time_to_live: 表示離線消息保留時長(秒),
                    // 推送當前用戶不在線時,為該用戶保留多長時間的離線消息,以便其上線時再次推送。
                    // 默認 86400 (1 天),最長 10 天。設置為 0 表示不保留離線消息,只有推送當前在線的用戶可以收到
                    // 這里設置為 1 僅作為示例

                    // 'time_to_live' => 1,

                    // apns_production: 表示APNs是否生產環(huán)境,
                    // True 表示推送生產環(huán)境,False 表示要推送開發(fā)環(huán)境;如果不指定則默認為推送生產環(huán)境

                    'apns_production' => $production_mode,

                    // big_push_duration: 表示定速推送時長(分鐘),又名緩慢推送,把原本盡可能快的推送速度,降低下來,
                    // 給定的 n 分鐘內,均勻地向這次推送的目標用戶推送。最大值為1400.未設置則不是定速推送
                    // 這里設置為 1 僅作為示例

                    // 'big_push_duration' => 1
                ))
                ->send();
            print_r($response);

        } catch (\JPush\Exceptions\APIConnectionException $e) {
            // try something here
            print $e;
        } catch (\JPush\Exceptions\APIRequestException $e) {
            // try something here
            print $e;
        }

    }

    static function pushAll($ticket='消息提醒',$alert){
        $appKey=Yii::app()->params['push']['AppKey'];
        $appMasterSecret=Yii::app()->params['push']['AppMasterSecret'];
        $production_mode=Yii::app()->params['push']['production_mode'];



        $client = new JPush($appKey, $appMasterSecret);


// 完整的推送示例
// 這只是使用樣例,不應該直接用于實際生產環(huán)境中 !!
        try {
            $response = $client->push()
                ->setPlatform(array('ios', 'android'))
                ->setAudience('all')
                // 一般情況下,關于 audience 的設置只需要調用 addAlias、addTag、addTagAnd  或 addRegistrationId
                // 這四個方法中的某一個即可,這里僅作為示例,當然全部調用也可以,多項 audience 調用表示其結果的交集
                // 即是說一般情況下,下面三個方法和沒有列出的 addTagAnd 一共四個,只適用一個便可滿足大多數的場景需求
                ->setNotificationAlert($alert)
                ->iosNotification($ticket, array(
                    'sound' => 'sound.caf',
                    // 'badge' => '+1',
                    // 'content-available' => true,
                    // 'mutable-content' => true,
                    'category' => 'jiguang',
                    'extras' => array(
                        'key' => 'value',
                        'jiguang'
                    ),
                ))
                ->androidNotification($ticket, array(
                    'title' => $alert,
                    // 'build_id' => 2,
                    'extras' => array(
                        'key' => 'value',
                        'jiguang'
                    ),
                ))
                ->message($alert, array(
                    'title' => $alert,
                    // 'content_type' => 'text',
                    'extras' => array(
                        'key' => 'value',
                        'jiguang'
                    ),
                ))
                ->options(array(
                    // sendno: 表示推送序號,純粹用來作為 API 調用標識,
                    // API 返回時被原樣返回,以方便 API 調用方匹配請求與返回
                    // 這里設置為 100 僅作為示例

                    // 'sendno' => 100,

                    // time_to_live: 表示離線消息保留時長(秒),
                    // 推送當前用戶不在線時,為該用戶保留多長時間的離線消息,以便其上線時再次推送。
                    // 默認 86400 (1 天),最長 10 天。設置為 0 表示不保留離線消息,只有推送當前在線的用戶可以收到
                    // 這里設置為 1 僅作為示例

                    // 'time_to_live' => 1,

                    // apns_production: 表示APNs是否生產環(huán)境,
                    // True 表示推送生產環(huán)境,False 表示要推送開發(fā)環(huán)境;如果不指定則默認為推送生產環(huán)境

                    'apns_production' => $production_mode,

                    // big_push_duration: 表示定速推送時長(分鐘),又名緩慢推送,把原本盡可能快的推送速度,降低下來,
                    // 給定的 n 分鐘內,均勻地向這次推送的目標用戶推送。最大值為1400.未設置則不是定速推送
                    // 這里設置為 1 僅作為示例

                    // 'big_push_duration' => 1
                ))
                ->send();
            print_r($response);

        } catch (\JPush\Exceptions\APIConnectionException $e) {
            // try something here
            print $e;
        } catch (\JPush\Exceptions\APIRequestException $e) {
            // try something here
            print $e;
        }

    }
}

三、調用NotifyPush.php里的方法,實現推送,如下代碼:

class CronNotifyPushCommand extends  CConsoleCommand{
    public $keys=array();
    public function init(){
        parent::init();
    }

    public function actionIndex(){
        echo 'start CronNotifyPushCommand '.chr(10);
        if(!Yii::app()->params['push']['push_status']){
            echo 'push status disabled';die();
        }
        $rkey='message_notify_list';
        $waitTotals=Fredis::model()->redis->lsize($rkey);
        echo 'wait totals:'.$waitTotals.chr(10);
        $waitResult=true;
        $i=0;
        while($waitResult) {$i++;
            echo $i.'/'.$waitTotals.' wait to do'.chr(10);
            $waitResult=Fredis::model()->redis->rpop($rkey);
            if(!$waitResult) {
                continue;
            }
            $db_data=unserialize($waitResult);var_dump($db_data);
            $message_content=$db_data['message_content'];
            $uid=$db_data['uid'];
            $alias=$uid;
            if($uid==0){
                NotifyPush::pushAll($message_content, $message_content);
            }else {
                NotifyPush::pushAlias($alias, $message_content, $message_content);
            }
        }

        echo 'end'.chr(10);
    }
}

感謝各位的閱讀!關于Yii1.1框架模擬PHP極光推送消息通知的案例就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI