Files
open-im-server/internal/push/offlinepush/jpush/push.go
T

108 lines
3.0 KiB
Go
Raw Normal View History

2023-07-04 11:15:20 +08:00
// Copyright © 2023 OpenIM. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
2023-06-30 09:45:02 +08:00
package jpush
import (
"context"
"encoding/base64"
"fmt"
2023-07-03 14:12:29 +08:00
"github.com/openimsdk/open-im-server/v3/internal/push/offlinepush/jpush/body"
2024-11-18 16:25:46 +08:00
"github.com/openimsdk/open-im-server/v3/internal/push/offlinepush/options"
"github.com/openimsdk/open-im-server/v3/pkg/common/config"
2024-04-19 22:23:08 +08:00
"github.com/openimsdk/tools/utils/httputil"
2023-06-30 09:45:02 +08:00
)
type JPush struct {
2024-04-19 22:23:08 +08:00
pushConf *config.Push
httpClient *httputil.HTTPClient
}
2023-06-30 09:45:02 +08:00
2024-04-19 22:23:08 +08:00
func NewClient(pushConf *config.Push) *JPush {
return &JPush{pushConf: pushConf,
httpClient: httputil.NewHTTPClient(httputil.NewClientConfig()),
}
2023-06-30 09:45:02 +08:00
}
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) getAuthorization(appKey string, masterSecret string) string {
str := fmt.Sprintf("%s:%s", appKey, masterSecret)
buf := []byte(str)
Authorization := fmt.Sprintf("Basic %s", base64.StdEncoding.EncodeToString(buf))
return Authorization
}
2024-04-19 22:23:08 +08:00
func (j *JPush) Push(ctx context.Context, userIDs []string, title, content string, opts *options.Opts) error {
2023-06-30 09:45:02 +08:00
var pf body.Platform
pf.SetAll()
var au body.Audience
au.SetAlias(userIDs)
var no body.Notification
2024-11-18 16:25:46 +08:00
extras := make(map[string]string)
extras["ex"] = opts.Ex
2023-06-30 09:45:02 +08:00
if opts.Signal.ClientMsgID != "" {
2024-11-18 16:25:46 +08:00
extras["ClientMsgID"] = opts.Signal.ClientMsgID
2023-06-30 09:45:02 +08:00
}
no.IOSEnableMutableContent()
no.SetExtras(extras)
2024-11-18 16:25:46 +08:00
no.SetAlert(content, title, opts)
2024-04-19 22:23:08 +08:00
no.SetAndroidIntent(j.pushConf)
2023-06-30 09:45:02 +08:00
var msg body.Message
msg.SetMsgContent(content)
2024-11-18 16:25:46 +08:00
msg.SetTitle(title)
if opts.Signal.ClientMsgID != "" {
msg.SetExtras("ClientMsgID", opts.Signal.ClientMsgID)
}
msg.SetExtras("ex", opts.Ex)
2023-06-30 09:45:02 +08:00
var opt body.Options
2024-04-19 22:23:08 +08:00
opt.SetApnsProduction(j.pushConf.IOSPush.Production)
2023-06-30 09:45:02 +08:00
var pushObj body.PushObj
pushObj.SetPlatform(&pf)
pushObj.SetAudience(&au)
pushObj.SetNotification(&no)
pushObj.SetMessage(&msg)
pushObj.SetOptions(&opt)
2024-11-18 16:25:46 +08:00
var resp map[string]any
return j.request(ctx, pushObj, &resp, 5)
2023-06-30 09:45:02 +08:00
}
2024-11-18 16:25:46 +08:00
func (j *JPush) request(ctx context.Context, po body.PushObj, resp *map[string]any, timeout int) error {
err := j.httpClient.PostReturn(
2023-07-03 16:29:22 +08:00
ctx,
2024-11-19 09:59:21 +08:00
j.pushConf.JPush.PushURL,
2023-07-03 16:29:22 +08:00
map[string]string{
2024-11-19 09:59:21 +08:00
"Authorization": j.getAuthorization(j.pushConf.JPush.AppKey, j.pushConf.JPush.MasterSecret),
2023-07-03 16:29:22 +08:00
},
po,
resp,
timeout,
)
2024-11-18 16:25:46 +08:00
if err != nil {
return err
}
if (*resp)["sendno"] != "0" {
return fmt.Errorf("jpush push failed %v", resp)
}
return nil
2023-06-30 09:45:02 +08:00
}