uniPush+Im环信消息+php(tp5)后端在线离线消息推送手机

1.引入unipush包
composer require getuilaboratory/getui-pushapi-php-client-v2
如果报错
composer require getuilaboratory/getui-pushapi-php-client-v2 dev-master
2.设置环信消息回调接口通过json接口

设置环信消息回调需要登陆:https://console.easemob.com/app/im-service/func/callback

 

 

2.1拿到发送消息回调信息
public function  transfer(){
    $dataJson = file_get_contents("php://input");
    //接受发送消息
    $dataArr = json_decode($dataJson, true);

}

  

3.用户绑定clientId  (前段传给clientId设备)
public function imBinding(){
//        $uid = $this->user->id;
        $uid = $this->request->param('id');
        $client_id = $this->request->param('client_id');
        if (!$client_id){
            $this->error("缺少client_id参数!");
        }
        $info = $this->UserModel->where('id',$uid)->find();
        if (empty($info)){
            $this->error('错误信息');
        }
        $user = $this->UserModel->where('client_id',$client_id)->select();
        if ($user){
            $this->UserModel->where('client_id',$client_id)->update(['client_id' => '']);
        }
        $data = [
            'client_id' => $client_id,
            'updatetime' => time(),
        ];
        $rs = $this->UserModel->where('id',$uid)->update($data);
        if ($rs){
            $this->success('请求成功!');
        }
        $this->error('报错报错!');
    }

 

  

4.消息推送 
注:AppKey,AppID,MasterSecret在https://dev.dcloud.net.cn/pages/common/login申请
public function  pushSend($client_id,$title,$content,$url){
        $api = new \GTClient("https://restapi.getui.com","VOHGFoiutq7sQo7fmxx2B1", "kZusa4Kptd9tK4ku4wcg53","bWGYMd6lTk84I8BXQumYm4");
        $push  = new \GTPushRequest();
        $push->setRequestId(md5(time() . mt_rand(1, 9999999)));//请求唯一标识号,10-32位之间;如果request_id重复,会导致消息丢失
        $message    = new \GTPushMessage();//个推推送
        $channel    = new \GTPushChannel();//厂商推送
        //配置推送条件
        $setting    = new \GTSettings();//settings 推送条件设置
        $str        = new \GTStrategy();//strategy 厂商下发策略选择
        //默认所有通道的策略选择1-4
        //1: 表示该消息在用户在线时推送个推通道,用户离线时推送厂商通道;
        //2: 表示该消息只通过厂商通道策略下发,不考虑用户是否在线;
        //3: 表示该消息只通过个推通道下发,不考虑用户是否在线;
        //4: 表示该消息优先从厂商通道下发,若消息内容在厂商通道代发失败后会从个推通道下发。
        //其中名称可填写: ios、st、hw、xm、vv、mz、op。
        $str->setDefault($str::STRATEGY_THIRD_FIRST);
        $setting->setStrategy($str);
        $push->setSettings($setting);
        $setting->setTtl(3600000); //消息有效期,走厂商消息需要设置该值

        //ios厂商通道参数设置
        $iosDto = new \GTIos();
        $aps    = new \GTAps();//推送通知消息内容
        $alert  = new \GTAlert();//通知消息
        $alert->setTitle($title);//通知消息标题
        $alert->setBody($content);//通知消息内容
        $aps->setContentAvailable(0);
        $aps->setSound("default");
        $aps->setAlert($alert);
        $iosDto->setAps($aps);
        $iosDto->setType("notify");
        $channel->setIos($iosDto);

        //android厂商通道参数设置
        $androidDto     = new \GTAndroid();
        $ups            = new \GTUps();//推送通知消息内容
        $notification   = new \GTThirdNotification();//通知消息
        $notification->setTitle($title);
        $notification->setBody($content);
        $clickType  = 'payload';
        $notification->setClickType($notification::CLICK_TYPE_PAYLOAD);//这里直接默认设置成了打开app
        if($clickType == 'payload' || $clickType == 'payload_custom'){ //自定义消息 打开APP和不打开APP
            $notification->setClickType($clickType);
            $notification->setPayload($url);
        }else if($clickType == 'url'){  //打开URL
            $notification->setClickType($clickType);
            $notification->setUrl('');
        }else if($clickType == 'intent'){  //打开特定页面
            $notification->setClickType($clickType);
            $notification->setIntent('');
        }else{
            $notification->setClickType($clickType);
        }
        $ups->setNotification($notification);
        $androidDto->setUps($ups);
        $channel->setAndroid($androidDto);
        //设置厂商推送消息参数
        $push->setPushChannel($channel);

        //个推参数设置
        $notify     = new \GTNotification();//消息设置
        $notify->setTitle($title);//通知标题  长度 ≤ 50
        $notify->setBody($content);//通知内容  长度 ≤ 256
        //1、intent:打开应用内特定页面url:打开网页地址。
        //2、payload:自定义消息内容启动应用。
        //3、payload_custom:自定义消息内容不启动应用。
        //4、startapp:打开应用首页。
        //5、none:纯通知,无后续动作
        $notify->setClickType("payload");
        $notify->setPayload($url);


        $message->setNotification($notify);
        $push->setPushMessage($message);

        $push->setCid($client_id);
        $result = $api->pushApi()->pushToSingleByCid($push);
        return $result['msg'];
    }

  

posted @ 2024-02-26 18:10  丶XianGang  阅读(96)  评论(0编辑  收藏  举报