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 相关文章推荐
将数字格式的计算结果转为汉字格式
Oct 09 PHP
Ajax+PHP快速上手及简单应用说明
Jul 24 PHP
php比较两个绝对时间的大小
Jan 31 PHP
CI框架中集成CKEditor编辑器的教程
Jun 09 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
Jun 13 PHP
PHP多维数组遍历方法(2种实现方法)
Dec 10 PHP
谈谈PHP连接Access数据库的注意事项
Aug 12 PHP
php与c 实现按行读取文件实例代码
Jan 03 PHP
PHP结合jquery ajax实现上传多张图片,并限制图片大小操作示例
Mar 01 PHP
TP5.0框架实现无限极回复功能的方法分析
May 04 PHP
PHP利用缓存处理用户注册时的邮箱验证,成功后用户数据存入数据库操作示例
Dec 31 PHP
PHP如何解决微信文章图片防盗链
Dec 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标签云的实现代码
2012/10/10 PHP
php单链表实现代码分享
2016/07/04 PHP
CodeIgniter框架数据库基本操作示例
2018/05/24 PHP
动态加载js文件 document.createElement
2006/10/14 Javascript
javascript 同时在IE和FireFox获取KeyCode的代码
2010/02/07 Javascript
jQuery多项选项卡的实现思路附样式及代码
2014/06/03 Javascript
使用cluster 将自己的Node服务器扩展为多线程服务器
2014/11/10 Javascript
学习JavaScript编程语言的8张思维导图分享
2015/03/27 Javascript
改变checkbox默认选中状态及取值的实现代码
2016/05/26 Javascript
全面解析Bootstrap中transition、affix的使用方法
2016/05/30 Javascript
JavaScript必知必会(九)function 说起 闭包问题
2016/06/08 Javascript
全面解析JavaScript中的valueOf与toString方法(推荐)
2016/06/14 Javascript
JavaScript兼容性总结之获取非行间样式案例
2016/08/07 Javascript
浅谈html转义及防止javascript注入攻击的方法
2016/12/04 Javascript
使用vue.js在页面内组件监听scroll事件的方法
2018/09/11 Javascript
浅谈Vuex的this.$store.commit和在Vue项目中引用公共方法
2020/07/24 Javascript
原生JavaScript实现换肤
2021/02/19 Javascript
Python自定义scrapy中间模块避免重复采集的方法
2015/04/07 Python
python中如何使用正则表达式的集合字符示例
2017/10/09 Python
python DataFrame 取差集实例
2019/01/30 Python
python关于矩阵重复赋值覆盖问题的解决方法
2019/07/19 Python
Python 处理文件的几种方式
2019/08/23 Python
在django中使用post方法时,需要增加csrftoken的例子
2020/03/13 Python
python+adb+monkey实现Rom稳定性测试详解
2020/04/23 Python
Django与pyecharts结合的实例代码
2020/05/13 Python
Python importlib模块重载使用方法详解
2020/10/13 Python
伊莱克斯(Electrolux)俄罗斯网上商店:瑞典家用电器品牌
2021/01/23 全球购物
药学专业大学生自荐信
2013/09/28 职场文书
优秀员工年终发言演讲稿
2014/01/01 职场文书
师德个人剖析材料
2014/02/02 职场文书
2015年药店工作总结
2015/04/20 职场文书
同学聚会感言一句话
2015/07/30 职场文书
教师培训学习心得体会
2016/01/21 职场文书
深入浅析python3 依赖倒置原则(示例代码)
2021/07/09 Python
Python学习开发之图形用户界面详解
2021/08/23 Python
vue生命周期钩子函数以及触发时机
2022/04/26 Vue.js