- GCM 전송 및 결과 처리
#region ANDROID 전송
// 안드로이드 전송 후 결과를 저장합니다.
MobilePushResponseModel responseModel = new MobilePushResponseModel();
MobilePushResponseModel resultModel = new MobilePushResponseModel() { results = new List<MobilePushResponseModel .Result>()};
foreach (var data in makeMessageForAndroid(message, AndroidPushList, locationUrl))
{
responseModel = new MobilePushResponseModel ();
responseModel = new JavaScriptSerializer ().Deserialize<MobilePushResponseModel>(pushMessageForAndroid(data));
//resultModel.multicast_id += responseModel.multicast_id;
resultModel.canonical_ids += responseModel.canonical_ids;
resultModel.sucess += responseModel.sucess;
resultModel.failure += responseModel.failure;
resultModel.results.AddRange(responseModel.results);
}
#region GCM 결과 처리 정책 주석
// D_ID 삭제 리스트를 구합니다.
// 1. 성공처리
// - 유효한 registration_ids 인경우
// { "message_id": "1:1516" }
// 2. 삭제처리 - 해당 index의 request의 registration_id를 삭제/미사용 처리.
// - 유효하지 않은 registration_ids 이면서 해당 단말기에 어플을 삭제 후 설치하지 않은 경우
// { "error": "NotRegistered"}
// - 유효하지 않은 registration_ids 이나 해당 단말기가 최종적으로 다시 어플을 설치하여 정상 push를 받을 수 있는 경우
// 여기서 "32" 값은 다시 어플을 설치하여 정상 push를 받을수 있는 registration_ids 이다.
// { "message_id": "1:2342", "registration_id": "32" }
// - 복구할수 없는 오류가 있는 경우
// { "error": "InvalidRegistration" }
// 3. 미발송처리
// DB수정없음 - 발송성공처리후 리스트에서 미발송상태로 재처리
// - GCM에 정상 발송하지 못해 재전송이 필요한경우 - 재전송 로직 없이 성공처리 한다(계속된 실패가 될수도 있으므로)
// { "error": "Unavailable" }
// - NotRegistered, InvalidRegistrationd 을 제외한 에러메세지 있는 경우는 모두 미발송 처리한다.
#endregion
Boolean deleteFlag = false ; // 삭제하는경우 true , 삭제하지않는경우 false
String androidDeviceId = String .Empty;
MobilePushResponseModel.Result result = new MobilePushResponseModel .Result();
String errerMsg = String .Empty;
for (int i = 0; i < resultModel.results.Count(); i++)
{
deleteFlag = false;
result = resultModel.results[i]; // PUSH 발송 결과 리스트
androidDeviceId = AndroidPushList[i] as String ; // registration_ids
#region 데이터베이스에서 삭제해야할 Device Id를 구합니다.
errerMsg = result.error;
if (!String .IsNullOrEmpty(errerMsg)){
if( "NotRegistered" .Equals(errerMsg) || "InvalidRegistration".Equals(errerMsg) )
{
deleteFlag = true;
}
else
{
sentFailList.Add(androidDeviceId); // 전송일자를 기록하지 않는다. 재전송을 위해
}
} else if (!String.IsNullOrEmpty(result.registration_id)){
deleteFlag = true;
}
#endregion
if (deleteFlag)
{
pushDeleteList.Add( new MobilePushUserListModel (){ id = androidDeviceId }); // 데이터베이스에서 삭제/미사용 처리
}
}
#endregion |
- 전송후 DB 처리 내용
1. pushDeleteList 내 단말정보를 삭제/미사용처리
2. 미사용 단말을 제외한 나머지 푸시 정보에 전송일자 기록
3. sentFailList 내 단말정보는 전송일자 초기화
|