Support Retry condition.
Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
This commit is contained in:
		
							parent
							
								
									411f413484
								
							
						
					
					
						commit
						f1428c1446
					
				| 
						 | 
				
			
			@ -59,6 +59,7 @@ type PushNotification struct {
 | 
			
		|||
	ContentAvailable bool     `json:"content_available,omitempty"`
 | 
			
		||||
	Sound            string   `json:"sound,omitempty"`
 | 
			
		||||
	Data             D        `json:"data,omitempty"`
 | 
			
		||||
	Retry            int      `json:"retry,omitempty"`
 | 
			
		||||
 | 
			
		||||
	// Android
 | 
			
		||||
	APIKey                string           `json:"api_key,omitempty"`
 | 
			
		||||
| 
						 | 
				
			
			@ -328,7 +329,9 @@ func GetIOSNotification(req PushNotification) *apns.Notification {
 | 
			
		|||
func PushToIOS(req PushNotification) bool {
 | 
			
		||||
	LogAccess.Debug("Start push notification for iOS")
 | 
			
		||||
 | 
			
		||||
	var isError bool
 | 
			
		||||
Retry:
 | 
			
		||||
	var isError = false
 | 
			
		||||
	var newTokens []string
 | 
			
		||||
 | 
			
		||||
	notification := GetIOSNotification(req)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -341,8 +344,9 @@ func PushToIOS(req PushNotification) bool {
 | 
			
		|||
		if err != nil {
 | 
			
		||||
			// apns server error
 | 
			
		||||
			LogPush(FailedPush, token, req, err)
 | 
			
		||||
			isError = true
 | 
			
		||||
			StatStorage.AddIosError(1)
 | 
			
		||||
			newTokens = append(newTokens, token)
 | 
			
		||||
			isError = true
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -351,6 +355,8 @@ func PushToIOS(req PushNotification) bool {
 | 
			
		|||
			// ref: https://github.com/sideshow/apns2/blob/master/response.go#L14-L65
 | 
			
		||||
			LogPush(FailedPush, token, req, errors.New(res.Reason))
 | 
			
		||||
			StatStorage.AddIosError(1)
 | 
			
		||||
			newTokens = append(newTokens, token)
 | 
			
		||||
			isError = true
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -360,6 +366,15 @@ func PushToIOS(req PushNotification) bool {
 | 
			
		|||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if isError == true && req.Retry < PushConf.Ios.MaxRetry {
 | 
			
		||||
		req.Retry++
 | 
			
		||||
 | 
			
		||||
		// reset to default
 | 
			
		||||
		req.Tokens = newTokens
 | 
			
		||||
		isError = false
 | 
			
		||||
		goto Retry
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return isError
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -414,6 +429,7 @@ func PushToAndroid(req PushNotification) bool {
 | 
			
		|||
	LogAccess.Debug("Start push notification for Android")
 | 
			
		||||
 | 
			
		||||
	var APIKey string
 | 
			
		||||
	var isError = false
 | 
			
		||||
 | 
			
		||||
	// check message
 | 
			
		||||
	err := CheckMessage(req)
 | 
			
		||||
| 
						 | 
				
			
			@ -423,6 +439,7 @@ func PushToAndroid(req PushNotification) bool {
 | 
			
		|||
		return false
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
Retry:
 | 
			
		||||
	notification := GetAndroidNotification(req)
 | 
			
		||||
 | 
			
		||||
	if APIKey = PushConf.Android.APIKey; req.APIKey != "" {
 | 
			
		||||
| 
						 | 
				
			
			@ -442,8 +459,11 @@ func PushToAndroid(req PushNotification) bool {
 | 
			
		|||
	StatStorage.AddAndroidSuccess(int64(res.Success))
 | 
			
		||||
	StatStorage.AddAndroidError(int64(res.Failure))
 | 
			
		||||
 | 
			
		||||
	var newTokens []string
 | 
			
		||||
	for k, result := range res.Results {
 | 
			
		||||
		if result.Error != "" {
 | 
			
		||||
			isError = true
 | 
			
		||||
			newTokens = append(newTokens, req.Tokens[k])
 | 
			
		||||
			LogPush(FailedPush, req.Tokens[k], req, errors.New(result.Error))
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -451,5 +471,14 @@ func PushToAndroid(req PushNotification) bool {
 | 
			
		|||
		LogPush(SucceededPush, req.Tokens[k], req, nil)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if isError == true && req.Retry < PushConf.Android.MaxRetry {
 | 
			
		||||
		req.Retry++
 | 
			
		||||
 | 
			
		||||
		// reset to default
 | 
			
		||||
		req.Tokens = newTokens
 | 
			
		||||
		isError = false
 | 
			
		||||
		goto Retry
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return true
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue