基於Codeigniter的個推 PUSH 服務

weixin_34146805發表於2016-05-06

原創,原載於:https://www.skiy.net/201605064018.html

其實很簡單,只需要在將個推的 SDK 解壓到application/libraries/Getui/ 目錄下即可。
然後新建檔案application/libraries/Getui.php
再將Getui/IGt.Push.php引入即可。
使用方式和sdk下的demo一樣。

新建Getui.php的程式碼如下方式如下:

require "Getui/IGt.Push.php";

class Getui {}

我擴充套件封裝好的版本如下:

<?php
/**
 *
 * Getui.php
 * @author  : Skiychan <dev@skiy.net>
 * @link    : http://www.zzzzy.com
 * @created : 5/4/16
 * @modified:
 * @version : 0.0.1
 */

require "Getui/IGt.Push.php";

class Getui {
    private $_appid = "";
    private $_appkey = "";

    private $_title = "";
    private $_message = "";

    public function __construct() {}

    /**
     * 設定 app 資訊
     * @param $appid
     * @param $appkey
     */
    public function setKey($appid, $appkey) {
        $this->_appid = $appid;
        $this->_appkey = $appkey;
    }

    /**
     * 設定模板型別
     * @param $type
     * 1.通知透傳模板
     * 2.通知連結模板
     * 3.透傳模板
     * 4.通知彈框下載模板
     */
    public function setTemplate($type) {
        switch ($type) {
            case 1:  //通知透傳模板
                return $this->IGtNotificationTemplate();
                break;

            case 2:  //通知連結模板
                return $this->IGtLinkTemplate();
                break;

            case 3:  //透傳模板
                return $this->IGtTransmissionTemplate();
                break;

            case 4:  //通知彈框下載模板
                return $this->IGtNotyPopLoadTemplate();
                break;

            default: //通知透傳模板
                return $this->IGtNotificationTemplate();
        }
    }

    /**
     * 設定訊息內容
     * @param $title
     * @param $message
     */
    public function setInfo($title, $message) {
        $this->_title = $title;
        $this->_message = $message;
    }

    /**
     * 個推資訊體
     * @param string $template     設定推送訊息型別
     * @param int    $pushtype     推送型別 預設1(單個使用者),2(多個使用者), 3(單個應用下的所有使用者)
     * @param bool   $online       是否離線
     * @param int    $expire       離線時間
     * @param int    $worktype     設定是否根據WIFI推送訊息
     * @return IGtSingleMessage
     */
    public function setMessage($template, $pushtype=1, $online=false, $expire=3600*12*1000, $worktype=0) {
        switch ($pushtype) {
            case 2:  //支援對多個使用者進行推送,建議為50個使用者
                $message = new PushMessageToList();
                break;

            case 3:  //對單個應用下的所有使用者進行推送,可根據省份,標籤,機型過濾推送
                $message = new pushMessageToApp();
                break;

            default: //支援對單個使用者進行推送
                $message = new IGtSingleMessage();
        }

        $message->set_isOffline($online); //是否離線
        ($online == true) && $message->set_offlineExpireTime($expire);  //離線時間

        $message->set_data($template); //設定推送訊息型別
        $message->set_PushNetWorkType($worktype); //設定是否根據WIFI推送訊息,1為wifi推送,0為不限制推送

        return $message;
    }

    /**
     * 接收方
     * @param $client_id 裝置id
     * @return IGtTarget
     */
    public function setTarget($client_id, $alias="") {
        $target = new IGtTarget();
        $target->set_appId($this->_appid);
        $target->set_clientId($client_id);

        empty($alias) || $target->set_alias($alias);

        return $target;
    }

    /**
     * 通知彈框下載功能模板
     * @return IGtNotyPopLoadTemplate
     */
    public function IGtNotyPopLoadTemplate(){
        $template =  new IGtNotyPopLoadTemplate();

        $template ->set_appId($this->_appid);//應用appid
        $template ->set_appkey($this->_appkey);//應用appkey
        //通知欄
        $template ->set_notyTitle($this->_title);//通知欄標題
        $template ->set_notyContent($this->_message);//通知欄內容
        $template ->set_notyIcon("");//通知欄logo
        $template ->set_isBelled(true);//是否響鈴
        $template ->set_isVibrationed(true);//是否震動
        $template ->set_isCleared(true);//通知欄是否可清除
        //彈框
        $template ->set_popTitle($this->_title);//彈框標題
        $template ->set_popContent($this->_message);//彈框內容
        $template ->set_popImage("");//彈框圖片
        $template ->set_popButton1("下載");//左鍵
        $template ->set_popButton2("取消");//右鍵
        //下載
        $template ->set_loadIcon("");//彈框圖片
        $template ->set_loadTitle($this->_title);
        $template ->set_loadUrl("http://192.168.1.181/download/ekong_v2.0.7.apk");

        $template ->set_isAutoInstall(false);
        $template ->set_isActived(true);

        //$template->set_duration(BEGINTIME,ENDTIME); //設定ANDROID客戶端在此時間區間內展示訊息

        return $template;
    }

    /**
     * 通知開啟連結功能模板
     * @return IGtLinkTemplate
     */
    public function IGtLinkTemplate(){
        $template =  new IGtLinkTemplate();
        $template->set_appId($this->_appid);//應用appid
        $template->set_appkey($this->_appkey);//應用appkey
        $template->set_title($this->_title);//通知欄標題
        $template->set_text($this->_message);//通知欄內容
        $template ->set_logo("");//通知欄logo
        $template ->set_isRing(true);//是否響鈴
        $template ->set_isVibrate(true);//是否震動
        $template ->set_isClearable(true);//通知欄是否可清除
        $template ->set_url("http://www.igetui.com/");//開啟連線地址
        //$template->set_duration(BEGINTIME,ENDTIME); //設定ANDROID客戶端在此時間區間內展示訊息
        //iOS推送需要設定的pushInfo欄位
//        $apn = new IGtAPNPayload();
//        $apn->alertMsg = "alertMsg";
//        $apn->badge = 11;
//        $apn->actionLocKey = "啟動";
//    //        $apn->category = "ACTIONABLE";
//    //        $apn->contentAvailable = 1;
//        $apn->locKey = "通知欄內容";
//        $apn->title = "通知欄標題";
//        $apn->titleLocArgs = array("titleLocArgs");
//        $apn->titleLocKey = "通知欄標題";
//        $apn->body = "body";
//        $apn->customMsg = array("payload"=>"payload");
//        $apn->launchImage = "launchImage";
//        $apn->locArgs = array("locArgs");
//
//        $apn->sound=("test1.wav");;
//        $template->set_apnInfo($apn);
        return $template;
    }

    /**
     * 通知透傳功能模板
     * @return IGtNotificationTemplate
     */
    public function IGtNotificationTemplate(){
        $template =  new IGtNotificationTemplate();
        $template->set_appId($this->_appid);//應用appid
        $template->set_appkey($this->_appkey);//應用appkey
        $template->set_transmissionType(1);//透傳訊息型別
        $template->set_transmissionContent($this->_message);//透傳內容
        $template->set_title($this->_title);//通知欄標題
        $template->set_text($this->_message);//通知欄內容
        //$template->set_logo("https://www.ekong366.com/static/img/index_logo.png");//通知欄logo
        $template->set_isRing(true);//是否響鈴
        $template->set_isVibrate(true);//是否震動
        $template->set_isClearable(true);//通知欄是否可清除
        //$template->set_duration(BEGINTIME,ENDTIME); //設定ANDROID客戶端在此時間區間內展示訊息
        //iOS推送需要設定的pushInfo欄位
//        $apn = new IGtAPNPayload();
//        $apn->alertMsg = "alertMsg";
//        $apn->badge = 11;
//        $apn->actionLocKey = "啟動";
//    //        $apn->category = "ACTIONABLE";
//    //        $apn->contentAvailable = 1;
//        $apn->locKey = "通知欄內容";
//        $apn->title = "通知欄標題";
//        $apn->titleLocArgs = array("titleLocArgs");
//        $apn->titleLocKey = "通知欄標題";
//        $apn->body = "body";
//        $apn->customMsg = array("payload"=>"payload");
//        $apn->launchImage = "launchImage";
//        $apn->locArgs = array("locArgs");
//
//        $apn->sound=("test1.wav");;
//        $template->set_apnInfo($apn);
        return $template;
    }

    /**
     * 透傳功能模板
     * @return IGtTransmissionTemplate
     * @throws Exception
     */
    public function IGtTransmissionTemplate(){
        $template =  new IGtTransmissionTemplate();
        $template->set_appId($this->_appid);//應用appid
        $template->set_appkey($this->_appkey);//應用appkey
        $template->set_transmissionType(1);//透傳訊息型別
        $template->set_transmissionContent($this->_message);//透傳內容
        //$template->set_duration(BEGINTIME,ENDTIME); //設定ANDROID客戶端在此時間區間內展示訊息
        //APN簡單推送
//        $template = new IGtAPNTemplate();
//        $apn = new IGtAPNPayload();
//        $alertmsg=new SimpleAlertMsg();
//        $alertmsg->alertMsg="";
//        $apn->alertMsg=$alertmsg;
////        $apn->badge=2;
////        $apn->sound="";
//        $apn->add_customMsg("payload","payload");
//        $apn->contentAvailable=1;
//        $apn->category="ACTIONABLE";
//        $template->set_apnInfo($apn);
//        $message = new IGtSingleMessage();

        //APN高階推送
        $apn = new IGtAPNPayload();
        $alertmsg=new DictionaryAlertMsg();
        $alertmsg->body="body";
        $alertmsg->actionLocKey="ActionLockey";
        $alertmsg->locKey="LocKey";
        $alertmsg->locArgs=array("locargs");
        $alertmsg->launchImage="launchimage";
//        IOS8.2 支援
        $alertmsg->title="Title";
        $alertmsg->titleLocKey="TitleLocKey";
        $alertmsg->titleLocArgs=array("TitleLocArg");

        $apn->alertMsg=$alertmsg;
        $apn->badge=7;
        $apn->sound="";
        $apn->add_customMsg("payload","payload");
        $apn->contentAvailable=1;
        $apn->category="ACTIONABLE";
        $template->set_apnInfo($apn);

        return $template;
    }

}

相關文章