在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 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!