Exemple #1
0
 /**
  *  添加push任务接口
  *
  *  @param $message    object      消息对象PushMessage
  *  @param $taskDes    string      任务描述
  *  @param $appIdList  string      要发送的appid,以英文逗号分割
  *  @param $userIdList string      要发送的用户列表,用户Id以英文逗号分割
  *  @param $passThrough int        消息类型。1:透传消息,0:通知消息
  *
  *  @return boolean
  */
 public static function addPush($message, $taskDes, $appIdList, $userIdList, $passThrough = 0)
 {
     if (empty($message) || !$taskDes || !$appIdList || !$userIdList) {
         return false;
     }
     $title = $message->bussiness_title;
     if (!$title) {
         $title = $taskDes;
     }
     $bubble = $message->bubble > 0 ? $message->bubble : 1;
     //将push消息存储到redis
     return \Util\Tools\PushRedis::addPushWaitSend(explode(',', $userIdList), $title, $message->bussiness_message, $message->bussiness_data, explode(',', $appIdList), $bubble, $passThrough);
 }
 public static function run()
 {
     //第一步 从待插入数据库的队列里获取数据
     $insertArr = \Util\Tools\PushRedis::popSqlWaitInsert();
     if (!is_array($insertArr) || !$insertArr['database'] || !$insertArr['table'] || !$insertArr['keyValues']) {
         return false;
     }
     //生成sql
     $insertSql = self::getInsertSql($insertArr);
     $pdo = \Util\Db\Manager::getInstance('jianzhi_push');
     //执行插入操作
     $state = $pdo->insertSql($insertSql);
 }
Exemple #3
0
 /**
  * 从redis中获取待发送Push消息,将其推送到push服务中心,然后将入库数据临时写到redis
  */
 public function run()
 {
     echo "start run...";
     $startTime = time();
     while (true) {
         $push = \Util\Tools\PushRedis::popPushWaitSend();
         if ($push['title'] && $push['userIds'] && $push['message'] && $push) {
             foreach ($push['userIds'] as $userId) {
                 foreach ($push['appIds'] as $appId) {
                     $iosTokens = \Util\Tools\PushRedis::getIosToken($appId, $userId);
                     foreach ($iosTokens as $token) {
                         $app = self::$_appList[$appId];
                         if ($app['platform'] == self::IOS) {
                             $connection = self::_getConnection($appId);
                             $badgeCount = $push['bubble'];
                             $body['aps'] = array('badge' => (int) $badgeCount, 'alert' => $push['message'], 'sound' => 'default');
                             if ($push['data']) {
                                 $body['p'] = json_decode($push['data']);
                             }
                             $messageId = self::_getMessageId();
                             $body['ID'] = $messageId;
                             $payload = json_encode($body);
                             $deviceToken = $token;
                             $notification = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
                             fwrite($connection, $notification, strlen($notification));
                             self::_insertToSQL(self::IOS, $push, $token, $userId, $appId, $messageId);
                         }
                     }
                     $androidTokens = \Util\Tools\PushRedis::getAndroidToken($appId, $userId);
                     if ($androidTokens) {
                         $app = self::$_appList[$appId];
                         if ($app['platform'] == self::ANDROID) {
                             $secret = $app['xm_app_secret'];
                             $package = $app['package_name'];
                             Constants::setPackage($package);
                             Constants::setSecret($secret);
                             $UserRegIds = $androidTokens;
                             $title = $push['title'];
                             if ($title || empty($title)) {
                                 $title = "赶集";
                             }
                             $desc = $push['message'];
                             $payload = json_decode($push['data']);
                             $messageId = self::_getMessageId();
                             $payload->push_message_id = $messageId;
                             $sender = new Sender();
                             $message1 = new Builder();
                             $message1->passThrough($push['pass_though']);
                             // 这是一条通知栏消息,如果需要透传,把这个参数设置成1,同时去掉title和descption两个参数
                             if ($push['pass_though'] != 1) {
                                 $message1->title($title);
                                 // 通知栏的title
                                 $message1->description($desc);
                                 // 通知栏的descption
                             }
                             $message1->payload(json_encode($payload));
                             // 携带的数据,点击后将会通过客户端的receiver中的onReceiveMessage方法传入。
                             $message1->extra(Builder::notifyForeground, 1);
                             // 应用在前台是否展示通知,如果不希望应用在前台时候弹出通知,则设置这个参数为0
                             $message1->notifyId(2);
                             // 通知类型。最多支持0-4 5个取值范围,同样的类型的通知会互相覆盖,不同类型可以在通知栏并存
                             $message1->build();
                             $targetMessage = new TargetedMessage();
                             $targetMessage->setMessage($message1);
                             $sender->sendToIds($message1, $UserRegIds)->getRaw();
                             foreach ($androidTokens as $token) {
                                 $state = self::_insertToSQL(self::ANDROID, $push, $token, $userId, $appId, $messageId);
                             }
                         }
                     }
                 }
             }
         }
         $currentTime = time();
         if ($currentTime - $startTime > 178) {
             break;
         }
     }
     echo "ran end";
 }