MiPushCommon.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <?php
  2. namespace App\Libs\Push\XMPush;
  3. class MiPushCommon
  4. {
  5. private $_reg_arr = [];
  6. /**
  7. * XMPushCommon constructor.
  8. * @param $package
  9. * @param $appSecret
  10. */
  11. public function __construct($package, $appSecret)
  12. {
  13. // 常量设置必须在new Sender()方法之前调用
  14. Constants::setPackage($package);
  15. Constants::setSecret($appSecret);
  16. }
  17. public function setRegArr($regArr)
  18. {
  19. $this->_reg_arr = $regArr;
  20. }
  21. /**
  22. * 发送消息
  23. * @param $title
  24. * @param $desc
  25. * @param $url
  26. * @return mixed
  27. */
  28. public function sendMessage($title, $desc, $url)
  29. {
  30. $sender = new Sender();
  31. $message = $this->buildMessage($title, $desc, $url);
  32. $result = $sender->sendToIds($message, $this->_reg_arr)->getRaw();
  33. $this->logPush(__FUNCTION__, 'result', compact('result'));
  34. return $result;
  35. }
  36. /**
  37. * 向所有设备发送消息
  38. * @param $title
  39. * @param $desc
  40. * @param $url
  41. * @return mixed
  42. */
  43. public function sendMessageToAll($title, $desc, $url)
  44. {
  45. $sender = new Sender();
  46. $message = $this->buildMessage($title, $desc, $url);
  47. $result = $sender->broadcastAll($message)->getRaw();
  48. $this->logPush(__FUNCTION__, 'result', compact('result'));
  49. return $result;
  50. }
  51. /**
  52. * @param $title
  53. * @param $desc
  54. * @param $url
  55. * @param int $pusType
  56. * @param string $payload
  57. * @return Builder
  58. */
  59. private function buildMessage($title, $desc, $url, $pusType = 0, $payload = '')
  60. {
  61. $message = new Builder();
  62. $message->title($title); // 通知栏的title
  63. $message->description($desc); // 通知栏的descption
  64. $message->passThrough($pusType); // 这是一条通知栏消息,如果需要透传,把这个参数设置成1,同时去掉title和descption两个参数
  65. $message->payload($payload); // 携带的数据,点击后将会通过客户端的receiver中的onReceiveMessage方法传入。
  66. $message->extra(Builder::intentUri, $url); // 此处设置预定义点击行为,1为打开app
  67. $message->extra(Builder::notifyEffect, 2); // 此处设置预定义点击行为,1为打开app 2通知栏点击后打开app的任一Activity
  68. $message->extra(Builder::notifyForeground, 1); // 应用在前台是否展示通知,如果不希望应用在前台时候弹出通知,则设置这个参数为0
  69. $message->extra(Builder::flowControl, 3000); // 设置平滑推送, 推送速度3000每秒(qps=3000)
  70. $message->notifyId(2); // 通知类型。最多支持0-4 5个取值范围,同样的类型的通知会互相覆盖,不同类型可以在通知栏并存
  71. $message->build();
  72. return $message;
  73. }
  74. /**
  75. * @param $className
  76. * @param $message
  77. * @param array $data
  78. */
  79. private function logPush($className, $message, $data = [])
  80. {
  81. var_dump('[' . $className . '] ' . $message, $data);
  82. myLog('push')->info('[XiaoMi] [' . $className . '] ' . $message, $data);
  83. }
  84. }