Exemplo n.º 1
0
 public function __construct()
 {
     $setting = \mysoft\pubservice\Conf::getConfig('push_xm');
     $setting = json_decode($setting, true);
     if (is_array($setting) && isset($setting['secret']) && isset($setting['package'])) {
         \xmpush\Constants::setPackage($setting['package']);
         \xmpush\Constants::setSecret($setting['secret']);
         \xmpush\Constants::useOfficial();
     } else {
         throw new \Exception('push_xm配置有误');
     }
     $this->sender = new \xmpush\Sender();
 }
Exemplo n.º 2
0
 public function push($TaskList, $AppName, $XMAppSecret, $PackageName)
 {
     $secret = $XMAppSecret;
     $package = $PackageName;
     foreach ($TaskList as &$Task) {
         Constants::setPackage($package);
         Constants::setSecret($secret);
         $UserRegIds = array($Task->device_token);
         $title = $Task->title;
         if ($title || empty($title)) {
             $title = "赶集";
         }
         $desc = $Task->bussiness_message;
         $payload = json_decode($Task->bussiness_data);
         $payload->push_message_id = $Task->id;
         $sender = new Sender();
         // message1 演示自定义的点击行为
         $message1 = new Builder();
         $message1->passThrough($Task->pass_through);
         // 这是一条通知栏消息,如果需要透传,把这个参数设置成1,同时去掉title和descption两个参数
         if ($Task->pass_through != 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->setTarget('alias1', TargetedMessage::TARGET_TYPE_ALIAS); // 设置发送目标。可通过regID,alias和topic三种方式发送
         $targetMessage->setMessage($message1);
         //                var_dump($Task->bussiness_data);
         $back = $sender->sendToIds($message1, $UserRegIds)->getRaw();
         //var_dump($back);
         if ($back['code'] == 0) {
             $Task->done(1);
         } else {
             $Task->done(2);
         }
     }
 }
Exemplo n.º 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";
 }
Exemplo n.º 4
0
<?php

use xmpush\Builder;
use xmpush\HttpBase;
use xmpush\Sender;
use xmpush\Constants;
use xmpush\Stats;
use xmpush\Tracer;
use xmpush\Feedback;
use xmpush\Subscription;
use xmpush\TargetedMessage;
include_once dirname(__FILE__) . '/autoload.php';
$secret = 'XlRqACQ7YJF13qtiIYtP4g==';
$package = 'com.dlkingx.PushDemo';
Constants::setPackage($package);
Constants::setSecret($secret);
$aliasList = array('alias1', 'alias2');
$title = '你好';
$desc = '这是一条mipush推送消息';
$payload = '{"test":1,"ok":"It\'s a string"}';
$sender = new Sender();
// message1 演示自定义的点击行为
$message1 = new Builder();
$message1->title($title);
// 通知栏的title
$message1->description($desc);
// 通知栏的descption
$message1->passThrough(0);
// 这是一条通知栏消息,如果需要透传,把这个参数设置成1,同时去掉title和descption两个参数
$message1->payload($payload);
// 携带的数据,点击后将会通过客户端的receiver中的onReceiveMessage方法传入。