You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
1.8 KiB
84 lines
1.8 KiB
package push
|
|
|
|
import (
|
|
"Open_IM/internal/push"
|
|
"Open_IM/internal/push/jpush/common"
|
|
"Open_IM/internal/push/jpush/requestBody"
|
|
"Open_IM/pkg/common/config"
|
|
"bytes"
|
|
"encoding/json"
|
|
"io/ioutil"
|
|
"net/http"
|
|
)
|
|
|
|
var (
|
|
JPushClient *JPush
|
|
)
|
|
|
|
func init() {
|
|
JPushClient = newGetuiClient()
|
|
}
|
|
|
|
type JPush struct{}
|
|
|
|
func newGetuiClient() *JPush {
|
|
return &JPush{}
|
|
}
|
|
|
|
func (j *JPush) Auth(apiKey, secretKey string, timeStamp int64) (token string, err error) {
|
|
return token, nil
|
|
}
|
|
|
|
func (j *JPush) SetAlias(cid, alias string) (resp string, err error) {
|
|
return resp, nil
|
|
}
|
|
|
|
func (j *JPush) Push(accounts []string, title, detailContent, operationID string, opts push.PushOpts) (string, error) {
|
|
|
|
var pf requestBody.Platform
|
|
pf.SetAll()
|
|
var au requestBody.Audience
|
|
au.SetAlias(accounts)
|
|
var no requestBody.Notification
|
|
|
|
var extras requestBody.Extras
|
|
if opts.Signal.ClientMsgID != "" {
|
|
extras.ClientMsgID = opts.Signal.ClientMsgID
|
|
}
|
|
no.IOSEnableMutableContent()
|
|
no.SetExtras(extras)
|
|
no.SetAlert(title)
|
|
var me requestBody.Message
|
|
me.SetMsgContent(detailContent)
|
|
var o requestBody.Options
|
|
o.SetApnsProduction(config.Config.IOSPush.Production)
|
|
var po requestBody.PushObj
|
|
po.SetPlatform(&pf)
|
|
po.SetAudience(&au)
|
|
po.SetNotification(&no)
|
|
po.SetMessage(&me)
|
|
po.SetOptions(&o)
|
|
|
|
con, err := json.Marshal(po)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
client := &http.Client{}
|
|
req, err := http.NewRequest("POST", config.Config.Push.Jpns.PushUrl, bytes.NewBuffer(con))
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
req.Header.Set("Authorization", common.GetAuthorization(config.Config.Push.Jpns.AppKey, config.Config.Push.Jpns.MasterSecret))
|
|
|
|
resp, err := client.Do(req)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
defer resp.Body.Close()
|
|
result, err := ioutil.ReadAll(resp.Body)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return string(result), nil
|
|
}
|