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 相关文章推荐
MYSQL数据库初学者使用指南
Nov 16 PHP
从MySQL数据库表中取出随机数据的代码
Sep 05 PHP
Uchome1.2 1.5 代码学习 common.php
Apr 24 PHP
php simplexmlElement操作xml的命名空间实现代码
Jan 04 PHP
PHP读取网页文件内容的实现代码(fopen,curl等)
Jun 23 PHP
PHP导出EXCEL快速开发指南--PHPEXCEL的使用详解
Jun 03 PHP
php empty()与isset()区别的详细介绍
Jun 17 PHP
php使用mkdir创建多级目录入门例子
May 10 PHP
phpMyAdmin安装并配置允许空密码登录
Jul 04 PHP
php 从指定数字中获取随机组合的简单方法(推荐)
Apr 05 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
Feb 08 PHP
laravel框架关于搜索功能的实现
Mar 15 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实现图象锐化代码
2007/06/14 PHP
详解php的魔术方法__get()和__set()使用介绍
2012/09/19 PHP
改写ThinkPHP的U方法使其路由下分页正常
2014/07/02 PHP
PHP读书笔记_运算符详解
2016/07/01 PHP
CSS+JS构建的图片查看器
2006/07/22 Javascript
精选的10款用于构建良好易用性网站的jQuery插件
2011/01/23 Javascript
jquery数据验证插件(自制,简单,练手)实例代码
2013/10/24 Javascript
window.location.href IE下跳转失效的解决方法
2014/03/27 Javascript
jQuery中insertAfter()方法用法实例
2015/01/08 Javascript
js实现单击图片放大图片的方法
2015/02/17 Javascript
jQuery检测滚动条是否到达底部
2015/12/15 Javascript
Jquery ajax请求导出Excel表格的实现代码
2016/06/08 Javascript
js HTML5上传示例代码完整版
2016/10/10 Javascript
使用gulp搭建本地服务器并实现模拟ajax
2017/04/05 Javascript
解决vue脚手架项目打包后路由视图不显示的问题
2018/09/20 Javascript
Vue中CSS动画原理的实现
2019/02/13 Javascript
Postman内建变量常用方法实例解析
2020/07/28 Javascript
vue cli 3.0通用打包配置代码,不分一二级目录
2020/09/02 Javascript
nodejs处理tcp连接的核心流程
2021/02/26 NodeJs
python中enumerate的用法实例解析
2014/08/18 Python
python urllib urlopen()对象方法/代理的补充说明
2017/06/29 Python
Sanic框架流式传输操作示例
2018/07/18 Python
Python pandas DataFrame操作的实现代码
2019/06/21 Python
python3获取当前目录的实现方法
2019/07/29 Python
Python实现密码薄文件读写操作
2019/12/16 Python
Python基于当前时间批量创建文件
2020/05/07 Python
Tensorflow全局设置可见GPU编号操作
2020/06/30 Python
英国女性时尚品牌:Apricot
2018/12/04 全球购物
Java中的类包括什么内容?设计时要注意哪些方面
2012/05/23 面试题
钳工实训报告总结
2014/11/04 职场文书
2015年建筑工作总结报告
2015/05/04 职场文书
教师学习十八届五中全会精神心得体会
2016/01/05 职场文书
2016反腐倡廉警示教育心得体会
2016/01/13 职场文书
校园安全学习心得体会
2016/01/18 职场文书
Pytorch数据读取之Dataset和DataLoader知识总结
2021/05/23 Python
UNION CREATIVE《Re:从零开始的异世界生活》雷姆手办
2022/03/20 日漫