当前位置:Gxlcms > PHP教程 > Yii1.1框架模拟PHP极光推送消息通知

Yii1.1框架模拟PHP极光推送消息通知

时间:2021-07-01 10:21:17 帮助过:46人阅读

本篇文章主要讲述的是用Yii框架模拟PHP极光推送消息通知,具有一定的参考价值,感兴趣的朋友可以了解一下,希望对你有所帮助。

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

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

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

相关教程:PHP视频教程

以上就是Yii1.1框架模拟PHP极光推送消息通知的详细内容,更多请关注Gxlcms其它相关文章!

人气教程排行