项目需求:后台管理人员向App用户推送消息。
- 注:极光推送有多种推送方式供用户选择,很方便,而且 github 上也讲得很明白,再加上极光文档,就更加清晰了(文末已附上链接)。笔者此处用到了三种方式:all、tag和alias(别名)。
温馨提示:本文中(仅限本文),笔者附的代码主要用于自己记录,参考者要以文末的 github 中的示例和极光文档为主,这样参考者会更加容易梳理,因为github上没有逻辑代码的干扰,而且推送方式也比较全面。
1、安装包:
go get github.com/ylywyn/jpush-api-go-client
2、完整代码:
package ceControllers
import (
"fmt"
jpushclient "github.com/ylywyn/jpush-api-go-client"
)
/*
极光推送:go向Android推送消息
*/
func JpushGoSend(tags []string, aliasPhone []string, context string, state, jpushState int) error {
//state:区分推送方式; jpushState :区分推送消息的类别;
//构建要推送的平台: jpushclient.Platform
var pf jpushclient.Platform
pf.Add(jpushclient.ANDROID)
//构建接收听众: jpushclient.Audience
var ad jpushclient.Audience
if state == JpushTag {
//推送 通知公告
if tags[0] == AdminLevelOne {
//极光推送 - 所有
//一级管理员发布,所有人员接收
ad.All()
} else {
//极光推送 - tag
//二级或者三级管理员发布,下属app人员接收
ad.SetTag(tags)
}
} else {
//极光推送 - 别名 ,用app用户的登录手机号当作别名
ad.SetAlias(aliasPhone)
}
//构建通知 jpushclient.Notice,或者消息: jpushclient.Message
//Notice
var notice jpushclient.Notice
notice.SetAlert("alert_test")
if jpushState == JpushStateNotice {
//推送通知公告
notice.SetAndroidNotice(&jpushclient.AndroidNotice{Title: "通知公告", Alert: context})
} else {
//推送新单
notice.SetAndroidNotice(&jpushclient.AndroidNotice{Title: "新派xx单", Alert: context})
}
//构建jpushclient.PayLoad
payload := jpushclient.NewPushPayLoad()
payload.SetPlatform(&pf)
payload.SetAudience(&ad)
payload.SetNotice(¬ice)
bytes, _ := payload.ToBytes()
fmt.Printf("%s\r\n", string(bytes))
//构建PushClient,发出推送
c := jpushclient.NewPushClient(masterSecret, appKey)
r, err := c.Send(bytes)
if err != nil {
fmt.Printf("err:%s", err.Error())
return err
} else {
fmt.Printf("ok:%s", r)
}
return nil
}
github链接:https://github.com/ylywyn/jpush-api-go-client
极光文档链接:https://docs.jiguang.cn/jpush/server/push/rest_api_v3_push