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
《PHP边学边教》(01.开篇――准备工作)
Dec 13 PHP
使用php+Ajax实现唯一校验实现代码[简单应用]
Nov 29 PHP
如何使用PHP计算上一个月的今天
May 23 PHP
PHP数据类型的总结分析
Jun 13 PHP
基于php常用函数总结(数组,字符串,时间,文件操作)
Jun 27 PHP
codeigniter自带数据库类使用方法说明
Mar 25 PHP
ThinkPHP实现事务回滚示例代码
Jun 23 PHP
PHP生成数组再传给js的方法
Aug 07 PHP
php生成Android客户端扫描可登录的二维码
May 13 PHP
golang实现php里的serialize()和unserialize()序列和反序列方法详解
Oct 30 PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
Sep 05 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下网站防IP攻击代码,超级实用
2010/10/24 PHP
Win下如何安装PHP的APC拓展
2013/08/07 PHP
php读取mssql的ntext字段返回值为空的解决方法
2014/12/30 PHP
Javascript和Ajax中文乱码吐血版解决方案
2009/12/21 Javascript
JavaScript是否可实现多线程  深入理解JavaScript定时机制
2009/12/22 Javascript
jQuery+CSS3实现树叶飘落特效
2015/02/01 Javascript
JavaScript中string对象
2015/06/12 Javascript
详解Node.js模块间共享数据库连接的方法
2016/05/24 Javascript
jQuery操作iframe中js函数的方法小结
2016/07/06 Javascript
Vue.js每天必学之指令系统与自定义指令
2016/09/07 Javascript
JS数字千分位格式化实现方法总结
2016/12/16 Javascript
基于Bootstrap框架实现图片切换
2017/03/10 Javascript
详解vue express启动数据服务
2017/07/05 Javascript
Vue动态组件实例解析
2017/08/20 Javascript
react-native组件中NavigatorIOS和ListView结合使用的方法
2017/09/30 Javascript
React Native中导航组件react-navigation跨tab路由处理详解
2017/10/31 Javascript
bootstrap轮播模板使用方法详解
2017/11/17 Javascript
vue轮播图插件vue-awesome-swiper
2017/11/27 Javascript
Express之托管静态文件的方法
2018/06/01 Javascript
jQuery点击页面其他部分隐藏下拉菜单功能
2018/11/27 jQuery
详解JS实现简单的时分秒倒计时代码
2019/04/25 Javascript
Vue+Element实现网页版个人简历系统(推荐)
2019/12/31 Javascript
解决Echarts 显示隐藏后宽度高度变小的问题
2020/07/19 Javascript
Pyramid将models.py文件的内容分布到多个文件的方法
2013/11/27 Python
Python爬虫实现抓取京东店铺信息及下载图片功能示例
2018/08/07 Python
使用Python快速制作可视化报表的方法
2019/02/03 Python
在Python中获取操作系统的进程信息
2019/08/27 Python
python爬虫 正则表达式解析
2019/09/28 Python
python爬虫开发之urllib模块详细使用方法与实例全解
2020/03/09 Python
python基于opencv实现人脸识别
2021/01/04 Python
Python try except else使用详解
2021/01/12 Python
H&M美国官网:欧洲最大的服饰零售商
2016/09/07 全球购物
澳洲健康食品网上商店:Aussie Health Products
2018/06/15 全球购物
澳大利亚第一旅行车和房车配件店:Caravan RV Camping
2020/12/26 全球购物
成龙洗发水广告词
2014/03/14 职场文书
百善孝为先:关于孝道的经典语录
2019/10/18 职场文书