Skip to content

Commit 331a218

Browse files
author
施凯伦
committed
Subscription about api supported
1 parent d728146 commit 331a218

File tree

3 files changed

+179
-3
lines changed

3 files changed

+179
-3
lines changed

client.go

Lines changed: 121 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,20 @@ import (
1212
)
1313

1414
type MiPush struct {
15-
packageName string
15+
packageName []string
1616
host string
1717
appSecret string
1818
}
1919

20-
func NewClient(appSecret, packageName string) *MiPush {
20+
func NewClient(appSecret string, packageName []string) *MiPush {
2121
return &MiPush{
2222
packageName: packageName,
2323
host: ProductionHost,
2424
appSecret: appSecret,
2525
}
2626
}
2727

28+
//----------------------------------------Sender----------------------------------------//
2829
// 根据registrationId,发送消息到指定设备上
2930
func (m *MiPush) Send(msg *Message, regID string) (*Result, error) {
3031
params := m.assembleSendParams(msg, regID)
@@ -239,6 +240,7 @@ func (m *MiPush) DeleteScheduleJobByJobKey(jobKey string) (*Result, error) {
239240
return &result, nil
240241
}
241242

243+
//----------------------------------------Stats----------------------------------------//
242244
// 获取指定日期范围内的日统计数据(如果日期范围包含今日,则今日数据为从今天00:00开始到现在的累计量)。
243245
// packageName:
244246
// Android设备,传入App的包名
@@ -257,6 +259,7 @@ func (m *MiPush) Stats(start, end, packageName string) (*StatsResult, error) {
257259
return &result, nil
258260
}
259261

262+
//----------------------------------------Tracer----------------------------------------//
260263
// 获取指定ID的消息状态
261264
func (m *MiPush) GetMessageStatusByMsgID(msgID string) (*StatusResult, error) {
262265
params := m.assembleStatusParams(msgID)
@@ -302,6 +305,78 @@ func (m *MiPush) GetMessageStatusPeriod(beginTime, endTime int64) (*StatusResult
302305
return &result, nil
303306
}
304307

308+
//----------------------------------------Subscription----------------------------------------//
309+
310+
// 给某个regid订阅标签
311+
func (m *MiPush) SubscribeTopicForRegID(regID, topic, category string) (*Result, error) {
312+
params := m.assembleSubscribeTopicForRegIDParams(regID, topic, category)
313+
bytes, err := m.doPost(m.host+TopicSubscribeURL, params)
314+
if err != nil {
315+
return nil, err
316+
}
317+
var result Result
318+
err = json.Unmarshal(bytes, &result)
319+
if err != nil {
320+
return nil, err
321+
}
322+
return &result, nil
323+
}
324+
325+
// 给一组regid列表订阅标签
326+
func (m *MiPush) SubscribeTopicForRegIDList(regIDList []string, topic, category string) (*Result, error) {
327+
return m.SubscribeTopicForRegID(strings.Join(regIDList, ","), topic, category)
328+
}
329+
330+
// 取消某个regid的标签。
331+
func (m *MiPush) UnSubscribeTopicForRegID(regID, topic, category string) (*Result, error) {
332+
params := m.assembleUnSubscribeTopicForRegIDParams(regID, topic, category)
333+
bytes, err := m.doPost(m.host+TopicUnSubscribeURL, params)
334+
if err != nil {
335+
return nil, err
336+
}
337+
var result Result
338+
err = json.Unmarshal(bytes, &result)
339+
if err != nil {
340+
return nil, err
341+
}
342+
return &result, nil
343+
}
344+
345+
// 取消一组regid列表的标签
346+
func (m *MiPush) UnSubscribeTopicForRegIDList(regIDList []string, topic, category string) (*Result, error) {
347+
return m.UnSubscribeTopicForRegID(strings.Join(regIDList, ","), topic, category)
348+
}
349+
350+
// 给一组alias列表订阅标签
351+
func (m *MiPush) SubscribeTopicByAlias(aliases []string, topic, category string) (*Result, error) {
352+
params := m.assembleSubscribeTopicByAliasParams(aliases, topic, category)
353+
bytes, err := m.doPost(m.host+TopicSubscribeByAliasURL, params)
354+
if err != nil {
355+
return nil, err
356+
}
357+
var result Result
358+
err = json.Unmarshal(bytes, &result)
359+
if err != nil {
360+
return nil, err
361+
}
362+
return &result, nil
363+
}
364+
365+
// 取消一组alias列表的标签
366+
func (m *MiPush) UnSubscribeTopicByAlias(aliases []string, topic, category string) (*Result, error) {
367+
params := m.assembleUnSubscribeTopicByAliasParams(aliases, topic, category)
368+
bytes, err := m.doPost(m.host+TopicUnSubscribeByAliasURL, params)
369+
if err != nil {
370+
return nil, err
371+
}
372+
var result Result
373+
err = json.Unmarshal(bytes, &result)
374+
if err != nil {
375+
return nil, err
376+
}
377+
return &result, nil
378+
}
379+
305380
func (m *MiPush) assembleSendParams(msg *Message, regID string) url.Values {
306381
form := m.defaultForm(msg)
307382
form.Add("registration_id", regID)
@@ -408,6 +483,50 @@ func (m *MiPush) assembleStatusPeriodParams(beginTime, endTime int64) string {
408483
return "?" + form.Encode()
409484
}
410485

486+
func (m *MiPush) assembleSubscribeTopicForRegIDParams(regID, topic, category string) url.Values {
487+
form := url.Values{}
488+
form.Add("registration_id", regID)
489+
form.Add("topic", topic)
490+
form.Add("restricted_package_name", strings.Join(m.packageName, ","))
491+
if category != "" {
492+
form.Add("category", category)
493+
}
494+
return form
495+
}
496+
497+
func (m *MiPush) assembleUnSubscribeTopicForRegIDParams(regID, topic, category string) url.Values {
498+
form := url.Values{}
499+
form.Add("registration_id", regID)
500+
form.Add("topic", topic)
501+
form.Add("restricted_package_name", strings.Join(m.packageName, ","))
502+
if category != "" {
503+
form.Add("category", category)
504+
}
505+
return form
506+
}
507+
508+
func (m *MiPush) assembleSubscribeTopicByAliasParams(aliases []string, topic, category string) url.Values {
509+
form := url.Values{}
510+
form.Add("aliases", strings.Join(aliases, ","))
511+
form.Add("topic", topic)
512+
form.Add("restricted_package_name", strings.Join(m.packageName, ","))
513+
if category != "" {
514+
form.Add("category", category)
515+
}
516+
return form
517+
}
518+
519+
func (m *MiPush) assembleUnSubscribeTopicByAliasParams(aliases []string, topic, category string) url.Values {
520+
form := url.Values{}
521+
form.Add("aliases", strings.Join(aliases, ","))
522+
form.Add("topic", topic)
523+
form.Add("restricted_package_name", strings.Join(m.packageName, ","))
524+
if category != "" {
525+
form.Add("category", category)
526+
}
527+
return form
528+
}
529+
411530
func (m *MiPush) handleResponse(response *http.Response) ([]byte, error) {
412531
defer func() {
413532
_ = response.Body.Close()

client_test.go

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77

88
var packageName string = "com.xiaomi.mipushdemo"
99

10-
var client = NewClient("yourappSecret", packageName)
10+
var client = NewClient("yourappSecret", []string{packageName})
1111

1212
var msg1 *Message = NewAndroidMessage("hi baby1", "hi1").SetRestrictedPackageNames([]string{packageName}).SetPayload("this is payload1").SetPassThrough(0)
1313
var msg2 *Message = NewAndroidMessage("hi baby2", "hi2 ").SetRestrictedPackageNames([]string{packageName}).SetPayload("this is payload2").SetPassThrough(0)
@@ -162,3 +162,53 @@ func TestMiPush_GetMessageStatusPeriod(t *testing.T) {
162162
}
163163
t.Log("result=", result)
164164
}
165+
166+
//----------------------------------------Subscription----------------------------------------//
167+
168+
func TestMiPush_SubscribeTopicForRegID(t *testing.T) {
169+
result, err := client.SubscribeTopicForRegID(regID1, "topic3", "")
170+
if err != nil {
171+
t.Errorf("TestMiPush_SubscribeTopicForRegID failed :%v\n", err)
172+
}
173+
t.Log("result=", result)
174+
}
175+
176+
func TestMiPush_SubscribeTopicForRegIDList(t *testing.T) {
177+
result, err := client.SubscribeTopicForRegIDList([]string{regID1, regID2}, "topic5", "")
178+
if err != nil {
179+
t.Errorf("TestMiPush_SubscribeTopicForRegIDList failed :%v\n", err)
180+
}
181+
t.Log("result=", result)
182+
}
183+
184+
func TestMiPush_UnSubscribeTopicForRegID(t *testing.T) {
185+
result, err := client.UnSubscribeTopicForRegID(regID1, "topic3", "")
186+
if err != nil {
187+
t.Errorf("TestMiPush_UnSubscribeTopicForRegID failed :%v\n", err)
188+
}
189+
t.Log("result=", result)
190+
}
191+
192+
func TestMiPush_UnSubscribeTopicForRegIDList(t *testing.T) {
193+
result, err := client.UnSubscribeTopicForRegIDList([]string{regID1, regID2}, "topic5", "")
194+
if err != nil {
195+
t.Errorf("TestMiPush_SubscribeTopicForRegIDList failed :%v\n", err)
196+
}
197+
t.Log("result=", result)
198+
}
199+
200+
func TestMiPush_SubscribeTopicByAlias(t *testing.T) {
201+
result, err := client.SubscribeTopicByAlias([]string{alias1, alias2}, "topic5", "")
202+
if err != nil {
203+
t.Errorf("TestMiPush_SubscribeTopicByAlias failed :%v\n", err)
204+
}
205+
t.Log("result=", result)
206+
}
207+
208+
func TestMiPush_UnSubscribeTopicByAlias(t *testing.T) {
209+
result, err := client.UnSubscribeTopicByAlias([]string{alias1, alias2}, "topic5", "")
210+
if err != nil {
211+
t.Errorf("TestMiPush_SubscribeTopicByAlias failed :%v\n", err)
212+
}
213+
t.Log("result=", result)
214+
}

constants.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,13 @@ const (
2626
MessagesStatusURL = "/v1/trace/messages/status" // 获取某个时间间隔内所有消息的状态
2727
)
2828

29+
const (
30+
TopicSubscribeURL = "/v2/topic/subscribe" // 给某个regid订阅标签。
31+
TopicUnSubscribeURL = "/v2/topic/unsubscribe" // 取消某个regid的标签。
32+
TopicSubscribeByAliasURL = "/v2/topic/subscribe/alias" // 给一组alias列表订阅标签
33+
TopicUnSubscribeByAliasURL = "/v2/topic/unsubscribe/alias" // 取消一组alias列表的标签
34+
)
35+
2936
// for future targeted push
3037
var (
3138
BrandsMap = map[string]string{

0 commit comments

Comments
 (0)