/** * 批量发送消息 * @return [type] [description] */ static function send($sendId) { $pushInfoModel = new PushInfoModel(); $db = DB::getInstance(); if (!empty($sendId)) { $andSql = "and a.id={$sendId}"; } $sql = "select b.device_token,b.device_type,b.token, a.params, a.id, a.content from t_push_info a, t_login b where a.to_user = b.uid and b.device_token != '' and a.is_send = 0 {$andSql} and b.token not like 'expired at%' group by device_token"; $infos = $db->get_all($sql); if (count($infos > 0)) { foreach ($infos as $info) { if ($info['device_type']) { $push = new XingeApp(2200102180, "661fd033916fadbf4e0866a18978782a"); $mess = new MessageIOS(); $mess->setAlert($info['content']); $params = json_decode($info['params'], true); if (!empty($params['content'])) { $params['content'] = urldecode($params['content']); } $mess->setCustom($params); $raw = $push->PushSingleDevice($info['device_token'], $mess, XingeApp::IOSENV_PROD); $ret = json_encode($raw, true); if ($ret['ret_code'] == 0) { $sql = "update t_push_info set is_send = 1 where id={$info['id']}"; $db->query($sql); } } else { // for android $push = new XingeApp(2100117084, "13391a7ec8a47d5e30525a04bd04befa"); $mess = new Message(); $mess->setTitle('合租吧'); $mess->setContent($info['content']); $params = json_decode($info['params'], true); if (!empty($params['content'])) { $params['content'] = urldecode($params['content']); } $mess->setCustom($params); $mess->setType(Message::TYPE_NOTIFICATION); $mess->setStyle(new Style(0, 1, 1, 0, 0)); $action = new ClickAction(); $action->setActionType(ClickAction::TYPE_ACTIVITY); $mess->setAction($action); $raw = $push->PushSingleDevice($info['device_token'], $mess); //$raw = XingeApp::PushTokenAndroid(2100117084, "13391a7ec8a47d5e30525a04bd04befa", "标题", "大家好!", $info['device_token']); var_dump($raw); $ret = json_encode($raw, true); if ($ret['ret_code'] == 0) { $sql = "update t_push_info set is_send = 1 where id={$info['id']}"; $db->query($sql); } } } } }
/** * [pushAction description] * @return [type] [description] */ public function pushAction() { //var_dump(XingeApp::PushTokenIos(2200102180, "661fd033916fadbf4e0866a18978782a", "你好啊,我是彭庚庚", "334b890e1718a3616b306e7f7b8202365f04a86bd6d43dd586474f9eb5be7061", // XingeApp::IOSENV_DEV)); //echo '123'; $push = new XingeApp(2200102180, "661fd033916fadbf4e0866a18978782a"); $mess = new MessageIOS(); $mess->setAlert('你好嘛,我是庚庚'); $mess->setCustom(array('aid' => '3')); $ret = $push->PushSingleDevice('334b890e1718a3616b306e7f7b8202365f04a86bd6d43dd586474f9eb5be7061', $mess, XingeApp::IOSENV_DEV); var_dump($ret); }
protected function _initMessage($os, $content) { debug($content); if ($os == self::OS_ANDROID) { // 旧版本兼容 $content['type'] = 'web'; $mess = new Message(); $mess->setType(Message::TYPE_MESSAGE); $mess->setExpireTime(86400 * 3); $mess->setTitle($content['title']); $mess->setContent(json_encode($content)); } if ($os == self::OS_IOS) { $mess = new MessageIOS(); $mess->setAlert($content['title']); $mess->setSound('default'); $mess->setExpireTime(86400 * 3); unset($content['title']); unset($content['content']); $mess->setCustom($content); } return $mess; }
/** * 推送接口 * @param int $push_type 1单个设备 2部分人(*常用) * @param int $device_type 设备类型 1:浏览器设备 2:pc设备 3:Android设备 4:ios设备 5:windows phone设备 * @param string $title 标题(仅安卓) * @param string $content 留言正文 * @param int $customtype 自定义类型,t * @param string $customvalue 自定义值,v * @param string $p_deviceTokens 用户推送ID,百度里是buserid * @param string $tag_name 指定标签 * @return array results */ public static function pushMessage($push_type, $device_type, $title = '', $content, $customtype = null, $customvalue = null, $p_deviceTokens = null, $tag_name = null) { $push = null; $mess = null; $push = static::getPush($device_type); if ($push == null) { return Utility::getArrayForResults(RUNTIME_CODE_ERROR_PARAM, '推送对象获取失败,无法创建推送任务。'); } if ($device_type == 4) { $mess = new MessageIOS(); $mess->setExpireTime(86400); //$mess->setSendTime("2014-03-13 16:00:00"); $mess->setAlert($content); //$mess->setAlert(array('key1'=>'value1')); $mess->setBadge(0); $mess->setSound(''); if (isset($customtype, $customvalue)) { $custom = array('t' => intval($customtype), 'v' => $customvalue); $mess->setCustom($custom); } } else { if ($device_type == 3) { $mess = new Message(); if ($title == '') { $title = $content; } $mess->setType(Message::TYPE_NOTIFICATION); $mess->setTitle($title); $mess->setContent($content); $mess->setExpireTime(86400); //$style = new Style(0); #含义:样式编号0,响铃,震动,不可从通知栏清除,不影响先前通知 $style = new Style(0, 1, 1, 0, 0); $mess->setStyle($style); $action = new ClickAction(); $action->setActionType(ClickAction::TYPE_ACTIVITY); $action->setActivity(' '); //扯淡的xinge sdk,isValid()方法判断m_activity默认值有点问题 $mess->setAction($action); if (isset($customtype, $customvalue)) { $custom = array('t' => intval($customtype), 'v' => $customvalue); $mess->setCustom($custom); } } else { return Utility::getArrayForResults(RUNTIME_CODE_ERROR_PARAM, '请传入正确的设备类型,iOS 还是 安卓'); } } $params['production_mode'] = static::$DEPLOY_STATUS == 2; //是否正式环境 $ret = array(); switch ($push_type) { case 1: //指定token $p_deviceTokens = is_array($p_deviceTokens) ? $p_deviceTokens : explode(',', $p_deviceTokens); if (count($p_deviceTokens) == 0 || count($p_deviceTokens) == 1 && $p_deviceTokens[0] == null) { return Utility::getArrayForResults(RUNTIME_CODE_ERROR_PARAM, '请传入正确的用户推送token'); } if (count($p_deviceTokens) > 5) { $retMulti = $push->CreateMultipush($mess, $device_type == 3 ? 0 : (static::$DEPLOY_STATUS == 2 ? XingeApp::IOSENV_PROD : XingeApp::IOSENV_DEV)); $ret[] = array('action' => 'CreateMultipush', 'ret' => $retMulti); if (is_array($retMulti) && array_key_exists('result', $retMulti) && array_key_exists('push_id', $retMulti['result'])) { $maxCount = 1000; //每次最大传输设备量 for ($i = 0; $i < count($p_deviceTokens); $i += $maxCount) { $ret[] = array('action' => 'PushDeviceListMultiple', 'token' => $p_deviceTokens, 'ret' => $push->PushDeviceListMultiple($retMulti['result']['push_id'], array_slice($p_deviceTokens, $i, $maxCount))); } } } else { foreach ($p_deviceTokens as $token) { if ($device_type == 4) { $ret[] = array('action' => 'PushSingleDevice', 'token' => $token, 'ret' => $push->PushSingleDevice($token, $mess, static::$DEPLOY_STATUS == 2 ? XingeApp::IOSENV_PROD : XingeApp::IOSENV_DEV)); } else { if ($device_type == 3) { $ret[] = array('action' => 'PushSingleDevice', 'token' => $token, 'ret' => $push->PushSingleDevice($token, $mess)); } } } } break; case 2: //指定设备群发 if ($device_type == 4) { $ret[] = array('action' => 'PushAllDevices', 'token' => '0', 'ret' => $push->PushAllDevices(0, $mess, static::$DEPLOY_STATUS == 2 ? XingeApp::IOSENV_PROD : XingeApp::IOSENV_DEV)); } else { if ($device_type == 3) { $ret[] = array('action' => 'PushAllDevices', 'token' => '0', 'ret' => $push->PushAllDevices(0, $mess)); } } break; default: return Utility::getArrayForResults(RUNTIME_CODE_ERROR_PARAM, 'push_type 1:单个人 2部分人 3所有人'); } return Utility::getArrayForResults(RUNTIME_CODE_OK, '', array('push_type' => $push_type, 'device_type' => $device_type, 'messages' => $mess, 'result' => $ret)); }
function DemoPushSingleAccountIOS() { $push = new XingeApp(00, 'secret_key'); $mess = new MessageIOS(); $mess->setExpireTime(86400); $mess->setAlert("ios test"); //$mess->setAlert(array('key1'=>'value1')); $mess->setBadge(1); $mess->setSound("beep.wav"); $custom = array('key1' => 'value1', 'key2' => 'value2'); $mess->setCustom($custom); $acceptTime1 = new TimeInterval(0, 0, 23, 59); $mess->addAcceptTime($acceptTime1); $ret = $push->PushSingleAccount(0, 'joelliu', $mess, XingeApp::IOSENV_DEV); return $ret; }
function pushAccountList($paramArr) { $options = array('accessId' => '', 'secretKey' => '', 'content' => '', 'token' => '', 'environment' => 2, 'userId' => '', 'expireTime' => 86400, 'sound' => 'beep.wav', 'sendTime' => '', 'badge' => 1, 'custom' => false); if (is_array($paramArr)) { $options = array_merge($options, $paramArr); } extract($options); if (!$accessId || !$secretKey || !$token || !$content || !$userId) { return false; } $push = new XingeApp($accessId, $secretKey); $mess = new MessageIOS(); $mess->setExpireTime($expireTime); $mess->setAlert($content); //$mess->setAlert(array('key1'=>'value1')); $mess->setBadge(1); $mess->setSound($sound); $mess->setCustom($custom); $acceptTime1 = new TimeInterval(0, 0, 23, 59); $mess->addAcceptTime($acceptTime1); $ret = $push->PushAccountList(0, $userId, $mess, XingeApp::IOSENV_DEV); return $ret; }
/** * 更改订单状态时,向手机端(包括Android和IOS)发送提醒信息 * * @param [object] $[shop] [店铺对象] * @param [object] $[mainOrder] [主订单] * @param [int] $[toBeStatus] [要改变状态] * * @return Response */ protected function pushOrderInfo($shop, $mainOrder, $toBeStatus) { //获取信鸽系统配置 $accessId = Config::get('xinge.accessId'); $secretKey = Config::get('xinge.secretKey'); $xingeApp = new XingeApp($accessId, $secretKey); //根据mainorder中的userid获取token和设备类型 $userTokens = UserToken::where('wy_user_id', $mainOrder->wy_user_id)->where('wy_user_type', USER_TYPE_1)->where('wy_status', LOGIN_STATUS_1)->get(); if (!empty($userTokens->toArray())) { foreach ($userTokens as $index => $userToken) { if (DEVICE_TYPE_1 == $userToken->wy_device_type) { //根据不同状态获取不同的模板信息 switch ($toBeStatus) { case ORDER_STATE_2: //接单 $orderMessage = Config::get('xinge.androidRecvMessage'); break; case ORDER_STATE_3: //配送中 $orderMessage = Config::get('xinge.androidDeliveryMessage'); break; case ORDER_STATE_4: //完成 $orderMessage = Config::get('xinge.androidFinishMessage'); break; case ORDER_STATE_6: //拒单 $orderMessage = Config::get('xinge.androidRefuseMessage'); break; default: break; } if (isset($orderMessage)) { //单击动作 $action = new ClickAction(); $action->setActionType(ClickAction::TYPE_ACTIVITY); $action->setActivity($orderMessage['activity']); //显示样式 $styleParams = $orderMessage['style']; $style = new Style($styleParams['builderId'], $styleParams['ring'], $styleParams['vibrate'], $styleParams['clearable'], $styleParams['nId'], $styleParams['lights'], $styleParams['iconType'], $styleParams['styleId']); //Android平台的消息 $message = new Message(); $message->setTitle($orderMessage['title']); $message->setContent($orderMessage['content']); $message->setExpireTime($orderMessage['expireTime']); $message->setType(Message::TYPE_NOTIFICATION); $message->setStyle($style); $message->setAction($action); } else { $context = array("errorCode" => -10054, "userID" => $mainOrder->wy_user_id, "toBeStatus" => $toBeStatus); Log::error(Lang::get('errormessages.-10054'), $context); } } elseif (DEVICE_TYPE_2 == $userToken->wy_device_type) { //根据不同状态获取不同的模板信息 switch ($toBeStatus) { case ORDER_STATE_2: //接单 $orderMessage = Config::get('xinge.iosRecvMessage'); break; case ORDER_STATE_3: //配送中 $orderMessage = Config::get('xinge.iosDeliveryMessage'); break; case ORDER_STATE_4: //完成 $orderMessage = Config::get('xinge.iosFinishMessage'); break; case ORDER_STATE_6: //拒单 $orderMessage = Config::get('xinge.iosRefuseMessage'); break; default: break; } if (isset($orderMessage)) { //IOS平台的消息,需要IOS文档 $message = new MessageIOS(); $message->setTitle($orderMessage['title']); } else { $context = array("errorCode" => -10055, "userID" => $mainOrder->wy_user_id, "toBeStatus" => $toBeStatus); Log::error(Lang::get('errormessages.-10055'), $context); } } else { $context = array("errorCode" => -10056, "userID" => $mainOrder->wy_user_id, "deviceType" => $userToken->wy_device_type); Log::error(Lang::get('errormessages.-10056'), $context); } //自定义参数,key-value形式的 if (isset($message)) { $custom = array('shop_name' => $shop->wy_shop_name, 'main_order_id' => $mainOrder->wy_main_order_id); $message->setCustom($custom); $result = $xingeApp->PushSingleDevice($userToken->wy_token, $message); Log::info($result); } else { $context = array("errorCode" => -10057, "userID" => $mainOrder->wy_user_id, "deviceType" => $userToken->wy_device_type, "toBeStatus" => $toBeStatus); Log::error(Lang::get('errormessages.-10057'), $context); } } } else { $context = array("errorCode" => -10053, "userID" => $mainOrder->wy_user_id); Log::error(Lang::get('errormessages.-10053'), $context); } }