MiPushCommon.php 3.3 KB

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