极光推送案例

参考:http://docs.jpush.io/server/php_sdk/ Thinkphp推送类(需要下载vendor)

push()
            ->setPlatform(M\Platform('ios'))
            ->setAudience(M\all)
            ->setNotification(M\notification($message))
//             ->printJSON()
            ->send();
            return $result->json;
        } catch (APIRequestException $e) {//推送失败调试时候可以打开
            //             $br = '\n';
//             echo 'Push Fail.' . $br;
//             echo 'Http Code : ' . $e->httpCode . $br;
//             echo 'code : ' . $e->code . $br;
//             echo 'Error Message : ' . $e->message . $br;
//             echo 'Response JSON : ' . $e->json . $br;
//             echo 'rateLimitLimit : ' . $e->rateLimitLimit . $br;
//             echo 'rateLimitRemaining : ' . $e->rateLimitRemaining . $br;
//             echo 'rateLimitReset : ' . $e->rateLimitReset . $br;
            return false;
        } catch (APIConnectionException $e) {
//             $br = "\n";
//             echo 'Push Fail: ' . $br;
//             echo 'Error Message: ' . $e->getMessage() . $br;
//             echo 'IsResponseTimeout: ' . $e->isResponseTimeout . $br;
            return false;
        }
        return false;
    }
    /**
     * 推送信息到指定用户 (备注:一次最多只能推送1000个RegID)
     * @param String $message    消息
     * @param Array  $users    用户编号
     * @param Boolean $all     是否推送该用户所有设备 默认推送所有 否则推送最新的一个 
     * @return boolean
     */
    public static function sendToUser($message, $users, $all = true) {
        if(empty($message) || empty($users) || !is_array($users)) {
            return false;
        }
        $audience = $list =  array();
        $map['user_id'] = array('in', $users);
        if($all) {
            $list = M(self::USER_TABLE)->field(self::USER_REGID_FIELD)->where($map)->select();
        } else {
            $list = M(self::USER_TABLE)->field(self::USER_REGID_FIELD)->where($map)->limit(1)->order(self::USER_TABLE_ORDER)->select();
        }
        if($list) {
            foreach ($list as $v) {
                if(trim($v[self::USER_REGID_FIELD])) {
                    $audience[] = $v[self::USER_REGID_FIELD];
                }
            }
        }
        if(!$audience && $audience[0]) {
            return false;
        }
        return self::sendToRegistrationId($message, $audience);
    }
    /**
     * 推送消息到指定IOS设备 最多一次推送1000
     * 备注参考:http://docs.jpush.io/server/rest_api_v3_push/
     */
    public static function sendToRegistrationId($message,$audience) {
        if(empty($message) || empty($audience) || !is_array($audience)) {
            return false;
        }
        try {
            $client = new JPushClient(self::APP_KEY, self::MASTER_SECRET);
            $result = $client->push()
            ->setPlatform(M\platform('ios'))
            ->setNotification(M\notification($message))
            ->setAudience(M\registration_id($audience))
            //->printJSON()
            ->send();
            return $result->json;
        } catch (APIRequestException $e) {
//             $br = '\n';
//             echo 'Push Fail.' . $br;
//             echo 'Http Code : ' . $e->httpCode . $br;
//             echo 'code : ' . $e->code . $br;
//             echo 'Error Message : ' . $e->message . $br;
//             echo 'Response JSON : ' . $e->json . $br;
//             echo 'rateLimitLimit : ' . $e->rateLimitLimit . $br;
//             echo 'rateLimitRemaining : ' . $e->rateLimitRemaining . $br;
//             echo 'rateLimitReset : ' . $e->rateLimitReset . $br;
            return false;
        } catch (APIConnectionException $e) {
//             $br = "\n";
//             echo 'Push Fail: ' . $br;
//             echo 'Error Message: ' . $e->getMessage() . $br;
//             echo 'IsResponseTimeout: ' . $e->isResponseTimeout . $br;
//             return false;
        }
        return false;
    }
    /**
     * 向消息队列压入推送任务 1 推送所有  2推送指定设备  3推送指定用户
     * @param String $message    推送内容
     * @param Int $type          推送类型
     * @param Array $ext         推送用户编号或RegID
     * @return boolean
     */
    public function pushMessage($message, $type = self::SEND_TO_ALL, $ext = array()) {
        if(empty($message) || !in_array($type, array(self::SEND_TO_ALL,self::SEND_TO_REG,self::SEND_TO_USER))) {
            return false;
        }
        try {
            $redis = new Redis;
            $redis->connect('127.0.0.1', 6379);
            $data['message'] = $message;
            $data['type'] = $type;
            $data['ext'] = $ext;
            $pushData = json_encode($data);
            return $redis->lPush(self::REDIS_PUSH_MESSAGE_KEY, $pushData);//队列左边添加元素
        } catch (\Exception $e) {
//             echo $e->getMessage();
            return false;
        }
        return false;
    }
    
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏魏琼东

分布式消息总线,基于.NET Socket Tcp的发布-订阅框架之离线支持,附代码下载

     在前面的分享一个分布式消息总线,基于.NET Socket Tcp的发布-订阅框架,附代码下载一文之中给大家分享和介绍了一个极其简单也非常容易上的基于...

12400
来自专栏一个爱瞎折腾的程序猿

asp.net core使用Swashbuckle.AspNetCore(swagger)生成接口文档

开局一张图,然后开始编,一些基本的asp.net core东西就不再赘述,本文只对Swashbuckle.AspNetCore的几个使用要点进行描述。

18810
来自专栏开发技术

spring集成mybatis实现mysql读写分离

       在网站的用户达到一定规模后,数据库因为负载压力过高而成为网站的瓶颈。幸运的是目前大部分的主流数据库都提供主从热备功能,通过配置两台数据库主从关系,...

17610
来自专栏冷冷

【springboot】 springboot 整合mybatis-plus

springboot整和mybatis-plus 整合步骤 1.pom.xml 添加mp依赖 <!-- mybatis-plus begin --> <depe...

50090
来自专栏非典型程序猿

Golang任务队列machinery使用与源码剖析(二)

在Golang任务队列machinery使用与源码剖析(一)一文中,我们主要对golang中任务队列machinery的设计结构以及具体模块的功能与源码实现进行...

1.6K80
来自专栏老码农专栏

ActFramework R1.4.0 带来 WebSocket 的支持

12130
来自专栏Java帮帮-微信公众号-技术文章全总结

JavaWeb11-jsp.cookie.session(1)

? Jsp&cookie & session 一.jsp 1. jsp的介绍 JSP全名为Java Server Pages,中文名叫java服务器页面,本质...

30550
来自专栏乐沙弥的世界

快速体验mongoDB分片

1、mongodb分片的实质是将数据分散到不同的物理机器,以分散IO,提供并发与吞吐量 2、mongodb分片依赖于片键,即任意一个需要开启的集合都需要创建...

17820

访问数据 - 反应方式(Vert.x入门的第4部分)

原文地址:https://dzone.com/articles/accessing-data-the-reactive-way

1.2K40
来自专栏郭少华

Spring boot Mybatis-XML方式使用Druid连接池(四)

41340

扫码关注云+社区

领取腾讯云代金券