티스토리 뷰

개발

커스텀푸시 앱 개발

래셔널아울 2019. 10. 3. 15:43

 래셔널아울 커스텀푸시(Customizable Push)의 발신 및 예약은 래셔널아울 웹 관리자 화면에서 기본 제공하지만 푸시알림을 받는 단말앱은 개발해야 한다. 래셔널아울 샘플 가이드에서 제공하는 안드로이드 및 IOS 샘플앱을 기반으로 쉽게 자신만의 단말앱을 개발할 수 있다. 본 문서에서는 샘플앱을 기반으로 개발 과정을 설명한다. 커스텀푸시 앱 개발 전 과정을 본 글를 통해 제공하여 단말앱 별 혹은 서버환경 별 개발가이드 및 샘플앱 가이드를 헤매는 시간을 줄이고자 한다.

안드로이드 단말앱 개발

 래셔널아울 커스텀푸시를 안드로이드단말앱이 수신하기 위한 절차는 다음과 같다.

 

 안드로이드 단말앱 개발을 샘플앱을 다운받아 샘플 소스를 기반으로 원하는 앱으로 확장하여 쉽게 개발할 수 있다.

 

-> 안드로이드 샘플앱

 

알림전달 트래킹 지원 설정

 

 안드로이드 단말앱에서 알림전달 트래킹을 지원하기 위한 절차는 다음과 같다.

 

1. FirebaseMessagingService의 onMessageReceived 콜백 내에 enableNotificationTracking() API를 호출한다.

 - 참고로 샘플앱에서 래셔널아울 API 사용처를 모두 확인하려면 MinervaManager 키워드로 검색하면 된다.

 

 

나만의 알림 표현

 

 FirebaseMessagingService의 onMessageReceived 콜백 내에서 사용자 지정 푸시 화면을 지정한다. 샘플 소스의 draw your custom push notification 부분에 원하는 이미지 푸시 설정, 사운드 설정, 푸시화면 레이아웃 설정 등의 작업을 하면된다. 자세한 사항은 안드로이드 샘플앱 에서 확인할 수 있다.

    public void onMessageReceived(RemoteMessage remoteMessage) {
        Logger.debug(TAG, "onMessageReceived enter");
        Map<String, String> data = remoteMessage.getData();

        // set notification  delivery tracking
        MinervaManager minMgr = MinervaManager.getInstance();
        minMgr.enableNotificationTracking(data);

        /* draw your custom push notification */
        showCustomNotification(data);
    }

IOS 단말앱 개발

 래셔널아울 커스텀푸시(Customizable Push)는 IOS에서는 리치 노티피케이션(Rich Notification) 개념과 동일하고 그 개발 및 설정 방법도 동일하다. 다만, 그에 더해 푸시알림 전달 여부의 고속 트래킹 기능을 제공한다.

 

 래셔널아울 커스텀푸시를 IOS단말앱이 수신하기 위해서는 IOS 리치노티피케이션 설정이 필요하고 푸시알림의 단말전달 여부를 추적 및 모니터링하기 위해서는 아래 절차를 따르면 된다.

 

 IOS 단말앱 개발을 샘플앱을 다운받아 샘플 소스를 기반으로 원하는 앱으로 확장하여 쉽게 개발할 수 있다.

 

-> IOS 샘플앱

 

리치 노티피케이션

 

 이미지 푸시, 팝업 푸시, 사일런트 푸시 등 푸시알림의 표현을 앱 성격에 맞게 커스터마이징 할 수 있게 IOS에서 제공하는데 이를 리치 노티피케이션(Rich Notification)이란 용어로 통용된다. IOS 리치 노티피케이션을 적용하기 위해서는 Notification Service Extension 적용이 필요한데 이는 관련 IOS 문서를 참고하기 바라며 본 글에서는 생략한다.

 

알림전달 트래킹 지원 설정

 

 IOS 단말앱에서 알림전달 트래킹을 지원하기 위해서 IOS 앱과 Service Extension 간 동일한 앱그룹 지정이 필요하다. IOS 샘플앱을 기준으로 해당 과정에 대해서 설명한다.

 

1. XCode를 실행 후 앱을 선택 후 'Signing & Capabilities' > 'App Groups' 에 자신의 앱 그룹을 지정한다. 

2. XCode의 ServiceExtension을 선택 후 'Signing & Capabilities' > 'App Groups' 에 자신의 앱 그룹을 1. 에서 지정한 값과 동일한 값으로 지정한다.

 

3.  앱 소스의 AppDelagate의 didFinishLaunchingWithOptions 콜백내에 setAppGroup API를 위에서 지정한 앱그룹을 파라미터로 호출한다.

4. IOS 리치노티피케이션 설정시 추가되는 ServiceExtension의 didReceive 콜백 내에 enableNotificationTracking() API의 파라미터로 앞서 지정한 앱그룹을 세팅한다.

 

나만의 알림 표현

 

 IOS 리치노티피케이션 설정시 추가되는 ServiceExtension의 didReceive 콜백 내에서 커스텀푸시 화면을 지정한다. 샘플 소스의 draw your custom push notification 부분에 원하는 이미지 푸시 설정, 사운드 설정, 푸시화면 레이아웃 설정 등의 작업을 하면된다.

 

override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
        self.contentHandler = contentHandler
        bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
        
        if let bestAttemptContent = bestAttemptContent {
            
            // Called to let your app know which action was selected by the user for a given notification.
            let userInfo = bestAttemptContent.userInfo;
            print("\(String(describing: userInfo))");
            
            // enable notification delivery tracking
            let minMgr: MinervaManager = MinervaManager.getInstance();
            minMgr.enableNotificationTracking(userInfo, appGroup: "group.com.rationalowl.sample");
            
            // Modify the notification content here…
            if userInfo["notiTitle"] != nil {
                bestAttemptContent.title = userInfo["notiTitle"] as! String;
            }
            if userInfo["notiBody"] != nil {
                bestAttemptContent.body = userInfo["notiBody"] as! String;
            }
            
            /* draw your custom push notification */
            // draw image from image url
            //NSString* imageUrl = userInfo[@"imageUrl"];
            
            // set custom alarm sound from sound url
            //NSString* soundUrl = userInfo[@"soundUrl"];
            
            contentHandler(bestAttemptContent)
        }
    }

앱 서버 개발

 커스텀푸시 발신 및 예약 기능은 래셔널아울 웹관리자 화면에서 제공한다. 래셔널아울 웹 관리자를 통해 커스텀푸시 알림 발신 및 예약 설정만으로 운영하는 경우 본 장은 스킵해도 된다.

 

 별도의 서버를 운영하여 연동이 필요한 경우 래셔널아울 서버 API를 통해 연동하여 운영 할 수 있다. 채팅, 게임과 같은 실시간 데이터를 주고받는 경우는 무조건 개발 언어별 서버 SDK를 통해 개발하여야 하지만 커스텀 푸시의 경우 알림에 국한된 API이고 굳이 0.1초 미만의 실시간 데이터 전달이 필요하지 않아 REST API로 충분히 그 성능을 체감할 수 있고 실제 래셔널아울에서도 REST API와 JAVA 환경에 대해서만 커스텀푸시 API를 제공한다. 본 글에서는 REST API 기준으로 설명한다.

 

 커스텀 푸시 이외 REST API 설명은 REST API 개발가이드REST API 샘플앱 가이드를 참조하기 바란다.

 

1. 커스텀푸시 멀티캐스트

 

1) 커스텀푸시 멀티캐스트 발신

{
   //mandantory fields
  "serviceId":"service id here",
  "serverRegId":"server registration id here",
  "deviceRegIds":[“regId1“,”regId2”,….,”regIdN],
  "encrypt":1,
  "data":{
     // your custom field & data
     // add whatever fields you want.
    "numberData":11111,
    "stringData":"what you want",     
    "notiTitle":"notification title",
    "notiBody":"notification data",
    "notiSound":"custom_sound.wav",
    "imgUrl":"myurl/myimag.jpg",
    "soundUrl":"myurl/myimag.wav"
  }
}
  • 필드 설명
    • serviceId: 래셔널아울 콘솔에 등록한 서비스 구분자
    • serverRegId: 앱서버 등록 REST API로 등록후 발급받은 아이디
    • devicdeRegIds: 커스텀 푸시를 전달할 대상 단말 목록, 한번에 최대 2000대까지 지정 가능
    • encrypt: 커스텀 푸시 데이터 암호화 여부 설정: 1(암호화), 0(비암호화)
    • data: 사용자 지정 데이터 필드 및 값, 앱 성격에 맞게 임의의 필드 추가 가능

2) 커스텀푸시 멀티캐스트 발신 결과

{
    "mId":"message id here"
}
  • 필드 설명
    • mId: 발신한 커스텀 푸시의 메시지 아이디
      • 재발신 및 메시지 전달 트래킹 시 사용됨

2. 커스텀푸시 브로드캐스트

 

1) 커스텀푸시 브로드캐스트 발신

{
   //mandantory fields
  "serviceId":"service id here",
  "serverRegId":"server registration id here",
  "encrypt":1,
  "data":{
     // your custom field & data
     // add whatever fields you want.
    "numberData":11111,
    "stringData":"what you want",     
    "notiTitle":"notification title",
    "notiBody":"notification data",
    "notiSound":"custom_sound.wav",
    "imgUrl":"myurl/myimag.jpg",
    "soundUrl":"myurl/myimag.wav"
  }
}
  • 필드 설명
    • serviceId: 래셔널아울 콘솔에 등록한 서비스 구분자
    • serverRegId: 앱서버 등록 REST API로 등록후 발급받은 아이디
    • encrypt: 커스텀 푸시 데이터 암호화 여부 설정: 1(암호화), 0(비암호화)
    • data: 사용자 지정 데이터 필드 및 값, 앱 성격에 맞게 임의의 필드 추가 가능

2) 커스텀푸시 브로드캐스트 발신 결과

{
    "mId":"message id here"
}
  • 필드 설명
    • mId: 발신한 커스텀 푸시의 메시지 아이디 
      • 재발신 및 메시지 전달 트래킹 시 사용됨

3. 커스텀푸시 그룹메시지

 

1) 커스텀푸시 그룹메시지 발신

{
   //mandantory fields
  "serviceId":"service id here",
  "serverRegId":"server registration id here",
  "groupId":"group id here",
  "encrypt":1,
  "data":{
     // your custom field & data
     // add whatever fields you want.
    "numberData":11111,
    "stringData":"what you want",     
    "notiTitle":"notification title",
    "notiBody":"notification data",
    "notiSound":"custom_sound.wav",
    "imgUrl":"myurl/myimag.jpg",
    "soundUrl":"myurl/myimag.wav"
  }
}
  • 필드 설명
    • serviceId: 래셔널아울 콘솔에 등록한 서비스 구분자
    • serverRegId: 앱서버 등록 REST API로 등록후 발급받은 아이디
    • groupId: 커스텀 푸시를 전달할 대상 단말그룹의 아이디
    • encrypt: 커스텀 푸시 데이터 암호화 여부 설정: 1(암호화), 0(비암호화)
    • data: 사용자 지정 데이터 필드 및 값, 앱 성격에 맞게 임의의 필드 추가 가능

2) 커스텀푸시 그룹메시지 발신 결과

{
    "mId":"message id here"
}
  • 필드 설명
    • mId: 발신한 커스텀 푸시의 메시지 아이디
      • 재발신 및 메시지 전달 트래킹 시 사용됨

4. 커스텀 푸시 재발신

 

 앞서 위의 세 커스텀 푸시 발신 API로 발신 후 알림 미전달 혹은 알림수신 미확인 대상 사용자 폰에 재발신한다.

 

1) 커스텀푸시 재발신

  • 커스텀푸시 발신 후 알림 미전달 혹은 알림수신 미확인 대상 사용자 폰에 커스텀푸시를 재발신한다.
  • 통신 방식 : HTTP POST
  • url : http://221.221.22.11:8006/custompush/retry/
  • data format
{
   //mandantory fields
  "serviceId":"service id here",
  "serverRegId":"app server registration id",
  "msgId:"msgId",
  "retryCondition":1
}
  • 필드 설명
    • serviceId: 래셔널아울 콘솔에 등록한 서비스 구분자
    • serverRegId: 앱서버 등록 REST API로 등록후 발급받은 아이디
    • msgId: 재전달할 커스텀푸시의 메시지 아이디
    • retryCondition: 재발신 조건
      • 1: 알림미전달 폰에만 재발신
      • 2: 수신미확인 폰에만 재발신

2) 커스텀푸시 재발신 결과

{
    "mId":"message id here"
}
  • 필드 설명
    • mId: 재발신한 커스텀 푸시의 메시지 아이디

5. 메시지 전달 트래킹(메시지 통계 정보)

 

 메시지 전달통계를 실시간 확인한다. 커스텀푸시 및 실시간 메시지 모두 지원한다.

   - 메시지 큐잉기간(기본 3일)내 발신한 메시지에 대한 트래킹 지원.   

 

1) 전달통계 트래킹 요청

{
  //mandatory fields
  "serviceId":"service1",
  "serverRegId":"server1",
  "msgIds":["ddddd","ddssss"]
}
  • 필드 설명
    • serviceId: 래셔널아울 콘솔에 등록한 서비스 구분자
    • serverRegId: 앱서버 자신의 서버등록 아이디
    • msgIds: 전달통계를 알고자하는 커스텀 푸시의 메시지 아이디 목록
      • 한번에 최대 100개 메시지 아이디 지정

2) 전달통계 결과

{
    "serviceId":"0909",
    "serverRegId":"server1",
     "msgs":
      [
        {"msgId":"090909","total":232222,"que":9494,"notiDeliver":111,"deliver":555,"expire":110},
        {"msgId":"090911","total":232222,"que":9494,"notiDeliver":111,"deliver":555,"expire":110},….
      ]
      //실패시 error 필드 세팅..
}
  • 필드 설명
    • serviceId: 서비스 구분자
    • msgs: 각 메시지 별 전달 현황 정보들의 배열
      • msgId: 커스텀푸시의 메시지 아이디
      • total: 커스텀푸시를 발신한 대상 전체 사용자 단말 수
      • que: 커스텀푸시를 전달하지 못한 대상 사용자 단말 수
      • notiDeliver: 커스텀푸시은 전달하였으나 사용자가 알림확인은 하지 않은 사용자 단말 수
      • deliver: 커스텀푸시를 사용자가 확인한 사용자 단말 수
      • expire: 래셔널아울 메시지 큐잉 기간동안 커스텀푸시를 전달하지 못하여 기간만료가 된 사용자 단말 수

6. 메시지 전달 트래킹(메시지 상태별 단말앱 목록)

 

 커스텀푸시 메시지 상태별 단말앱 목록을 실시간 트래킹한다.

   - 알림 미전달 단말앱 목록만 트래킹하여 알림 미전달 단말앱 대상 유료 메시지 발신시 유용하다.   

   - 멀티캐스트, 그룹메시지, 브로드캐스트로 동시에 1000단말앱이상 발신한 메시지의 트래킹에 효과적이다.

   - 100만 단말앱에 동시에 커스텀 푸시 발신시에도 1분대에 전체 발신 및 전달 및 수신확인 여부 실시간 트래킹이 가능하다.

   - 메시지 큐잉기간(기본 3일)내 발신한 메시지에 대한 트래킹 지원.   

 

1) 커스텀푸시 대상단말 정보 요청

post data format:
{
  //mandatory fields
  "serviceId":"service1",
  "serverRegId":"server1",
  "msgId":"ddddd",
  "msgState":1,  
  "deviceType": 1,
  "startIndex":0,
  "fetchSize":500
}
  • 필드 설명
    • serviceId: 래셔널아울 콘솔에 등록한 서비스 구분자
    • serverRegId: 트래킹 요청하는 서버 자신의 서버등록 아이디
    • msgId: 커스텀 푸시의 메시지 아이디
    • msgState: 메시지 상태 플래그
      • 0: 모든 단말 목록
      • 1: 푸시알림 미전달 단말 목록
      • 2: 푸시알림 수신확인한 단말 목록
      • 4: 푸시알림 미전달 기간만료한 단말 목록
      • 8: 푸시알림은 전달했으나 수신확인하지 않은 단말 목록
      • bit or 연산으로 지정 가능 ex) 7 = 1 | 2 | 4 
    • deviceType: 단말 타입 플래그
      • 0: 모든 단말 목록
      • 1: 안드로이드 단말 목록
      • 2: IOS 단말 목록
      • bit or 연산으로 지정 가능
    • startIndex: 정보를 알고자 하는 단말 목록의 처음 인덱스
      • '4. 커스텀푸시 전달 통계 요청' REST API 결과로 확인한 대상 단말 수가 1000대 이상일 경우 본 REST API를 여러번 호출해야 한다. ex) 대상 단말이 1만대일 경우 fetchSize를 1000개씩 10번 호출해야 하고 startIndex는 0, 1000, 2000, ... 순으로 증가하면서 호출해야 한다.
    • fetchSize: 한번에 가지고 올 단말정보 목록 갯수
      • 한번에 최대 1000까지 지원

 

2) 커스텀푸시 대상단말 정보 결과

{
    "serviceId":"0909",
     "msgId":"dddd",
     "startIndex":0,
     "totalDeviceSize":10000,
     "fetchDeviceSize":1000,
     "deviceList":["deviceId1","deviceId2",....."deviceId1000"]
      

      //실패시 error 필드 세팅..
}
  • 필드 설명
  • serviceId: 서비스 구분자
  • startIndex:  총 단말 목록 중 fetch할 첫번째 인덱스
  • totalDeviceSize: 조건에 부합하는 전체 대상 단말 수
  • fetchDeviceSize: 결과로 전달받은 단말정보 목록 수
  • deviceList: 요청한 조건에 부합하는 단말 아이디 목록 

7. 메시지 전달 트래킹(메시지 상태별 단말앱 상세정보)

 

 커스텀푸시 메시지 상태별 단말앱 상세정보를 실시간 트래킹한다.

   - 멀티캐스트, 그룹메시지, 브로드캐스트로 동시에 1000단말앱이상 발신한 메시지의 트래킹에 효과적이다.

   - 메시지 큐잉기간(기본 3일)내 발신한 메시지에 대한 트래킹 지원.   

 

1) 커스텀푸시 대상단말 정보 요청

post data format:
{
  //mandatory fields
  "serviceId":"service1",
  "serverRegId":"server1",
  "msgId":"ddddd",
  "msgState":1,  
  "deviceType": 1,
  "startIndex":0,
  "fetchSize":500
}
  • 필드 설명
    • serviceId: 래셔널아울 콘솔에 등록한 서비스 구분자
    • serverRegId: 트래킹 요청하는 서버 자신의 서버등록 아이디
    • msgId: 커스텀 푸시의 메시지 아이디
    • msgState: 메시지 상태 플래그
      • 0: 모든 단말 목록
      • 1: 푸시알림 미전달 단말 목록
      • 2: 푸시알림 수신확인한 단말 목록
      • 4: 푸시알림 미전달 기간만료한 단말 목록
      • 8: 푸시알림은 전달했으나 수신확인하지 않은 단말 목록
      • bit or 연산으로 지정 가능 ex) 7 = 1 | 2 | 4 
    • deviceType: 단말 타입 플래그
      • 0: 모든 단말 목록
      • 1: 안드로이드 단말 목록
      • 2: IOS 단말 목록
      • bit or 연산으로 지정 가능
    • startIndex: 정보를 알고자 하는 단말 목록의 처음 인덱스
      • '4. 커스텀푸시 전달 통계 요청' REST API 결과로 확인한 대상 단말 수가 2000대 이상일 경우 본 REST API를 여러번 호출해야 한다. ex) 대상 단말이 1만대일 경우 fetchSize를 2000개씩 5번 호출해야 하고 startIndex는 0, 2000, 4000, ... 순으로 증가하면서 호출해야 한다.
    • fetchSize: 한번에 가지고 올 단말정보 목록 갯수
      • 한번에 최대 2000까지 지원

 

2) 커스텀푸시 대상단말 정보 결과

{
    "serviceId":"0909",
     "msgId":"dddd",
     "startIndex":0,
     "totalDeviceSize":10000,
     "fetchDeviceSize":1000,
     "deviceList":[
       {"deviceRegId":"dkdkd","deviceRegName":"david's phone","os":1,"deviceState":1,"msgState":1,"deliverTime":11111,"notiTime":222222},
        ......
      ]
      

      //실패시 error 필드 세팅..
}
  • 필드 설명
  • serviceId: 서비스 구분자
  • startIndex:  총 단말 목록 중 fetch할 첫번째 인덱스
  • totalDeviceSize: 조건에 부합하는 전체 대상 단말 수
  • fetchDeviceSize: 결과로 전달받은 단말정보 목록 수
  • deviceList: 전달받은 단말정보 목록
    • deviceRegId: 단말등록 아이디
    • deviceRegName: 사용자가 등록한 단말앱 구분자(웹 관리자 화면에 표시되는 사용자가 읽고 이해할수 있도록 설정해야 함
    • os: 1(안드로이드), 2(IOS)
    • msgState: 1(미전달), 2(사용자 수신 확인), 3(미전달 기간만료), 4(푸시알림 전달)
    • deliverTime: 메시지수신확인시간
      • msgState가 2일 경우만 세팅
      • 사용자가 메시지를 확인한 시간 (UTC 1970/1/1/0/0/0 으로부터 경과한 밀리세컨드)
    • notiTime: 푸시알림 전달시간
      • msgState가 4인 경우 세팅(푸시 알림만 전달)
      • msgState가 2인 경우는 세팅될 수도 안될 수도 있다.
        • 푸시알림을 수신한 후 사용자 수신확인시 알림전달 시간 세팅
        • 사용자가 단말앱을 실행하여 푸시알림을 전달하지 않고 실시간으로 메시지를 전달시 알림전달 시간 미세팅

8. 배치 메시지 전달 트래킹(메시지 상태별 단말앱 목록)

 한번에 다수의 메시지를 트래킹시 사용한다.

   - 커스텀푸시 메시지 상태별 단말앱 목록을 실시간 트래킹한다.

   - 개별로 전달하는 개인화 메시지나 대상 단말앱이 1000미만인 메시지인 경우 동시에 여러 메시지에 대한 트래킹시 이용한다.

   - 한번에 최대 100메시지 트래킹 지원

   - 전체 메시지의 대상 단말앱 수가 1000미만이어야 한다.

   - 알림 미전달 단말앱 목록만 트래킹하여 알림 미전달 단말앱 대상 유료 메시지 발신시 유용하다.

   - 메시지 큐잉기간(기본 3일)내 발신한 메시지에 대한 트래킹 지원.   

 

1) 커스텀푸시 대상단말 정보 요청

post data format:
{
  //mandatory fields
  "serviceId":"service1",
  "serverRegId":"server1",
  "msgIds":["aaaaaa", "bbbbb", "cccccc"],
  "msgState":1
}
  • 필드 설명
    • serviceId: 래셔널아울 콘솔에 등록한 서비스 구분자
    • serverRegId: 트래킹 요청하는 서버 자신의 서버등록 아이디
    • msgIds: 커스텀 푸시의 메시지 아이디 목록
    • msgState: 메시지 상태 플래그
      • 0: 모든 단말 목록
      • 1: 푸시알림 미전달 단말 목록
      • 2: 푸시알림 수신확인한 단말 목록
      • 4: 푸시알림 미전달 기간만료한 단말 목록
      • 8: 푸시알림은 전달했으나 수신확인하지 않은 단말 목록
      • bit or 연산으로 지정 가능 ex) 7 = 1 | 2 | 4 

 

2) 커스텀푸시 대상단말 정보 결과

{
    "serviceId":"0909",
    "msgs":
       [
       	 {"msgId":"aaaaaa","deviceList":["111111","222222","333333"]},
         {"msgId":"bbbbbb","deviceList":["111111","222222","333333"]},
         ....
         {"msgId":"dddddd","deviceList":["111111","222222","333333"]}         
       ]      

      //실패시 error 필드 세팅..
}
  • 필드 설명
  • serviceId: 서비스 구분자
  • msgs: 배치 메시지별 트래킹 결과
    • msgId: 메시지 아이디
    • deviceList: 요청 조건에 부합하는 단말아이디 목록

9. 배치 메시지 전달 트래킹(메시지 상태별 단말앱 상세정보)

 

 한번에 다수의 메시지를 트래킹시 사용한다.

   - 커스텀푸시 메시지 상태별 단말앱 상세정보를 실시간 트래킹한다.

   - 개별로 전달하는 개인화 메시지나 대상 단말앱이 1000미만인 메시지인 경우 동시에 여러 메시지에 대한 트래킹시 이용한다.

   - 한번에 최대 100메시지 트래킹 지원

   - 전체 메시지의 대상 단말앱 수가 1000미만이어야 한다.

   - 메시지 큐잉기간(기본 3일)내 발신한 메시지에 대한 트래킹 지원.   

 

 

 

1) 커스텀푸시 대상단말 정보 요청

post data format:
{
  //mandatory fields
  "serviceId":"service1",
  "serverRegId":"server1",
  "msgIds":["aaaaaa", "bbbbb", "cccccc"],
  "msgState":1
}
  • 필드 설명
    • serviceId: 래셔널아울 콘솔에 등록한 서비스 구분자
    • serverRegId: 트래킹 요청하는 서버 자신의 서버등록 아이디

 

  • msgIds: 커스텀 푸시의 메시지 아이디 목록
  • msgState: 메시지 상태 플래그
    • 0: 모든 단말 목록
    • 1: 푸시알림 미전달 단말 목록
    • 2: 푸시알림 수신확인한 단말 목록
    • 4: 푸시알림 미전달 기간만료한 단말 목록
    • 8: 푸시알림은 전달했으나 수신확인하지 않은 단말 목록
    • bit or 연산으로 지정 가능 ex) 7 = 1 | 2 | 4 

 

 

2) 커스텀푸시 대상단말 정보 결과

{
    "serviceId":"0909",
    "msgs":
    [
       {
         "msgId":"aaaaaa",
         "deviceList":
         [
           {"deviceRegId":"dkdkdk","deviceRegName":"david's phone","os":1,"msgState":1,"deliverTime":11111},
           {"deviceRegId":"dkdkdk","deviceRegName":"david's phone","os":1,"msgState":1,"deliverTime":11111},
           ...
           {"deviceRegId":"dkdkdk","deviceRegName":"david's phone","os":1,"msgState":1,"deliverTime":11111}
         ]  
       },
       {
          "msgId":"bbbbb"
          ....
       }
        ......
    ]     

    //실패시 error 필드 세팅..
}
  • 필드 설명
  • serviceId: 서비스 구분자
  • msgs: 배치 메시지별 트래킹 결과
    • msgId: 메시지 아이디
    • deviceList: 요청 조건에 부합하는 단말앱 상세정보 목록
      • deviceRegId: 단말등록 아이디
      • deviceRegName: 사용자가 등록한 단말앱 구분자(웹 관리자 화면에 표시되는 사용자가 읽고 이해할수 있도록 설정해야 함
      • os: 1(안드로이드), 2(IOS)
      • msgState: 1(미전달), 2(사용자 수신 확인), 3(미전달 기간만료), 4(푸시알림 전달)
      • deliverTime: 메시지수신확인시간
        • msgState가 2일 경우만 세팅
        • 사용자가 메시지를 확인한 시간 (UTC 1970/1/1/0/0/0 으로부터 경과한 밀리세컨드)
      • notiTime: 푸시알림 전달시간
        • msgState가 4인 경우 세팅(푸시 알림만 전달)
        • msgState가 2인 경우는 세팅될 수도 안될 수도 있다.
          • 푸시알림을 수신한 후 사용자 수신확인시 알림전달 시간 세팅
          • 사용자가 단말앱을 실행하여 푸시알림을 전달하지 않고 실시간으로 메시지를 전달시 알림전달 시간 미세팅

 

 

댓글