이번에 소개해드릴 내용은 얼마전 어느분께서 개발자 Q&A 게시판을 통해 질문하신 내용입니다.

질문 내용은 "VCL로 푸시메시지를 브로드캐스트는 되는데 특정 사용자에게 전송 가능하느냐? "라는 질문이었습니다.

(이 글은 VCL 프로젝트 뿐 아니라 FMX 프로젝트에서 사용할 수 있습니다.)


이 내용을 이해하시기 전에 먼저 BaaS와 RAD Studio 글을 선행해서 익히셔야 하고, 데스크탑에서 클라우드 메시지 전송 글을 먼저 보셔야 이글을 이해하시는데 도움이 많이 됩니다.

VCL 어플리케이션으로 특정 사용자에게 푸시메시지 전송

앞에서 안내해 드린 글을 데스크탑에서 클라우드 메시지 전송 보면 VCL 어플리케이션에서 Kinvey의 PushEndPoint를 이용해 브로드캐스트 메시지를 전송합니다.

특정사용자에게 전송할 때에도 PushEndPoint를 설정해 전송 할 수 있습니다. 

❑ 모바일 수신 설정(Custom Endpoint)

먼저 Kinvey에 접속해 Custom EndPoints(Addons > Business Logic > Custom Endpoints > New)를 추가합니다.

이름을 지정(저는 SpecificUsersMessage로 정했습니다.)하고, 다음의 코드를 입력하고 저장합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
function onRequest(request, response, modules){
    // 모듈
  var push = modules.push,
      collectionAccess = modules.collectionAccess,
      logger = modules.logger;
 
  // 데이터
  var iOSAps = request.body.iosaps;
  var iOSExtras = request.body.iosextras;
  var androidPayload = request.body.androidpayload;
  var username = androidPayload.username;
   
  logger.info("username: " + username);
   
  collectionAccess.collection('user').findOne({'username': username}, function (err, user) {
    if (err) {
      logger.error('Query failed: '+ err);
    } else {
      if(user){
        // 사용자가 있으면 대상에게
        logger.info('Pushing message to ' + user.username);
        push.sendPayload(user, iOSAps, iOSExtras, androidPayload);
      } else {
        // 없으면 전체에게
        logger.info('Pushing message to All');
                push.broadcastPayload(iOSAps, iOSExtras, androidPayload);
      }
    }
 
    // 콜백함수 안에 있어야 합니다. 밖에 있으면 콜백함수 수행전 먼저 응답합니다.
      response.complete(200);   
  });
}

그리고 어플리케이션 제작 전 API Console을 이용해 아래의 코드로 테스트(참고)합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
{
  "iosaps": {
    "alert": "안녕하세요."
  },
  "iosextras": {
    "username": "testuser"
  },
  "androidpayload": {
    "username": "testuser",
    "message": "안녕하세요.",
    "title": "메시지 제목"
  }
}

위 내용 중 username 항목을 변경해 사용하시기 바랍니다.(Kinvey API 콘솔 에디터가 이상하게 복사/붙여넣기가 안되네요. 저만 그런가요? 타이핑해서 넣어서 사용하기 바랍니다.)

❑ VCL 전송 어플리케이션

앞에서 만든 EndPoints를 이용해 푸시메시지 전송하는 VCL 전송어플리케이션을 작성합니다.

VCL 폼의 디자인을 다음과 같이 대상(edtUserName) 항목을 추가하도록 수정합니다.(꼭 같을 필요는 없습니다.)

저는 전체에게 보낼지 대상을 지정할지 선택하기 위해 체크박스를 넣었습니다.


KinveyProvider의 PushEndPoint 속성에 앞에서 작성한 Custom EndPoints(SpecificUsersMessage)를 입력합니다.


메시지 전송 버튼에는 아래의 코드를 이용합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var
  Data: TPushData;
begin
  Data := TPushData.Create;
  try
    Data.Message      := edtMessage.Text;
    Data.GCM.Title    := edtTitle.Text;
    Data.GCM.Message  := edtMessage.Text;
 
    if CheckBox1.Checked then
      Data.Extras.Add('username', edtUserName.Text);
 
    BackEndPush1.PushData(Data);
  finally
    Data.Free;
  end;

위 소스의 키포인트는 Data.Extras에 username을 추가하는 것입니다.

Extras 정보에 username을 추가하면 실제 전송되는 JSON 데이터에의 androidpayload와 iosextras에 username항목이 추가되고 Custom Endpoints에서 androidpayload의 username으로 특정 사용자에게 전송하도록 설정되었습니다.


BaaS를 이용하면 여러분들은 별도의 서버 준비 없이 서버기능인 백엔드 기능을 클라우드 기반의 서비스에서 이용할 수 있습니다.

한번 익혀두면 모바일 및 데스크탑에서 유용하게 사용할 수 있으니 도전해 보시기 바랍니다.



관련글

번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 17860
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 16216
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 18867
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 24440
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 25826
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 21181
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 41773
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 177078
863 [XE7] 안드로이드 블루투스 활성화 조회와 설정하기 [1] Humphery 2015.02.12 1776
862 20140424_Developer Direct LIVE! 2014 세미나 세션 자료입니다. 관리자 2014.04.25 1773
861 [VCL] 리본컨트롤 자습서 동영상 Humphery 2015.02.03 1770
860 FireDAC 성능 비교(BDE, dbGO(ADO), dbExpress, FireDAC) 험프리 2016.08.09 1770
859 [무료 온라인 강의] 마르코칸투의 "델파이 오브젝트 파스칼" 관리자 2014.11.28 1760
858 [프로그래밍 애피타이저] 6장 프로시저와 함수 file 김원경 2020.04.07 1740
857 [VCL] 에디트/버튼의 다양한 속성 소개 Humphery 2015.02.13 1739
856 [시애틀] BSON(Binary JSON)을 처리하고, JSON 데이터를 스트리밍 모델로 읽고, 쓸수 있습니다. file Humphery 2015.10.05 1737
» [BaaS] VCL에서 특정사용자에게 GCM/APN 전송하기(FMX도 사용가능) Humphery 2014.07.25 1737
854 [업데이트][10.2 도쿄][릴리즈 2] 10.2 도쿄 - 릴리즈 2 출시 & 설치방법 안내 file 험프리 2017.12.13 1729
853 n [도서/PDF/소스코드] 시작하는 사람들을 위한 델파이 프로그래밍-모듈 1. 델파이 소개, 단순 컴포넌트들 관리자 2019.02.13 1721
852 TListView 행별로 배경색 설정 및 글꼴변경하기 험프리 2017.09.08 1716
851 [FireDAC Skill Sprints] 6. 전처리: SQL문을 유연하게 작성할 수 있는 Param와 Macro 사용하기 Humphery 2015.03.13 1711
850 [프로그래밍 애피타이저] 8장 SQL 정의와문법 file 김원경 2020.04.09 1711
849 [10.4 시드니 신기능] 다시 태어난 '코드 인사이트' [2] file 험프리 2020.05.08 1709
848 [마이그레이션] 컴파일러 버젼 [1] 험프리 2014.08.18 1703
847 n [도서/PDF/소스코드] 시작하는 사람들을 위한 델파이 프로그래밍-모듈 9. 함수들 관리자 2019.03.29 1699
846 퀵레포트 보고서 엑셀로 내보내기(저장하기) [1] 험프리 2016.08.01 1691
845 멀티-티어 애플리케이션 개발과 배포: 파이어몽키 코스북 9장 file 관리자 2014.07.25 1691
844 [XE8] 대화형 지도 컴포넌트로 구글맵과 애플 맵킷 한번에 사용하기 Humphery 2015.04.17 1674