func pushNotificationIos(req gaurun.RequestGaurunNotification) bool { var ep string if gaurun.ConfGaurun.Ios.Sandbox { ep = gaurun.EpApnsSandbox } else { ep = gaurun.EpApnsProd } client, err := apns.NewClient( ep, gaurun.ConfGaurun.Ios.PemCertPath, gaurun.ConfGaurun.Ios.PemKeyPath, 0, ) if err != nil { return false } client.TimeoutWaitError = time.Duration(gaurun.ConfGaurun.Ios.TimeoutError) * time.Millisecond for _, token := range req.Tokens { payload := apns.NewPayload() payload.Alert = req.Message payload.Badge = req.Badge payload.Sound = req.Sound pn := apns.NewPushNotification() pn.DeviceToken = token pn.Expiry = uint32(req.Expiry) pn.AddPayload(payload) resp := client.Send(pn) if resp.Error != nil { // reconnect client.Conn.Close() client.ConnTls.Close() client, err = apns.NewClient( ep, gaurun.ConfGaurun.Ios.PemCertPath, gaurun.ConfGaurun.Ios.PemKeyPath, 0, ) if err != nil { return false } client.TimeoutWaitError = time.Duration(gaurun.ConfGaurun.Ios.TimeoutError) * time.Millisecond } } client.Conn.Close() client.ConnTls.Close() return true }
func pushNotificationIos(req RequestGaurunNotification, client *apns.Client) bool { LogError.Debug("START push notification for iOS") for i, token := range req.Tokens { id := req.IDs[i] payload := apns.NewPayload() payload.Alert = req.Message payload.Badge = req.Badge payload.Sound = req.Sound payload.ContentAvailable = req.ContentAvailable pn := apns.NewPushNotification() pn.DeviceToken = token pn.Expiry = uint32(req.Expiry) pn.AddPayload(payload) if len(req.Extend) > 0 { for _, extend := range req.Extend { pn.Set(extend.Key, extend.Value) } } stime := time.Now() resp := client.Send(pn) etime := time.Now() ptime := etime.Sub(stime).Seconds() if resp.Error != nil { atomic.AddInt64(&StatGaurun.Ios.PushError, 1) LogPush(req.IDs[i], StatusFailedPush, token, ptime, req, resp.Error) client.Conn.Close() client.ConnTls.Close() return false } else { LogPush(id, StatusSucceededPush, token, ptime, req, nil) atomic.AddInt64(&StatGaurun.Ios.PushSuccess, 1) } } client = nil LogError.Debug("END push notification for iOS") return true }