在Laravel中集成腾讯云 移动(APP)推送(TPNS) 
                                                    
                        
                    
                    
  
                    
                    看了下腾讯云推送的文档,没有php的sdk,只好自己写了
- 封装类
 
<?php
/**
 * Created by PhpStorm.
 * User: wqg
 * Date: 2019-03-04
 * Time: 12:45
 */
namespace App\Utility;
use App\Models\User;
class Push
{
//腾讯的推送服务,安卓和ios两个端对应是两个应用,当后端推送时,无法知道用户是ios设备还是安卓设备,只能两端都发送一下
    private $android_access_id = '';
    private $android_secret_key = '';
    private $ios_access_id = '';
    private $ios_secret_key = '';
    private $url = 'https://api.tpns.tencent.com/v3/push/app';
    //签名
    public function sign($body,$time, $type = 'android')
    {
        if ($type == 'android') {
            $str = $time . $this->android_access_id . $body;
            return base64_encode(hash_hmac('sha256', $str, $this->android_secret_key));
        } else {
            $str = $time . $this->ios_access_id . $body;
            return base64_encode(hash_hmac('sha256', $str, $this->ios_secret_key));
        }
    }
    /**
     * @param $user_id
     * @param $title
     * @param $content
     * @param array $params
     * @return bool|mixed
     * 发送消息至安卓设备
     */
   public function sendToAndroid($user_id, $title, $content, $params = [])
   {
        $user = User::find($user_id);
        if (!$user || !$user->tpns_token) {
        //获取用户推送的唯一标示
            return false;
        }
       $message = [
           'title'  => $title,
           'content'    =>  $content,
       ];
       if (count($params)) {
           $message['android']['custom_content'] = json_encode($params);
        }
        $data = [
            'audience_type' =>  'token',
            'token_list'    =>  [$user->tpns_token],
            'message_type' =>  'notify',
            'message' =>  $message,
        ];
        $time = time();
        $data = json_encode($data, JSON_UNESCAPED_UNICODE);
        $sign = $this->sign($data, $time, 'android');
        $header = [
            'AccessId:'.$this->android_access_id,
            'TimeStamp:'.$time,
            'Sign:'.$sign
        ];
        return httpRequest($this->url,$data,false,$header );
   }
    /**
     * @param $user_id
     * @param $title
     * @param $content
     * @param array $params
     * @return bool|mixed
     * 发送推送至ios设备
     */
    public function sendToIos($user_id, $title, $content, $params = [])
    {
        $user = User::find($user_id);
        if (!$user || !$user->tpns_token) {
            return false;
        }
        $message = [
            'title'  => $title,
            'content'    =>  $content,
            'ios'   =>  [
                'aps' => [
                    'badge_type'    =>  1,
                ]
            ]
        ];
        if (count($params)) {
            $message['ios']['custom_content'] = json_encode($params);
        }
        $data = [
            'audience_type' =>  'token',
            'token_list'    =>  [$user->tpns_token],
            'message_type' =>  'notify',
            'message' =>  $message,
            'environment'   =>  'dev'//product
        ];
        $time = time();
        $data = json_encode($data, JSON_UNESCAPED_UNICODE);
        $sign = $this->sign($data, $time, 'ios');
        $header = [
            'AccessId:'.$this->ios_access_id,
            'TimeStamp:'.$time,
            'Sign:'.$sign
        ];
        return httpRequest($this->url,$data,false,$header );
    }
}
- 调用
$push = new \App\Utility\Push(); $push->sendToIos($this->user_id,$this->title,$this->content,$this->params); $push->sendToAndroid($this->user_id,$this->title,$this->content,$this->params); 
本作品采用《CC 协议》,转载必须注明作者和本文链接
          
                    
                    
          
          
                关于 LearnKu
              
                    
                    
                    
 
推荐文章: