@@ -12,19 +12,20 @@ import (
1212)
1313
1414type 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,发送消息到指定设备上
2930func (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的消息状态
261264func (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+
305380func (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+
411530func (m * MiPush ) handleResponse (response * http.Response ) ([]byte , error ) {
412531 defer func () {
413532 _ = response .Body .Close ()
0 commit comments