php使用個推

首先,弄清楚概念

透傳:只用把服務器使用API發送的數據推到個推服務器,不管客戶端的情況(手機黑屏,或者app退出後臺),這時候客戶端可以拿到數據並且自己處理.
分爲用戶有感知透傳(通知欄)和無感知透傳(微信朋友圈中經常出現的小紅點)

通知:直接把用戶的消息在通知欄展示出來,客戶端無法進行相應的處理操作

APN:我理解的就是蘋果手機都是用這種傳輸的
https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/PayloadKeyReference.html

使用app推送的6中情況

      1.手機黑屏,app不在後臺運行
      2.手機黑屏,app在後臺運行
      3.手機不黑屏,app不在後臺運行
      4.手機不黑屏,app在後臺運行
      5.手機黑屏,app正在運行(打開界面)
      6.手機不黑屏,app正在運行(打開當前app的界面)

除了第6種使用的是set_transmissionContent,其他的都使用了 apn

代碼

composer下載個推的文件夾放到如下文件夾下面

在這裏插入圖片描述
在控制器中創建如下代碼(支持安卓和IOS)

<?php

namespace Service\Controller;
use Base\Webbase;


class GetuiController extends Webbase {
    private $host;
    private $appkey;
    private $appid;
    private $mastersecret;
    public function __construct()
    {
        //http的域名
        $this->host = 'http://sdk.open.api.igexin.com/apiex.htm';
        //定義常量, appId、appKey、masterSecret 採用本文檔 "第二步 獲取訪問憑證 "中獲得的應用配置
        $this->appkey = '你自己的appkey ';
        $this->appid = '你自己的appid ';
        $this->mastersecret = '你自己的mastersecret ';
    }
    //羣推接口案例
    public function pushMessageToApp($users,$listId){
        vendor("getuilaboratory.getui-pushapi-php-client.IGt#Push");
        $igt = new \IGeTui($this->host,$this->appkey,$this->mastersecret);
        //消息模版:
        $template = $this->IGtNotificationTemplateDemo($listId);
        //        IOS8.2 支持
        $apn = new \IGtAPNPayload();
        $alertmsg=new \DictionaryAlertMsg();
        $alertmsg->body= $listId['msg'];
        $alertmsg->actionLocKey="actionLocKey";
        $alertmsg->locKey='locKey';
        $alertmsg->locArgs=array("locargs");
        $alertmsg->launchImage="launchimage";
        $alertmsg->title=$listId['title'];
        $alertmsg->titleLocKey="titleLocKey";
        $alertmsg->titleLocArgs=array("TitleLocArg");
        $apn->alertMsg=$alertmsg;
        $apn->badge=1;
        $apn->add_customMsg("payload",$listId['id']);
        $apn->contentAvailable=1;  //推送直接帶有透傳數據
        $apn->category="ACTIONABLE";
        $template->set_apnInfo($apn);

        //定義"SingleMessage"
//        $message = new \IGtSingleMessage();  //單個用戶推送
        $message = new \IGtListMessage();   //多個用戶推送
        $message->set_isOffline(true);//是否離線
        $message->set_offlineExpireTime(3600*12*1000);//離線時間
        $message->set_data($template);//設置推送消息類型

        $contentId = $igt->getContentId($message);
//        //接收方
        foreach ($users as $Alias){
            $target = new \IGtTarget();
            $target->set_appId($this->appid);
            $target->set_alias($Alias);
            $targetList[] = $target;
        }
        try {
            //$rep = $igt->pushMessageToSingle($message, $target);
            $rep = $igt->pushMessageToList($contentId, $targetList);
            var_dump($rep);
            echo ("<br><br>");
        }catch(RequestException $e){
            $requstId = $e.getRequestId();
            //失敗時重發
            $rep = $igt->pushMessageToSingle($message, $target,$requstId);
            var_dump($rep);
            echo ("<br><br>");
        }

    }
    public function IGtNotificationTemplateDemo($listId){
        // $template =  new \IGtNotificationTemplate();
        $template =  new \IGtTransmissionTemplate();     //**4個模板的類型一定要弄清楚**   上面的個推會發送兩條
        $template->set_appId($this->appid);                   //應用appid
        $template->set_appkey($this->appkey);                 //應用appkey
        $template->set_transmissionType(1);            //透傳消息類型
        $listId = json_encode($listId,JSON_UNESCAPED_UNICODE);
        $template->set_transmissionContent($listId);//透傳內容
        return $template;
    }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章