Thinkphp5.0整合個推例子

最近作一個後臺發送消息推送到app(android和ios)的功能,該功能採用的是個推接口,基於php的,我用TP5來實現這個推送流程。先看官方demo吧。能夠先參考官方給到的例子來看http://docs.getui.com/getui/server/php/push/php

因爲該APP下載量比較大,考慮到要推送給全部下載app的用戶,因此這裏就不能用針對於單個用戶進行推送了,必須針對應用羣體進行推送。場景以下:html

 

 文檔中給到的php例子是這個:前端

<?php
//消息推送Demo
header("Content-Type: text/html; charset=utf-8");
require_once(dirname(__FILE__) . '/' . 'IGt.Push.php');
define('APPKEY','請輸入您的APPKEY');
define('APPID','請輸入您的APPID');
define('MASTERSECRET','請輸入您的MASTERSECRET');
define('HOST','http://sdk.open.api.igexin.com/apiex.htm');
define('CID','請輸入您的CID');
pushMessageToApp();
function pushMessageToApp(){
    $igt = new IGeTui(HOST,APPKEY,MASTERSECRET);
    $template = IGtLinkTemplateDemo();
    //個推信息體
    //基於應用消息體
    $message = new IGtAppMessage();
    $message->set_isOffline(true);
    $message->set_offlineExpireTime(10 * 60 * 1000);//離線時間單位爲毫秒,例,兩個小時離線爲3600*1000*2
    $message->set_data($template);

    $appIdList=array(APPID);
    $phoneTypeList=array('ANDROID');
    $provinceList=array('浙江');
    $tagList=array('haha');

    $cdt = new AppConditions();
    $cdt->addCondition(AppConditions::PHONE_TYPE, $phoneTypeList);
    $cdt->addCondition(AppConditions::REGION, $provinceList);
    $cdt->addCondition(AppConditions::TAG, $tagList);

    $message->set_appIdList($appIdList);
    $message->set_conditions($cdt);

    $rep = $igt->pushMessageToApp($message);

    var_dump($rep);
    echo ("<br><br>");
}

function IGtLinkTemplateDemo(){
    $template =  new IGtLinkTemplate();
    $template ->set_appId(APPID);//應用appid
    $template ->set_appkey(APPKEY);//應用appkey
    $template ->set_title("請輸入通知標題");//通知欄標題
    $template ->set_text("請輸入通知內容");//通知欄內容
    $template ->set_logo("");//通知欄logo
    $template ->set_isRing(true);//是否響鈴
    $template ->set_isVibrate(true);//是否震動
    $template ->set_isClearable(true);//通知欄是否可清除
    $template ->set_url("http://www.getui.com/");//打開鏈接地址
    //$template->set_notifyStyle(0);
    //$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;
}
?>

而後下載sdk,下載地址:http://docs.getui.com/download.htmlandroid

而後看我本身實現流程:ios

當我在後臺對某一條消息進行推送的時候 利用ajax傳過來消息標題和內容,在控制器中用一個方法去接收:ajax

//手機推送
    public function pushPhone()
    {
        $this->base();
        if ($this->token == 2) {
            return '';
        }
        $list_id = Request::instance()->param('list_id');
        $list_title = Request::instance()->param('list_title');
        $info = new geTui();//實例化個推類
        $listId = [
            'type' => 'list',
            'value' => $list_id,
            'title' => '消息標題',
            'content' => $list_title,//消息內容
        ];
        $res = $info->pushMessageToApp($listId);/調用推送類
       
        if ($res['result'] == 'ok') {
            return ['code' => '1', 'msg' => '推送成功!'];
        } else {
            return ['code' => '0', 'msg' => '推送失敗!'];
        }
    }

看一下這個geTui類存放位置以及代碼:json

我把下載的sdk放在extend文件夾下了。api

而後從新建立了一個名爲geTui的php文件app

<?php
namespace app\push;
use think\Loader;

class GeTui
{
    private $host = 'http://sdk.open.api.igexin.com/apiex.htm';

    //測試
    private $appkey = '';
    private $appid = '';
    private $mastersecret = '';

    //羣推接口案例
    function pushMessageToApp($mes,$listId){
        import('getui.IGt', '', '.Push.php');
        $igt = new \IGeTui($this->host, $this->appkey, $this->mastersecret);
        $template = $this->IGtTransmissionTemplateDemos($mes,$listId);
        //$template = IGtLinkTemplateDemo();
        //個推信息體
        //基於應用消息體
        Loader::import('getui\igetui\IGT.AppMessage', EXTEND_PATH);
        $message = new \IGtAppMessage();
        $message->set_isOffline(true);
        $message->set_offlineExpireTime(10 * 60 * 1000);//離線時間單位爲毫秒,例,兩個小時離線爲3600*1000*2
        $message->set_data($template);

        $appIdList=array($this -> appid);
        $phoneTypeList=array('ANDROID');//忽略了
        $provinceList=array('浙江');//這個也忽略了
        $tagList=array('haha');
        //用戶屬性
        //$age = array("0000", "0010");


        //$cdt = new AppConditions();
        // $cdt->addCondition(AppConditions::PHONE_TYPE, $phoneTypeList);
        // $cdt->addCondition(AppConditions::REGION, $provinceList);
        //$cdt->addCondition(AppConditions::TAG, $tagList);
        //$cdt->addCondition("age", $age);

        $message->set_appIdList($appIdList);
        //$message->set_conditions($cdt->getCondition());

        $rep = $igt->pushMessageToApp($message);

        return $rep;
    }

//全部推送接口均支持四個消息模板,依次爲通知彈框下載模板,通知連接模板,通知透傳模板,透傳模板
//注:IOS離線推送需經過APN進行轉發,需填寫pushInfo字段,目前僅不支持通知彈框下載功能

    function IGtTransmissionTemplateDemos($mes,$listId){
        import('getui.IGt', '', '.Push.php');//引入sdk文件
        $template =  new \IGtTransmissionTemplate();
        $template->set_appId($this -> appid);//應用appid
        $template->set_appkey($this->appkey);//應用appkey
        $template->set_transmissionType(2);//透傳消息類型
        $template->set_transmissionContent(json_encode($listId));//透傳內容

        //APN高級推送
        Loader::import('getui\igetui\IGT.APNPayload', EXTEND_PATH);
        $apn = new \IGtAPNPayload();
        $alertmsg=new \DictionaryAlertMsg();
        $alertmsg->body=$mes['content'];
        $alertmsg->actionLocKey="查看";
        $alertmsg->locKey=$listId['content'];
        $alertmsg->locArgs=array("locargs");
        $alertmsg->launchImage="launchimage";
//        IOS8.2 支持
        $alertmsg->title=$mes['title'];
        $alertmsg->titleLocKey="電力頭條";
        $alertmsg->titleLocArgs=array("TitleLocArg");

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

        //PushApn老方式傳參
//    $template = new IGtAPNTemplate();
//          $template->set_pushInfo("", 10, "", "com.gexin.ios.silence", "", "", "", "");

        return $template;
    }

}

好了,若是前端(android和ios)都以及作好接收處理的話,應該是沒問題的了,該案例應用場景於因此下載app的客戶,包含註冊和未註冊的,若是是針對於全部以及註冊的用戶進行推送的話 建議使用對單個用戶進行推送消息。測試

 

本文屬原創內容,爲了尊重他人勞動,轉載請註明本文地址:

http://www.cnblogs.com/luokakale/p/9047032.html

相關文章
相關標籤/搜索