이후 아래와 같이 onMessageReceived에 TalkPlus에서 제공하는 processFirebaseCloudMessagingData 함수를 호출하는 코드를 삽입하여 Push Notification을 처리할 수 있습니다.
Foreground인 경우 기존에 등록되어있는 ChannelListener를 통하여 자동으로 콜백을 올리게 됩니다.
Background인 경우 앱이 실행되어있지 않은 상태라 등록된 콜백이 없을 수 있으므로 아래와 같이 1회용 콜백을 함께 등록하여 이벤트를 받아 원하는 동작을 수행하실 수 있습니다.
processFirebaseCloudMessagingData 함수에서 마지막 인자값으로 forceCallback을 boolean 으로 받게 되어 있는데, forceCallback은 실시간 채널에서 콜백 수신과 상관없이 FCM 통해 무조건 콜백을 받아 처리하기 위해서는 true로 넘겨주셔야 합니다.
@OverridepublicvoidonMessageReceived(RemoteMessage remoteMessage) {if (remoteMessage.getData().containsKey("talkplus")) {try {// channelId, title, body 정보가 필요한 경우 아래와 같이 사용합니다.JSONObject talkplus =newJSONObject(remoteMessage.getData().get("talkplus") );String channelId =talkplus.getString("channelId");String messageId =talkplus.getString("messageId"); // available only for message eventString title =talkplus.getString("title");String body =talkplus.getString("body"); } catch (JSONException e) { }if (isBackground) {TalkPlus.processFirebaseCloudMessagingData(remoteMessage.getData(),new TalkPlus.ChannelListener() {// TODO: 각 서비스의 시나리오에 맞춰 Push Notification 표시 @OverridepublicvoidonMemberAdded(TPChannel channel,List<TPUser> users) { } @OverridepublicvoidonMemberLeft(TPChannel channel,List<TPUser> users) { } @OverridepublicvoidonMessageReceived(TPChannel channel,TPMessage message) { } @OverridepublicvoidonChannelChanged(TPChannel channel) { } },true ); } else {TalkPlus.processFirebaseCloudMessagingData(remoteMessage.getData(),true); } }}
포그라운드와 백그라운드 모두 동일하게 onMessageReceived를 통해 개발자가 원하는대로 컨트롤 하려면 Data타입의 푸쉬를 받아야 합니다. 대시보드에 다음과 같이 설정해야 data 타입 푸쉬를 받게 됩니다.