fix #1 support android notification.

Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
This commit is contained in:
Bo-Yi Wu 2016-03-25 16:41:47 +08:00
parent 0253415455
commit d5123cfaec
1 changed files with 73 additions and 4 deletions

View File

@ -1,7 +1,7 @@
package main package main
import ( import (
_ "github.com/google/go-gcm" "github.com/google/go-gcm"
apns "github.com/sideshow/apns2" apns "github.com/sideshow/apns2"
"github.com/sideshow/apns2/certificate" "github.com/sideshow/apns2/certificate"
"github.com/sideshow/apns2/payload" "github.com/sideshow/apns2/payload"
@ -36,7 +36,11 @@ type RequestPushNotification struct {
// Android // Android
CollapseKey string `json:"collapse_key,omitempty"` CollapseKey string `json:"collapse_key,omitempty"`
DelayWhileIdle bool `json:"delay_while_idle,omitempty"` DelayWhileIdle bool `json:"delay_while_idle,omitempty"`
TimeToLive int `json:"time_to_live,omitempty"` TimeToLive uint `json:"time_to_live,omitempty"`
RestrictedPackageName string `json:"restricted_package_name,omitempty"`
DryRun bool `json:"dry_run,omitempty"`
Data gcm.Data `json:"data,omitempty"`
Notification gcm.Notification `json:"notification,omitempty"`
// iOS // iOS
ApnsID string `json:"apns_id,omitempty"` ApnsID string `json:"apns_id,omitempty"`
@ -182,5 +186,70 @@ func pushNotificationIos(req RequestPushNotification, client *apns.Client) bool
func pushNotificationAndroid(req RequestPushNotification) bool { func pushNotificationAndroid(req RequestPushNotification) bool {
// HTTP Connection Server Reference for Android
// https://developers.google.com/cloud-messaging/http-server-ref
notification := gcm.HttpMessage{}
notification.RegistrationIds = req.Tokens
if len(req.Topic) > 0 {
notification.To = req.Topic
}
if len(req.Priority) > 0 && req.Priority == "high" {
notification.Priority = "high"
}
if len(req.CollapseKey) > 0 {
notification.CollapseKey = req.CollapseKey
}
if req.ContentAvailable {
notification.ContentAvailable = true
}
if req.DelayWhileIdle {
notification.DelayWhileIdle = true
}
if req.TimeToLive > 0 {
notification.TimeToLive = req.TimeToLive
}
if len(req.RestrictedPackageName) > 0 {
notification.RestrictedPackageName = req.RestrictedPackageName
}
if req.DryRun {
notification.DryRun = true
}
if len(req.Data) > 0 {
notification.Data = req.Data
}
notification.Notification = &req.Notification
// overwrite notification body
notification.Notification.Body = req.Message
res, err := gcm.SendHttp("api key", notification)
if err != nil {
log.Println(err)
return false
}
if res.Error != "" {
log.Println("GCM Error Message: " + res.Error)
}
if res.Success > 0 {
log.Printf("Success count: %d, Failure count: %d", res.Success, res.Failure)
return true
}
return true return true
} }