Yii1.1框架实现PHP极光推送消息通知功能


Posted in PHP onSeptember 06, 2018

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

Yii1.1框架实现PHP极光推送消息通知功能

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

<?php
require dirname(__FILE__) . '/jpush-api-php-client/autoload.php';
use JPush\Client as JPush;
class NotifyPush {
 static function pushAlias($alias,$ticket='消息提醒',$alert){
  $appKey=Yii::app()->params['push']['AppKey'];
  $appMasterSecret=Yii::app()->params['push']['AppMasterSecret'];
  $production_mode=Yii::app()->params['push']['production_mode'];
  $client = new JPush($appKey, $appMasterSecret);
// 完整的推送示例
// 这只是使用样例,不应该直接用于实际生产环境中 !!
  try {
   $response = $client->push()
    ->setPlatform(array('ios', 'android'))
    // 一般情况下,关于 audience 的设置只需要调用 addAlias、addTag、addTagAnd 或 addRegistrationId
    // 这四个方法中的某一个即可,这里仅作为示例,当然全部调用也可以,多项 audience 调用表示其结果的交集
    // 即是说一般情况下,下面三个方法和没有列出的 addTagAnd 一共四个,只适用一个便可满足大多数的场景需求
    ->addAlias($alias)
    ->setNotificationAlert($alert)
    ->iosNotification($ticket, array(
     'sound' => 'sound.caf',
     // 'badge' => '+1',
     // 'content-available' => true,
     // 'mutable-content' => true,
     'category' => 'jiguang',
     'extras' => array(
      'key' => 'value',
      'jiguang'
     ),
    ))
    ->androidNotification($ticket, array(
     'title' => $alert,
     // 'build_id' => 2,
     'extras' => array(
      'key' => 'value',
      'jiguang'
     ),
    ))
    ->message($alert, array(
     'title' => $alert,
     // 'content_type' => 'text',
     'extras' => array(
      'key' => 'value',
      'jiguang'
     ),
    ))
    ->options(array(
     // sendno: 表示推送序号,纯粹用来作为 API 调用标识,
     // API 返回时被原样返回,以方便 API 调用方匹配请求与返回
     // 这里设置为 100 仅作为示例
     // 'sendno' => 100,
     // time_to_live: 表示离线消息保留时长(秒),
     // 推送当前用户不在线时,为该用户保留多长时间的离线消息,以便其上线时再次推送。
     // 默认 86400 (1 天),最长 10 天。设置为 0 表示不保留离线消息,只有推送当前在线的用户可以收到
     // 这里设置为 1 仅作为示例
     // 'time_to_live' => 1,
     // apns_production: 表示APNs是否生产环境,
     // True 表示推送生产环境,False 表示要推送开发环境;如果不指定则默认为推送生产环境
     'apns_production' => $production_mode,
     // big_push_duration: 表示定速推送时长(分钟),又名缓慢推送,把原本尽可能快的推送速度,降低下来,
     // 给定的 n 分钟内,均匀地向这次推送的目标用户推送。最大值为1400.未设置则不是定速推送
     // 这里设置为 1 仅作为示例
     // 'big_push_duration' => 1
    ))
    ->send();
   print_r($response);
  } catch (\JPush\Exceptions\APIConnectionException $e) {
   // try something here
   print $e;
  } catch (\JPush\Exceptions\APIRequestException $e) {
   // try something here
   print $e;
  }
 }
 static function pushAll($ticket='消息提醒',$alert){
  $appKey=Yii::app()->params['push']['AppKey'];
  $appMasterSecret=Yii::app()->params['push']['AppMasterSecret'];
  $production_mode=Yii::app()->params['push']['production_mode'];
  $client = new JPush($appKey, $appMasterSecret);
// 完整的推送示例
// 这只是使用样例,不应该直接用于实际生产环境中 !!
  try {
   $response = $client->push()
    ->setPlatform(array('ios', 'android'))
    ->setAudience('all')
    // 一般情况下,关于 audience 的设置只需要调用 addAlias、addTag、addTagAnd 或 addRegistrationId
    // 这四个方法中的某一个即可,这里仅作为示例,当然全部调用也可以,多项 audience 调用表示其结果的交集
    // 即是说一般情况下,下面三个方法和没有列出的 addTagAnd 一共四个,只适用一个便可满足大多数的场景需求
    ->setNotificationAlert($alert)
    ->iosNotification($ticket, array(
     'sound' => 'sound.caf',
     // 'badge' => '+1',
     // 'content-available' => true,
     // 'mutable-content' => true,
     'category' => 'jiguang',
     'extras' => array(
      'key' => 'value',
      'jiguang'
     ),
    ))
    ->androidNotification($ticket, array(
     'title' => $alert,
     // 'build_id' => 2,
     'extras' => array(
      'key' => 'value',
      'jiguang'
     ),
    ))
    ->message($alert, array(
     'title' => $alert,
     // 'content_type' => 'text',
     'extras' => array(
      'key' => 'value',
      'jiguang'
     ),
    ))
    ->options(array(
     // sendno: 表示推送序号,纯粹用来作为 API 调用标识,
     // API 返回时被原样返回,以方便 API 调用方匹配请求与返回
     // 这里设置为 100 仅作为示例
     // 'sendno' => 100,
     // time_to_live: 表示离线消息保留时长(秒),
     // 推送当前用户不在线时,为该用户保留多长时间的离线消息,以便其上线时再次推送。
     // 默认 86400 (1 天),最长 10 天。设置为 0 表示不保留离线消息,只有推送当前在线的用户可以收到
     // 这里设置为 1 仅作为示例
     // 'time_to_live' => 1,
     // apns_production: 表示APNs是否生产环境,
     // True 表示推送生产环境,False 表示要推送开发环境;如果不指定则默认为推送生产环境
     'apns_production' => $production_mode,
     // big_push_duration: 表示定速推送时长(分钟),又名缓慢推送,把原本尽可能快的推送速度,降低下来,
     // 给定的 n 分钟内,均匀地向这次推送的目标用户推送。最大值为1400.未设置则不是定速推送
     // 这里设置为 1 仅作为示例
     // 'big_push_duration' => 1
    ))
    ->send();
   print_r($response);
  } catch (\JPush\Exceptions\APIConnectionException $e) {
   // try something here
   print $e;
  } catch (\JPush\Exceptions\APIRequestException $e) {
   // try something here
   print $e;
  }
 }
}

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

class CronNotifyPushCommand extends CConsoleCommand{
 public $keys=array();
 public function init(){
  parent::init();
 }
 public function actionIndex(){
  echo 'start CronNotifyPushCommand '.chr(10);
  if(!Yii::app()->params['push']['push_status']){
   echo 'push status disabled';die();
  }
  $rkey='message_notify_list';
  $waitTotals=Fredis::model()->redis->lsize($rkey);
  echo 'wait totals:'.$waitTotals.chr(10);
  $waitResult=true;
  $i=0;
  while($waitResult) {$i++;
   echo $i.'/'.$waitTotals.' wait to do'.chr(10);
   $waitResult=Fredis::model()->redis->rpop($rkey);
   if(!$waitResult) {
    continue;
   }
   $db_data=unserialize($waitResult);var_dump($db_data);
   $message_content=$db_data['message_content'];
   $uid=$db_data['uid'];
   $alias=$uid;
   if($uid==0){
    NotifyPush::pushAll($message_content, $message_content);
   }else {
    NotifyPush::pushAlias($alias, $message_content, $message_content);
   }
  }
  echo 'end'.chr(10);
 }
}

总结

以上所述是小编给大家介绍的Yii1.1框架实现PHP极光推送消息通知,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
十天学会php(1)
Oct 09 PHP
discuz论坛 用户登录 后台程序代码
Nov 27 PHP
PHP中基本符号及使用方法
Mar 23 PHP
php empty函数判断mysql表单是否为空
Apr 12 PHP
PHP中使用FFMPEG获取视频缩略图和视频总时长实例
May 04 PHP
php中get_meta_tags()、CURL与user-agent用法分析
Dec 16 PHP
php使用unset()删除数组中某个单元(键)的方法
Feb 17 PHP
php判断当前操作系统类型
Oct 28 PHP
PHP中Laravel 关联查询返回错误id的解决方法
Apr 01 PHP
php中Ioc(控制反转)和Di(依赖注入)
May 07 PHP
PHP实现将多个文件压缩成zip格式并下载到本地的方法示例
May 23 PHP
PHP中echo与print区别点整理
Mar 09 PHP
PHP日志LOG类定义与用法示例
Sep 06 #PHP
PHP实现断点续传乱序合并文件的方法
Sep 06 #PHP
php JWT在web端中的使用方法教程
Sep 06 #PHP
php进程daemon化的正确实现方法
Sep 06 #PHP
让Laravel API永远返回JSON格式响应的方法示例
Sep 05 #PHP
thinkPHP框架实现类似java过滤器的简单方法示例
Sep 05 #PHP
PHP使用pdo实现事务处理操作示例
Sep 05 #PHP
You might like
学习php过程中的一些注意点的总结
2013/10/25 PHP
php实现网页端验证码功能
2017/07/11 PHP
thinkphp5实现无限级分类
2019/02/18 PHP
PHP生成zip压缩包的常用方法示例
2019/08/22 PHP
使用js写的一个简易的投票
2013/11/27 Javascript
浅谈JS原型对象和原型链
2016/03/02 Javascript
Javascript中的 “&amp;” 和 “|” 详解
2017/02/02 Javascript
使用vs code开发Nodejs程序的使用方法
2017/09/21 NodeJs
vue.js绑定事件监听器示例【基于v-on事件绑定】
2018/07/07 Javascript
jquery实现的简单轮播图功能【适合新手】
2018/08/17 jQuery
小程序云开发部署攻略(图文教程)
2018/10/30 Javascript
解决vue跨域axios异步通信问题
2019/04/17 Javascript
javascript实现的字符串转换成数组操作示例
2019/06/13 Javascript
基于layui table返回的值的多级嵌套的解决方法
2019/09/19 Javascript
[44:50]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第二局
2016/02/26 DOTA
Python实现优先级队列结构的方法详解
2016/06/02 Python
python 第三方库的安装及pip的使用详解
2017/05/11 Python
python通过百度地图API获取某地址的经纬度详解
2018/01/28 Python
python操作oracle的完整教程分享
2018/01/30 Python
使用Python微信库itchat获得好友和群组已撤回的消息
2018/06/24 Python
selenium设置proxy、headers的方法(phantomjs、Chrome、Firefox)
2018/11/29 Python
在Pycharm中自动添加时间日期作者等信息的方法
2019/01/16 Python
拥有超过850家商店的美国在线派对商店:Party City
2018/10/21 全球购物
武汉瑞得软件笔试题
2015/10/27 面试题
linux面试题参考答案(4)
2013/01/28 面试题
英文简历中的自我评价
2013/10/06 职场文书
缴纳养老保险的证明
2014/01/10 职场文书
会员活动策划方案
2014/08/19 职场文书
党的群众路线教育实践活动方案
2014/10/31 职场文书
2014年后备干部工作总结
2014/12/08 职场文书
2015年护士节活动总结
2015/02/10 职场文书
高校自主招生教师推荐信
2015/03/23 职场文书
酒店开业主持词
2015/07/02 职场文书
整脏治乱工作简报
2015/07/21 职场文书
Python基础之pandas数据合并
2021/04/27 Python
swagger如何返回map字段注释
2021/07/03 Java/Android