作者 yangfu

fix: push only one message to the mobile device

... ... @@ -27,51 +27,59 @@ func Notification(header *protocol.RequestHeader, request *protocol.PushInfoRequ
Content: request.Content,
Ext: request.Ext,
}
projectKeys []string = []string{request.ProjectKey}
)
rsp = &protocol.PushInfoResponse{}
if project, err = repProject.FindOne(map[string]interface{}{"project_slave_key": request.ProjectKey}); err != nil {
log.Error(err)
err = protocol.NewCustomMessage(1, fmt.Sprintf("project_key:%v not found", request.ProjectKey))
return
}
if appInfo, err = repApp.FindOne(map[string]interface{}{"project_id": project.Id}); err != nil {
log.Error(err)
err = protocol.NewCustomMessage(1, fmt.Sprintf("project_key:%v not found", request.ProjectKey))
return
if len(request.ProjectKeys) > 0 {
projectKeys = request.ProjectKeys
}
if deviceList, err = repDevice.Find(
map[string]interface{}{
"receivers": request.Receivers, "project_master_key": project.ProjectMasterKey},
); err != nil {
log.Error(err)
err = nil
return
}
if extInfo, ok := appInfo.GetExtInfo(); ok {
if len(extInfo.Intent) > 0 {
requestOriginal.Ext["intent"] = extInfo.Intent
for i := 0; i < len(projectKeys); i++ {
projectKey := projectKeys[i]
rsp = &protocol.PushInfoResponse{}
if project, err = repProject.FindOne(map[string]interface{}{"project_slave_key": projectKey}); err != nil {
log.Error(err)
err = protocol.NewCustomMessage(1, fmt.Sprintf("project_key:%v not found", projectKey))
return
}
if len(extInfo.Sound) > 0 {
requestOriginal.Ext["sound"] = extInfo.Sound
if appInfo, err = repApp.FindOne(map[string]interface{}{"project_id": project.Id}); err != nil {
log.Error(err)
err = protocol.NewCustomMessage(1, fmt.Sprintf("project_key:%v not found", projectKey))
return
}
if deviceList, err = repDevice.Find(
map[string]interface{}{
"receivers": request.Receivers, "project_master_key": project.ProjectMasterKey},
); err != nil {
log.Error(err)
err = nil
return
}
if extInfo, ok := appInfo.GetExtInfo(); ok {
if len(extInfo.Intent) > 0 {
requestOriginal.Ext["intent"] = extInfo.Intent
}
if len(extInfo.Sound) > 0 {
requestOriginal.Ext["sound"] = extInfo.Sound
}
}
if len(deviceList) == 0 {
//e := protocol.NewSuccessWithMessage(fmt.Sprintf("Project:%v 接收人:%v 未查询到注册的设备信息!",projectKey, request.Receivers))
log.Error(fmt.Sprintf("【个推】 Project:%v 接收人:%v 未查询到注册的设备信息!", projectKey, request.Receivers))
continue
}
for i := range deviceList {
receivers = append(receivers, deviceList[i].ClientId)
receiverIds = append(receiverIds, deviceList[i].Uid)
}
request.ActualReceivers = receiverIds
requestOriginal.AppKey = appInfo.AppKey
requestOriginal.AppId = appInfo.AppId
requestOriginal.Secret = appInfo.AppMasterSecret
requestOriginal.ClientIdList = receivers
rsp, err = NotificationOriginal(header, requestOriginal)
repDevice.SaveLog(request, rsp.ExtData, err)
if err != nil {
err = protocol.NewCustomMessage(1, err.Error())
}
}
if len(deviceList) == 0 {
err = protocol.NewSuccessWithMessage(fmt.Sprintf("接收人:%v 未查询到注册的设备信息!", request.Receivers))
return
}
for i := range deviceList {
receivers = append(receivers, deviceList[i].ClientId)
receiverIds = append(receiverIds, deviceList[i].Uid)
}
request.ActualReceivers = receiverIds
requestOriginal.AppKey = appInfo.AppKey
requestOriginal.AppId = appInfo.AppId
requestOriginal.Secret = appInfo.AppMasterSecret
requestOriginal.ClientIdList = receivers
rsp, err = NotificationOriginal(header, requestOriginal)
repDevice.SaveLog(request, rsp.ExtData, err)
if err != nil {
err = protocol.NewCustomMessage(1, err.Error())
}
return
}
... ...
... ... @@ -23,13 +23,13 @@ type PushInfoResponse struct {
/*PushInfo 推送信息*/
type PushInfoRequest struct {
Type int `json:"msgType"`
Receivers []int64 `json:"receivers"` //接受用户id列表
ProjectKey string `json:"project"` //ability
Title string `json:"title" valid:"Required"`
Content string `json:"content" valid:"Required"`
Ext map[string]interface{} `json:"ext"` //key->transData:透传数据
Type int `json:"msgType"`
Receivers []int64 `json:"receivers"` //接受用户id列表
ProjectKey string `json:"project"` //ability
ProjectKeys []string `json:"projects"` //同时推送多个项目的时候 eg:例如能力展示有一些发布了独立的企业版本,需要能同时推送到达
Title string `json:"title" valid:"Required"`
Content string `json:"content" valid:"Required"`
Ext map[string]interface{} `json:"ext"` //key->transData:透传数据
ActualReceivers []int64 `json:"-"` //实际发送的人员id列表
}
... ...
... ... @@ -78,7 +78,7 @@ func (this *PushController) UpdateDevice() {
msg = m
return
}
if request.ProjectKey == "" {
if request.ProjectKey == "" || request.ProjectKey == "mmm.boss.pad" || request.ProjectKey == "mmm.boss" {
request.ProjectKey = "mmm.ability" //默认能力展示项目
}
header := controllers.GetRequestHeader(this.Ctx)
... ...