|
@@ -0,0 +1,187 @@
|
|
|
|
+<?php
|
|
|
|
+
|
|
|
|
+namespace Message\Lib;
|
|
|
|
+
|
|
|
|
+use Dever;
|
|
|
|
+Dever::apply('sdk/xg', 'message');
|
|
|
|
+
|
|
|
|
+class Push
|
|
|
|
+{
|
|
|
|
+ private $prefix = 'dever_';
|
|
|
|
+ public function send($id, $uid, $name, $content, $param)
|
|
|
|
+ {
|
|
|
|
+ $this->config = Dever::db('message/push')->one($id);
|
|
|
|
+ if ($this->config) {
|
|
|
|
+ # 现在就是腾讯信鸽
|
|
|
|
+ if ($this->config['type'] == 1) {
|
|
|
|
+ $total = count($uid);
|
|
|
|
+ $num = 10;
|
|
|
|
+
|
|
|
|
+ if ($total <= 0) {
|
|
|
|
+ # 发全部
|
|
|
|
+ $result = $this->sendAll($name, $content, $param);
|
|
|
|
+ } elseif ($total == 1) {
|
|
|
|
+ # 发单条
|
|
|
|
+ $result = $this->sendOne($uid[0], $name, $content, $param);
|
|
|
|
+ } elseif ($total <= $num) {
|
|
|
|
+ # 发多条
|
|
|
|
+ $result = $this->sendList($uid, $name, $content, $param);
|
|
|
|
+ } else {
|
|
|
|
+ # 批量发送
|
|
|
|
+ $result = $this->sendMul($uid, $name, $content, $param);
|
|
|
|
+ }
|
|
|
|
+ return $result;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private function sendAction($source_type, $type, $account, $name, $content, $param)
|
|
|
|
+ {
|
|
|
|
+ $result = array();
|
|
|
|
+ $method = $source_type . '_message';
|
|
|
|
+ $message = $this->$method($name, $content, $param);
|
|
|
|
+
|
|
|
|
+ $push = $this->get($source_type);
|
|
|
|
+ if ($type == 1) {
|
|
|
|
+ $method = 'PushAllDevices';
|
|
|
|
+ $send = array(0, $message);
|
|
|
|
+ } elseif ($type == 2) {
|
|
|
|
+ $method = 'PushSingleAccount';
|
|
|
|
+ $send = array(0, $account, $message);
|
|
|
|
+ } elseif ($type == 3) {
|
|
|
|
+ $method = 'PushAccountList';
|
|
|
|
+ $send = array(0, $account, $message);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if ($source_type == 'ios') {
|
|
|
|
+ $send[] = \XingeApp::IOSENV_DEV;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $result[$source_type] = call_user_func_array(array($push, $method), $send);
|
|
|
|
+
|
|
|
|
+ $log['result'] = $result;
|
|
|
|
+ $log['send'] = $send;
|
|
|
|
+ $log['message'] = array($name, $content, $param);
|
|
|
|
+ $log = Dever::json_encode($log);
|
|
|
|
+ Dever::log($log, 'message_app_push');
|
|
|
|
+
|
|
|
|
+ return $result;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private function sendMul($account, $name, $content, $param)
|
|
|
|
+ {
|
|
|
|
+ return $this->sendList($account, $name, $content, $param);
|
|
|
|
+ # 大批量发送
|
|
|
|
+ $result = $push->CreateMultipush($mess, \XingeApp::IOSENV_DEV);
|
|
|
|
+ if (!($result['ret_code'] === 0)) {
|
|
|
|
+
|
|
|
|
+ } else {
|
|
|
|
+ $page = intval($total/$num)+1;
|
|
|
|
+ for ($i = 0; $i <= $page; $i++) {
|
|
|
|
+ $array = array();
|
|
|
|
+ for($j = 0; $j <= $i+$num; $j++) {
|
|
|
|
+ $k = $i + $j;
|
|
|
|
+ if (isset($uid[$k])) {
|
|
|
|
+ $array[$k] = $prefix . $uid[$k];
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ array_push($result, $push->PushAccountListMultiple($ret['result']['push_id'], $array));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private function sendList($account, $name, $content, $param)
|
|
|
|
+ {
|
|
|
|
+ $result = array();
|
|
|
|
+ list($android, $ios) = $this->getUser($account);
|
|
|
|
+
|
|
|
|
+ if ($android) {
|
|
|
|
+ $result += $this->sendAction('android', 1, $android, $name, $content, $param);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if ($ios) {
|
|
|
|
+ $result += $this->sendAction('ios', 1, $ios, $name, $content, $param);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return $result;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private function sendOne($account, $name, $content, $param)
|
|
|
|
+ {
|
|
|
|
+ $result = array();
|
|
|
|
+ $info = Dever::db('passport/app')->one(array('uid' => $account));
|
|
|
|
+ $info['source_type'] = 'ios';
|
|
|
|
+ if ($info && $info['source_type']) {
|
|
|
|
+ $result = $this->sendAction($info['source_type'], 2, $this->prefix . $account, $name, $content, $param);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return $result;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private function sendAll($name, $content, $param)
|
|
|
|
+ {
|
|
|
|
+ $result = $this->sendAction('android', 1, false, $name, $content, $param);
|
|
|
|
+ $result += $this->sendAction('ios', 1, false, $name, $content, $param);
|
|
|
|
+
|
|
|
|
+ return $result;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private function getUser($account)
|
|
|
|
+ {
|
|
|
|
+ $android = array();
|
|
|
|
+ $ios = array();
|
|
|
|
+ $info = Dever::db('passport/app')->getAllByUids(array('uid' => $account));
|
|
|
|
+ if ($info) {
|
|
|
|
+ foreach ($info as $k => $v) {
|
|
|
|
+ if ($v['source_type'] == 'android') {
|
|
|
|
+ $android[] = $this->prefix . $v['uid'];
|
|
|
|
+ } elseif ($v['source_type'] == 'ios') {
|
|
|
|
+ $ios[] = $this->prefix . $v['uid'];
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return array($android, $ios);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private function android_message($name, $content, $param, $type = 1)
|
|
|
|
+ {
|
|
|
|
+ $message = new \Message();
|
|
|
|
+ $message->setExpireTime(86400);
|
|
|
|
+ $message->setTitle($name);
|
|
|
|
+ $message->setContent($content);
|
|
|
|
+ $message->setType($type);
|
|
|
|
+ $action = new \ClickAction();
|
|
|
|
+ $action->setActionType(\ClickAction::TYPE_ACTIVITY);
|
|
|
|
+ $action->setActivity($param);
|
|
|
|
+ $message->setAction($action);
|
|
|
|
+
|
|
|
|
+ return $message;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private function ios_message($name, $content, $param, $type = 1)
|
|
|
|
+ {
|
|
|
|
+ $message = new \MessageIOS();
|
|
|
|
+ $message->setExpireTime(86400);
|
|
|
|
+ $message->setAlert(array('title' => $name, 'content' => $content));
|
|
|
|
+ $message->setBadge(-2);
|
|
|
|
+ //$mess->setSound("beep.wav");
|
|
|
|
+ $custom = json_decode($param);
|
|
|
|
+ $message->setCustom($custom);
|
|
|
|
+ $message->setRaw($param);
|
|
|
|
+ $time = new \TimeInterval(0, 0, 23, 59);
|
|
|
|
+ $message->addAcceptTime($time);
|
|
|
|
+
|
|
|
|
+ return $message;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private function get($type = 'android')
|
|
|
|
+ {
|
|
|
|
+ if (!isset($this->push[$type])) {
|
|
|
|
+ $this->push[$type] = new \XingeApp($this->config[$type . '_appid'], $this->config[$type . '_appsecret']);
|
|
|
|
+ }
|
|
|
|
+ return $this->push[$type];
|
|
|
|
+ }
|
|
|
|
+}
|