一、下载极光推送PHP SDK,解压后放在/protected/components/目录下,如下图所示:

二、完善修改下官方的demo例子,我这里复制一份demo,改为NotifyPush.php,如下代码:

  1. <?php
  2. require dirname(__FILE__) . '/jpush-api-php-client/autoload.php';
  3. use JPush\Client as JPush;
  4. class NotifyPush {
  5. static function pushAlias($alias,$ticket='消息提醒',$alert){
  6. $appKey=Yii::app()->params['push']['AppKey'];
  7. $appMasterSecret=Yii::app()->params['push']['AppMasterSecret'];
  8. $production_mode=Yii::app()->params['push']['production_mode'];
  9.  
  10. $client = new JPush($appKey, $appMasterSecret);
  11.  
  12. // 完整的推送示例
  13. // 这只是使用样例,不应该直接用于实际生产环境中 !!
  14. try {
  15. $response = $client->push()
  16. ->setPlatform(array('ios', 'android'))
  17. // 一般情况下,关于 audience 的设置只需要调用 addAlias、addTag、addTagAnd 或 addRegistrationId
  18. // 这四个方法中的某一个即可,这里仅作为示例,当然全部调用也可以,多项 audience 调用表示其结果的交集
  19. // 即是说一般情况下,下面三个方法和没有列出的 addTagAnd 一共四个,只适用一个便可满足大多数的场景需求
  20.  
  21. ->addAlias($alias)
  22. ->setNotificationAlert($alert)
  23. ->iosNotification($ticket, array(
  24. 'sound' => 'sound.caf',
  25. // 'badge' => '+1',
  26. // 'content-available' => true,
  27. // 'mutable-content' => true,
  28. 'category' => 'jiguang',
  29. 'extras' => array(
  30. 'key' => 'value',
  31. 'jiguang'
  32. ),
  33. ))
  34. ->androidNotification($ticket, array(
  35. 'title' => $alert,
  36. // 'build_id' => 2,
  37. 'extras' => array(
  38. 'key' => 'value',
  39. 'jiguang'
  40. ),
  41. ))
  42. ->message($alert, array(
  43. 'title' => $alert,
  44. // 'content_type' => 'text',
  45. 'extras' => array(
  46. 'key' => 'value',
  47. 'jiguang'
  48. ),
  49. ))
  50. ->options(array(
  51. // sendno: 表示推送序号,纯粹用来作为 API 调用标识,
  52. // API 返回时被原样返回,以方便 API 调用方匹配请求与返回
  53. // 这里设置为 100 仅作为示例
  54.  
  55. // 'sendno' => 100,
  56.  
  57. // time_to_live: 表示离线消息保留时长(秒),
  58. // 推送当前用户不在线时,为该用户保留多长时间的离线消息,以便其上线时再次推送。
  59. // 默认 86400 (1 天),最长 10 天。设置为 0 表示不保留离线消息,只有推送当前在线的用户可以收到
  60. // 这里设置为 1 仅作为示例
  61.  
  62. // 'time_to_live' => 1,
  63.  
  64. // apns_production: 表示APNs是否生产环境,
  65. // True 表示推送生产环境,False 表示要推送开发环境;如果不指定则默认为推送生产环境
  66.  
  67. 'apns_production' => $production_mode,
  68.  
  69. // big_push_duration: 表示定速推送时长(分钟),又名缓慢推送,把原本尽可能快的推送速度,降低下来,
  70. // 给定的 n 分钟内,均匀地向这次推送的目标用户推送。最大值为1400.未设置则不是定速推送
  71. // 这里设置为 1 仅作为示例
  72.  
  73. // 'big_push_duration' => 1
  74. ))
  75. ->send();
  76. print_r($response);
  77.  
  78. } catch (\JPush\Exceptions\APIConnectionException $e) {
  79. // try something here
  80. print $e;
  81. } catch (\JPush\Exceptions\APIRequestException $e) {
  82. // try something here
  83. print $e;
  84. }
  85.  
  86. }
  87.  
  88. static function pushAll($ticket='消息提醒',$alert){
  89. $appKey=Yii::app()->params['push']['AppKey'];
  90. $appMasterSecret=Yii::app()->params['push']['AppMasterSecret'];
  91. $production_mode=Yii::app()->params['push']['production_mode'];
  92.  
  93. $client = new JPush($appKey, $appMasterSecret);
  94.  
  95. // 完整的推送示例
  96. // 这只是使用样例,不应该直接用于实际生产环境中 !!
  97. try {
  98. $response = $client->push()
  99. ->setPlatform(array('ios', 'android'))
  100. ->setAudience('all')
  101. // 一般情况下,关于 audience 的设置只需要调用 addAlias、addTag、addTagAnd 或 addRegistrationId
  102. // 这四个方法中的某一个即可,这里仅作为示例,当然全部调用也可以,多项 audience 调用表示其结果的交集
  103. // 即是说一般情况下,下面三个方法和没有列出的 addTagAnd 一共四个,只适用一个便可满足大多数的场景需求
  104. ->setNotificationAlert($alert)
  105. ->iosNotification($ticket, array(
  106. 'sound' => 'sound.caf',
  107. // 'badge' => '+1',
  108. // 'content-available' => true,
  109. // 'mutable-content' => true,
  110. 'category' => 'jiguang',
  111. 'extras' => array(
  112. 'key' => 'value',
  113. 'jiguang'
  114. ),
  115. ))
  116. ->androidNotification($ticket, array(
  117. 'title' => $alert,
  118. // 'build_id' => 2,
  119. 'extras' => array(
  120. 'key' => 'value',
  121. 'jiguang'
  122. ),
  123. ))
  124. ->message($alert, array(
  125. 'title' => $alert,
  126. // 'content_type' => 'text',
  127. 'extras' => array(
  128. 'key' => 'value',
  129. 'jiguang'
  130. ),
  131. ))
  132. ->options(array(
  133. // sendno: 表示推送序号,纯粹用来作为 API 调用标识,
  134. // API 返回时被原样返回,以方便 API 调用方匹配请求与返回
  135. // 这里设置为 100 仅作为示例
  136.  
  137. // 'sendno' => 100,
  138.  
  139. // time_to_live: 表示离线消息保留时长(秒),
  140. // 推送当前用户不在线时,为该用户保留多长时间的离线消息,以便其上线时再次推送。
  141. // 默认 86400 (1 天),最长 10 天。设置为 0 表示不保留离线消息,只有推送当前在线的用户可以收到
  142. // 这里设置为 1 仅作为示例
  143.  
  144. // 'time_to_live' => 1,
  145.  
  146. // apns_production: 表示APNs是否生产环境,
  147. // True 表示推送生产环境,False 表示要推送开发环境;如果不指定则默认为推送生产环境
  148.  
  149. 'apns_production' => $production_mode,
  150.  
  151. // big_push_duration: 表示定速推送时长(分钟),又名缓慢推送,把原本尽可能快的推送速度,降低下来,
  152. // 给定的 n 分钟内,均匀地向这次推送的目标用户推送。最大值为1400.未设置则不是定速推送
  153. // 这里设置为 1 仅作为示例
  154.  
  155. // 'big_push_duration' => 1
  156. ))
  157. ->send();
  158. print_r($response);
  159.  
  160. } catch (\JPush\Exceptions\APIConnectionException $e) {
  161. // try something here
  162. print $e;
  163. } catch (\JPush\Exceptions\APIRequestException $e) {
  164. // try something here
  165. print $e;
  166. }
  167.  
  168. }
  169. }

三、调用NotifyPush.php里的方法,实现推送,如下代码:

  1. class CronNotifyPushCommand extends CConsoleCommand{
  2. public $keys=array();
  3. public function init(){
  4. parent::init();
  5. }
  6.  
  7. public function actionIndex(){
  8. echo 'start CronNotifyPushCommand '.chr(10);
  9. if(!Yii::app()->params['push']['push_status']){
  10. echo 'push status disabled';die();
  11. }
  12. $rkey='message_notify_list';
  13. $waitTotals=Fredis::model()->redis->lsize($rkey);
  14. echo 'wait totals:'.$waitTotals.chr(10);
  15. $waitResult=true;
  16. $i=0;
  17. while($waitResult) {$i++;
  18. echo $i.'/'.$waitTotals.' wait to do'.chr(10);
  19. $waitResult=Fredis::model()->redis->rpop($rkey);
  20. if(!$waitResult) {
  21. continue;
  22. }
  23. $db_data=unserialize($waitResult);var_dump($db_data);
  24. $message_content=$db_data['message_content'];
  25. $uid=$db_data['uid'];
  26. $alias=$uid;
  27. if($uid==0){
  28. NotifyPush::pushAll($message_content, $message_content);
  29. }else {
  30. NotifyPush::pushAlias($alias, $message_content, $message_content);
  31. }
  32. }
  33.  
  34. echo 'end'.chr(10);
  35. }
  36. }

Yii1.1框架实现PHP极光推送消息通知的更多相关文章

  1. 极光推送消息——Alias别称方式(Andirod)

    1.pom文件引入相关jar包 <!--极光推送消息start--> <dependency> <groupId>net.sf.json-lib</group ...

  2. IOS 极光推送自定义通知遇到的一些坑

    主要方法: //自定义推送 - (void)networkDidReceiveMessage:(NSNotification *)notification { NSDictionary * userI ...

  3. ios之极光推送消息收到以后对消息的处理总结

    当我们的APP收到推送消息后,通常需要根据推送内容点击消息进入到指定的页面 这里讲一下收到推送消息后的处理,分为三种情况 :1.APP处于前台运行情况下     2.APP处于后台挂起情况下   3. ...

  4. iOS监听模式系列之推送消息通知

    推送通知 和本地通知不同,推送通知是由应用服务提供商发起的,通过苹果的APNs(Apple Push Notification Server)发送到应用客户端.下面是苹果官方关于推送通知的过程示意图: ...

  5. ios -- 极光推送《2》--极光推送消息推送成功,但是手机收不到的解决方法

    1.确认证书是否与app的Bundle ID是否一致 2. 确认你的推送证书是否已经过期 3.确认你的APP_KEY是否和极光APP_KEY是否一致 4.正确调用bindChannel,并成功返回ap ...

  6. 极光推送消息——RegistrationID方式

    1.工具类 package com.test.util; import cn.jiguang.common.resp.APIConnectionException; import cn.jiguang ...

  7. GoEasy实现websocket 推送消息通知到客户端

    最近在实现一个推送功能,用户扫描二维码签到,后台及时将签到成功信息推送到浏览器端.排除了前端ajax轮询的方式,决定采用websocket及时推送. 于是发现了第三方websocket推送库GoEas ...

  8. JPush 极光推送 消息推送 实例

    简介 官网:https://www.jpush.cn/ 极光推送(JPush)是一个端到端的推送服务,使得服务器端消息能够及时地推送到终端用户手机上,让开发者积极地保持与用户的连接,从而提高用户活跃度 ...

  9. 极光推送_总结_01_Java实现极光推送

    一.代码实现 1.配置类—Env.java package com.ray.jpush.config; /**@desc : 极光推送接入配置 * * @author: shirayner * @da ...

随机推荐

  1. SQL SERVER 查询与整理索引碎片

    重建索引 use DATABASE_NAME; ) ) DECLARE @fillfactor INT DECLARE TableCursor CURSOR FOR SELECT OBJECT_SCH ...

  2. sql developer以字段来删除大量数据

    今天碰到一个问题,就是删除数据库数据,要删除了有1000一千条左右的数据,总共数据大概有30万条左右,但是如何删除呢, 我首先想到的是找数据的共性,因为这些数据日期都是3月份的,30万条数据时间段不相 ...

  3. Zabbix WMI监控

    检查Windows OS是否激活,5表示处于通知模式,1表示已激活 wmi.get[root\cimv2,select LicenseStatus FROM SoftwareLicensingProd ...

  4. 【PAT】B1011 A+B 和 C

    注意数据的范围,使用long long就行了 #include<stdio.h> int main(){ int N;scanf("%d",&N); for(i ...

  5. springcloud(十五):Spring Cloud 终于按捺不住推出了自己的服务网关 Gateway

    Spring 官方最终还是按捺不住推出了自己的网关组件:Spring Cloud Gateway ,相比之前我们使用的 Zuul(1.x) 它有哪些优势呢?Zuul(1.x) 基于 Servlet,使 ...

  6. 选择数据库管理系统(DBMS)时主要考虑的因素

    选择数据库管理系统时应从以下几个方面予以考虑: (1) 构造数据库的难易程度. 需要分析数据库管理系统有没有范式的要求,即是否必须按照系统所规定的数据模型分析现实世界,建立相应的模型:数据库管理语句是 ...

  7. 转://Oracle 11gR2 硬件导致重新添加节点

    一.环境描述:        这是一套五年前部署的双节点单柜11g RAC,当时操作系统盘是一块164g的单盘,没有做RAID.        OS: RedHat EnterPrise 5.5 x8 ...

  8. ActiveMQ发布订阅模式 转发 https://www.cnblogs.com/madyina/p/4127144.html

    ActiveMQ的另一种模式就SUB/HUB即发布订阅模式,是SUB/hub就是一拖N的USB分线器的意思.意思就是一个来源分到N个出口.还是上节的例子,当一个订单产生后,后台N个系统需要联动,但有一 ...

  9. remix的使用

    remix首先,这个东西其实是有一个线上版本的,只要登录上网址:https://remix.ethereum.org就可以直接使用了,但是我更多用的是本地配置的remix-ideremix-ide的文 ...

  10. docker 2 docker介绍

    docker是基于go语言实现的云开源项目 docker的主要目标是‘build ,ship and run any app,anywhere’,也就是说通过对应用程序组件的封装,分发,部署,运行等生 ...