ios('*', $title, $desc, $payload); $return_ios = $this->save_pushlog(array('*'), $result, 1); $result2 = $this->android('*', $title, $desc, $payload); $return_android = $this->save_pushlog(array('*'), $result2, 2); } else { $device_mod = M('device'); $field = 'uid,xmpush_alias,badge,user_type'; if (stripos($uids, ',')) { $map['uid'] = array('IN', explode(',', $uids)); } else { $map['uid'] = $uids; } $map['is_last'] = 1; $map['os_type'] = 1; //推送给ios $ios_data = $device_mod->where($map)->field($field)->select(); if ($ios_data) { foreach ($ios_data as $v) { $ios_uids[$v['user_type']][] = $v['uid']; $ios_appids[$v['user_type']][] = $v['xmpush_alias']; } if (count($ios_data) == 1) { $badge = $ios_data[0]['badge'] + 1; } else { $badge = 1; } $return_ios = 0; foreach ($ios_uids as $kk => $vv) { $result = $this->ios($ios_appids[$kk], $title, $desc, $payload, $badge, $kk); $return_ios += $this->save_pushlog($vv, $result, 1); } $device_mod->where($map)->setInc('badge'); } //推送给android $map['os_type'] = 2; $android_data = $device_mod->where($map)->field($field)->select(); if ($android_data) { foreach ($android_data as $k => $v) { $android_uids[$v['user_type']][] = $v['uid']; $android_appids[$v['user_type']][] = $v['xmpush_alias']; } $return_android = 0; foreach ($android_uids as $kk => $vv) { $result2 = $this->android($android_appids[$kk], $title, $desc, $payload,$kk); $return_android = $this->save_pushlog($android_uids, $result2, 2); } } } $return['ios'] = intval($return_ios); $return['android'] = intval($return_android); $return['total'] = $return['ios'] + $return['android']; return $return; } /** * ios推送 * @author: hyz */ protected function ios($aliasList, $title, $desc, $payload, $badge = 1, $user_type = 0) { Vendor('xmpush.Message'); Vendor('xmpush.HttpBase'); Vendor('xmpush.Sender'); Vendor('xmpush.Constants'); Vendor('xmpush.Stats'); Vendor('xmpush.Tracer'); Vendor('xmpush.Feedback'); Vendor('xmpush.DevTools'); Vendor('xmpush.Subscription'); Vendor('xmpush.TargetedMessage'); Vendor('xmpush.PushRequestPath'); Vendor('xmpush.PushRequestType'); Vendor('xmpush.Result'); Vendor('xmpush.Server'); Vendor('xmpush.ServerSwitch'); Vendor('xmpush.ErrorCode'); Vendor('xmpush.IOSBuilder'); if ($user_type == 0) { $secret = I_PUSH_TRAINER_SECRET; //app secret $package = I_PUSH_TRAINER_PACKAGE; //package } else { $secret = I_PUSH_COUCH_SECRET; //app secret $package = I_PUSH_COUCH_PACKAGE; //package } \Constants::setPackage($package); \Constants::setSecret($secret); if (APP_DEBUG) { \Constants::useSandbox(); } else { \Constants::useOfficial(); } $message = new \IOSBuilder(); $desc = '【' . $title . '】 ' . $desc; $message->description($desc); $message->soundUrl('default'); $message->badge($badge); $message->extra('payload', $payload); $message->build(); $sender = new \Sender(); if ($aliasList == '*') { $data = $sender->broadcastAll($message)->getRaw(); } else { $data = $sender->sendToAliases($message, $aliasList)->getRaw(); } return $data; } /** * android推送 * @author: hyz */ protected function android($aliasList, $title, $desc, $payload,$user_type = 0) { Vendor('xmpush.Message'); Vendor('xmpush.HttpBase'); Vendor('xmpush.Sender'); Vendor('xmpush.Constants'); Vendor('xmpush.Stats'); Vendor('xmpush.Tracer'); Vendor('xmpush.Feedback'); Vendor('xmpush.DevTools'); Vendor('xmpush.Subscription'); Vendor('xmpush.TargetedMessage'); Vendor('xmpush.PushRequestPath'); Vendor('xmpush.PushRequestType'); Vendor('xmpush.Result'); Vendor('xmpush.Server'); Vendor('xmpush.ServerSwitch'); Vendor('xmpush.ErrorCode'); Vendor('xmpush.Builder'); if ($user_type == 0) { $package = A_PUSH_TRAINER_PACKAGE;//package $secret = A_PUSH_TRAINER_SECRET; //app secret } else { $secret = A_PUSH_COUCH_SECRET; //app secret $package = A_PUSH_COUCH_PACKAGE; //package } \Constants::setPackage($package); \Constants::setSecret($secret); \Constants::useOfficial(); $sender = new \Sender(); $message = new \Builder(); $message->title($title); // 通知栏的title $message->description($desc); // 通知栏的descption $message->passThrough(0); // 这是一条通知栏消息,如果需要透传,把这个参数设置成1,同时去掉title和descption两个参数 $message->payload($payload); // 携带的数据,点击后将会通过客户端的receiver中的onReceiveMessage方法传入。 $message->extra(\Builder::notifyEffect, 1); // 此处设置预定义点击行为,1为打开app $message->extra(\Builder::notifyForeground, 1); // 应用在前台是否展示通知,如果不希望应用在前台时候弹出通知,则设置这个参数为0 $message->notifyId(2); // 通知类型。最多支持0-4 5个取值范围,同样的类型的通知会互相覆盖,不同类型可以在通知栏并存 $message->build(); if ($aliasList == '*') { $data = $sender->broadcastAll($message)->getRaw(); } else { $data = $sender->sendToAliases($message, $aliasList)->getRaw(); } return $data; } /** * 保存推送日志 * @author: hyz */ protected function save_pushlog($uids, $data, $os_type) { if ($data['result'] == 'ok') { preg_match('/\d+/', $data['info'], $mt); $log['total'] = intval($mt[0]); $log['trace_id'] = $data['trace_id']; $log['uids'] = implode(',', $uids); $log['os_type'] = $os_type; $log['c_time'] = myDate(); cplog('推送日志:' . var_export($data, true), 'INFO'); cplog('推送结果:' . var_export($log, true), 'INFO'); //M('xmpush_log')->add($log); return $log['total']; } else { cplog('推送日志:' . var_export($data, true)); return 0; } } }