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"` | 	ContentAvailable bool     `json:"content_available,omitempty"` | ||||||
| 	Sound            string   `json:"sound,omitempty"` | 	Sound            string   `json:"sound,omitempty"` | ||||||
| 	Data             D        `json:"data,omitempty"` | 	Data             D        `json:"data,omitempty"` | ||||||
|  | 	Retry            int      `json:"retry,omitempty"` | ||||||
| 
 | 
 | ||||||
| 	// Android
 | 	// Android
 | ||||||
| 	APIKey                string           `json:"api_key,omitempty"` | 	APIKey                string           `json:"api_key,omitempty"` | ||||||
|  | @ -328,7 +329,9 @@ func GetIOSNotification(req PushNotification) *apns.Notification { | ||||||
| func PushToIOS(req PushNotification) bool { | func PushToIOS(req PushNotification) bool { | ||||||
| 	LogAccess.Debug("Start push notification for iOS") | 	LogAccess.Debug("Start push notification for iOS") | ||||||
| 
 | 
 | ||||||
| 	var isError bool | Retry: | ||||||
|  | 	var isError = false | ||||||
|  | 	var newTokens []string | ||||||
| 
 | 
 | ||||||
| 	notification := GetIOSNotification(req) | 	notification := GetIOSNotification(req) | ||||||
| 
 | 
 | ||||||
|  | @ -341,8 +344,9 @@ func PushToIOS(req PushNotification) bool { | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			// apns server error
 | 			// apns server error
 | ||||||
| 			LogPush(FailedPush, token, req, err) | 			LogPush(FailedPush, token, req, err) | ||||||
| 			isError = true |  | ||||||
| 			StatStorage.AddIosError(1) | 			StatStorage.AddIosError(1) | ||||||
|  | 			newTokens = append(newTokens, token) | ||||||
|  | 			isError = true | ||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | @ -351,6 +355,8 @@ func PushToIOS(req PushNotification) bool { | ||||||
| 			// ref: https://github.com/sideshow/apns2/blob/master/response.go#L14-L65
 | 			// ref: https://github.com/sideshow/apns2/blob/master/response.go#L14-L65
 | ||||||
| 			LogPush(FailedPush, token, req, errors.New(res.Reason)) | 			LogPush(FailedPush, token, req, errors.New(res.Reason)) | ||||||
| 			StatStorage.AddIosError(1) | 			StatStorage.AddIosError(1) | ||||||
|  | 			newTokens = append(newTokens, token) | ||||||
|  | 			isError = true | ||||||
| 			continue | 			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 | 	return isError | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -414,6 +429,7 @@ func PushToAndroid(req PushNotification) bool { | ||||||
| 	LogAccess.Debug("Start push notification for Android") | 	LogAccess.Debug("Start push notification for Android") | ||||||
| 
 | 
 | ||||||
| 	var APIKey string | 	var APIKey string | ||||||
|  | 	var isError = false | ||||||
| 
 | 
 | ||||||
| 	// check message
 | 	// check message
 | ||||||
| 	err := CheckMessage(req) | 	err := CheckMessage(req) | ||||||
|  | @ -423,6 +439,7 @@ func PushToAndroid(req PushNotification) bool { | ||||||
| 		return false | 		return false | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | Retry: | ||||||
| 	notification := GetAndroidNotification(req) | 	notification := GetAndroidNotification(req) | ||||||
| 
 | 
 | ||||||
| 	if APIKey = PushConf.Android.APIKey; req.APIKey != "" { | 	if APIKey = PushConf.Android.APIKey; req.APIKey != "" { | ||||||
|  | @ -442,8 +459,11 @@ func PushToAndroid(req PushNotification) bool { | ||||||
| 	StatStorage.AddAndroidSuccess(int64(res.Success)) | 	StatStorage.AddAndroidSuccess(int64(res.Success)) | ||||||
| 	StatStorage.AddAndroidError(int64(res.Failure)) | 	StatStorage.AddAndroidError(int64(res.Failure)) | ||||||
| 
 | 
 | ||||||
|  | 	var newTokens []string | ||||||
| 	for k, result := range res.Results { | 	for k, result := range res.Results { | ||||||
| 		if result.Error != "" { | 		if result.Error != "" { | ||||||
|  | 			isError = true | ||||||
|  | 			newTokens = append(newTokens, req.Tokens[k]) | ||||||
| 			LogPush(FailedPush, req.Tokens[k], req, errors.New(result.Error)) | 			LogPush(FailedPush, req.Tokens[k], req, errors.New(result.Error)) | ||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
|  | @ -451,5 +471,14 @@ func PushToAndroid(req PushNotification) bool { | ||||||
| 		LogPush(SucceededPush, req.Tokens[k], req, nil) | 		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 | 	return true | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue