Klat
  • Klat SDK
  • Android
    • Getting Started
    • Callback
    • User
      • 사용자 생성 / 로그인
      • 사용자 정보 업데이트
      • 사용자 차단 목록 관리
      • 사용자 로그아웃
      • 사용자 삭제
    • Channel
      • 채널 생성 / 삭제
      • 채널 조회
      • 채널 정보 업데이트
      • 채널 목록 조회
      • 채널 사용자 관리
      • 채널 참여 / 나가기
      • 채널 내 메시징
      • 채널 숨기기 / 보이기
      • 채널 Freeze / Unfreeze
      • 채널 주인 변경
      • 채널 푸시알림 설정
      • 채널별 개인 데이터 설정
    • Push Notification
    • Sample Application
    • What's New
  • iOS
    • Getting Started
    • Callback
    • User
      • 사용자 생성 / 로그인
      • 사용자 정보 업데이트
      • 사용자 차단 목록 관리
      • 사용자 로그아웃
      • 사용자 삭제
    • Channel
      • 채널 생성 / 삭제
      • 채널 조회
      • 채널 정보 업데이트
      • 채널 목록 조회
      • 채널 사용자 관리
      • 채널 참여 / 나가기
      • 채널 내 메시징
      • 채널 숨기기 / 보이기
      • 채널 Freeze / Unfreeze
      • 채널 주인 변경
      • 채널 푸시알림 설정
      • 채널별 개인 데이터 설정
    • Push Notification
    • Sample Application
    • What's New
  • Unity
    • Getting Started
    • Callback
    • User
      • 사용자 생성 / 로그인
      • 사용자 정보 업데이트
      • 사용자 차단 목록 관리
      • 사용자 로그아웃
      • 사용자 삭제
    • Channel
      • 채널 생성 / 삭제
      • 채널 조회
      • 채널 정보 업데이트
      • 채널 목록 조회
      • 채널 사용자 관리
      • 채널 참여 / 나가기
      • 채널 내 메시징
      • 채널 숨기기 / 보이기
      • 채널 Freeze / Unfreeze
      • 채널 주인 변경
      • 채널 푸시알림 설정
      • 채널별 개인 데이터 설정
    • Push Notification
    • Sample Application
  • JavaScript
    • Getting Started
    • Realtime Event
    • Pagination
    • User
      • 사용자 생성 / 로그인
      • 사용자 정보 업데이트
      • 사용자 차단 목록 관리
      • 사용자 로그아웃
      • 사용자 삭제
    • Channel
      • 채널 생성 / 삭제
      • 채널 조회
      • 채널 정보 업데이트
      • 채널 목록 조회
      • 채널 사용자 관리
      • 채널 참여 / 나가기
      • 채널 내 메시징
      • 채널 숨기기 / 보이기
      • 채널 Freeze / Unfreeze
      • 채널 주인 변경
      • 채널 푸시알림 설정
      • 채널별 개인 데이터 설정
    • Push Notification (FCM)
    • Sample Application
    • What's New
  • Flutter
    • Getting Started
    • Callback
    • User
      • 사용자 생성 / 로그인
      • 사용자 정보 업데이트
      • 사용자 차단 목록 관리
      • 사용자 로그아웃
      • 사용자 삭제
    • Channel
      • 채널 생성 / 삭제
      • 채널 조회
      • 채널 정보 업데이트
      • 채널 목록 조회
      • 채널 사용자 관리
      • 채널 참여 / 나가기
      • 채널 내 메시징
      • 채널 숨기기 / 보이기
      • 채널 Freeze / Unfreeze
      • 채널 주인 변경
      • 채널 푸시알림 설정
      • 채널별 개인 데이터 설정
    • Push Notification
  • REST API
    • Getting Started
    • API
      • User
        • 사용자 생성
        • 사용자 로그인 (로그인 토큰)
        • 사용자 조회
        • 사용자 정보 업데이트
        • 사용자 활성화 / 비활성화
        • 사용자 푸시 알림 설정
        • 사용자 삭제
        • 사용자 목록 조회
        • 사용자 채널 조회
        • 사용자 차단 목록 관리
      • Channel
        • 채널 생성
        • 채널 조회
        • 채널 정보 업데이트
        • 채널 삭제
        • 채널 목록 조회
        • 채널 사용자 관리
        • 채널 내 메시징
        • 채널 숨기기 / 보이기
        • 채널 Freeze / Unfreeze
        • 채널 주인 변경
        • 채널 알림 설정
      • App
        • 앱 조회
        • 앱 생성
        • 앱 삭제
      • Bot
        • 봇 생성
        • 봇 목록 조회
        • 봇 조회
        • 봇 정보 업데이트
        • 봇 삭제
        • 봇 채널 목록 조회
        • 봇 채널 내 메시징
        • 봇 채널 참여 / 나가기
    • Push Notification
    • Rate Limit
  • MISC
    • Webhooks
    • SDK Rate Limit
    • Error Code
    • FAQ
      • Function
      • Spec
Powered by GitBook
On this page
  • Enable / Disable Push Notification
  • Push Notification
  1. Android

Push Notification

Enable / Disable Push Notification

사용자가 Push Notification을 받을 지 여부를 설정할 수 있습니다.

// 사용자 Push Notification 활성화
TalkPlus.enablePushNotification(new TalkPlus.CallbackListener<TPUser>() {
    @Override
    public void onSuccess(TPUser tpUser) {
    }
    @Override
    public void onFailure(int i, Exception e) {
    }
});

// 사용자 Push Notification 비활성화
TalkPlus.disablePushNotification(new TalkPlus.CallbackListener<TPUser>() {
    @Override
    public void onSuccess(TPUser tpUser) {
    }
    @Override
    public void onFailure(int i, Exception e) {
    }
});
// 사용자 Push Notification 활성화
TalkPlus.enablePushNotification(object : TalkPlus.CallbackListener<TPUser>() {
    override fun onSuccess(tpUser: TPUser) { }
    override fun onFailure(i: Int, e: Exception) { }
}

// 사용자 Push Notification 비활성화
TalkPlus.disablePushNotification(object : TalkPlus.CallbackListener<TPUser>() {
    override fun onSuccess(tpUser: TPUser) { }
    override fun onFailure(i: Int, e: Exception) { }
})

특정 채널의 Push Notification을 받을 지 여부를 설정할 수 있습니다.

// 채널 Push Notification 활성화
TalkPlus.enableChannelPushNotification(String channel, new TalkPlus.CallbackListener<TPUser>() {
    @Override
    public void onSuccess(TPUser tpUser) {
    }
    @Override
    public void onFailure(int i, Exception e) {
    }
});

// 채널 Push Notification 비활성화
TalkPlus.disableChannelPushNotification(String channel, new TalkPlus.CallbackListener<TPUser>() {
    @Override
    public void onSuccess(TPUser tpUser) {
    }
    @Override
    public void onFailure(int i, Exception e) {
    }
});
// 채널 Push Notification 활성화
TalkPlus.enableChannelPushNotification(channel: String, object : TalkPlus.CallbackListener<TPUser>() {
    override fun onSuccess(tpUser: TPUser) { }
    override fun onFailure(i: Int, e: Exception) { }
}

// 채널 Push Notification 비활성화
TalkPlus.disableChannelPushNotification(channel: String, object : TalkPlus.CallbackListener<TPUser>() {
    override fun onSuccess(tpUser: TPUser) { }
    override fun onFailure(i: Int, e: Exception) { }
})

Push Notification

TalkPlus의 Push Notification은 FCM을 통하여 이루어지게 됩니다. 기본적인 FCM을 연동하신 후, User를 로그인한 후 registerFCMToken 함수를 호출하여 FCM 토큰을 User 세션에 연동하여야 합니다.

로그인이 완료된 후 아래와 같이 FirebaseMessaging을 통하여 token을 얻어 register 하시는 것을 권장 드립니다.

// 푸시 권한 요청 (안드로이드 13이상 API 33)
private ActivityResultLauncher<String> requestPermissionLauncher =
    registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> {
        if (isGranted) {
            // 권한이 허용됨
        } else {
            // 권한이 거부됨
        }
    });

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
    if (ContextCompat.checkSelfPermission(
            this, Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED) {
        // 권한이 이미 허용됨
    } else if (shouldShowRequestPermissionRationale(Manifest.permission.POST_NOTIFICATIONS)) {
        // 사용자에게 권한 필요성 설명
        // 권한을 요청
        requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS);
    } else {
        // 권한 요청
        requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS);
    }
}

// Firebase Messaging을 통하여 현재 token을 획득
public void getFCMToken() {
    FirebaseMessaging.getInstance().getToken().addOnCompleteListener(new OnCompleteListener<String>() {
    @Override
    public void onComplete(@NonNull com.google.android.gms.tasks.Task<String> task) {
        if (!task.isSuccessful()) {
            return;
        }
        String fcmToken = task.getResult();
        // 토큰 등록
        TalkPlus.registerFCMToken(fcmToken, new CallbackListener<Void>() {
            @Override
            public void onSuccess(Void result) { }

            @Override
            public void onFailure(int errorCode, Exception exception) { }
        });
      }
  });
}
// 푸시 권한 요청 (안드로이드 13이상 API 33)
private val requestPermissionLauncher = registerForActivityResult(
        ActivityResultContracts.RequestPermission()
    ) { isGranted: Boolean ->
        if (isGranted) {
            // 권한이 허용됨
        } else {
            // 권한이 거부됨
        }
    }

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
    when {
        ContextCompat.checkSelfPermission(
            this,
            Manifest.permission.POST_NOTIFICATIONS
        ) == PackageManager.PERMISSION_GRANTED -> {
            // 권한이 이미 허용됨
        }
        
        shouldShowRequestPermissionRationale(Manifest.permission.POST_NOTIFICATIONS) -> {
            // 사용자에게 권한 필요성 설명
            // 권한을 요청
            requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
        }
        
        else -> {
            // 권한 요청
            requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
        }
    }
}

// Firebase Messaging을 통하여 현재 token을 획득
fun getFCMToken() {
    FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task ->
        if (!task.isSuccessful) {
            return@OnCompleteListener
        }
        val fcmToken: String = task.result
        // 토큰 등록
        TalkPlus.registerFCMToken(fcmToken, object : CallbackListener<Void?> {
            override fun onSuccess(t: Void?) { }
            override fun onFailure(errorCode: Int, exception: Exception) { }
        })
        return@OnCompleteListener
    })
}

이후 아래와 같이 onMessageReceived에 TalkPlus에서 제공하는 processFirebaseCloudMessagingData 함수를 호출하는 코드를 삽입하여 Push Notification을 처리할 수 있습니다.

Foreground인 경우 기존에 등록되어있는 ChannelListener를 통하여 자동으로 콜백을 올리게 됩니다.

Background인 경우 앱이 실행되어있지 않은 상태라 등록된 콜백이 없을 수 있으므로 아래와 같이 1회용 콜백을 함께 등록하여 이벤트를 받아 원하는 동작을 수행하실 수 있습니다.

processFirebaseCloudMessagingData 함수에서 마지막 인자값으로 forceCallback을 boolean 으로 받게 되어 있는데, forceCallback은 실시간 채널에서 콜백 수신과 상관없이 FCM 통해 무조건 콜백을 받아 처리하기 위해서는 true로 넘겨주셔야 합니다.

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    if (remoteMessage.getData().containsKey("talkplus")) {
        try {
            // channelId, title, body 정보가 필요한 경우 아래와 같이 사용합니다.
            JSONObject talkplus = new JSONObject(
                remoteMessage.getData().get("talkplus")
            );
            String channelId = talkplus.getString("channelId");
            String messageId = talkplus.getString("messageId"); // available only for message event
            String title = talkplus.getString("title");
            String body = talkplus.getString("body");
        } catch (JSONException e) {
        }
    
        if (isBackground) {
            TalkPlus.processFirebaseCloudMessagingData(
                remoteMessage.getData(), 
                new TalkPlus.ChannelListener() {
                    // TODO: 각 서비스의 시나리오에 맞춰 Push Notification 표시
                    @Override
                    public void onMemberAdded(TPChannel channel, List<TPUser> users) {
                    }
                    @Override
                    public void onMemberLeft(TPChannel channel, List<TPUser> users) {
                    }
                    @Override
                    public void onMessageReceived(TPChannel channel, TPMessage message) {
                    }
                    @Override
                    public void onChannelChanged(TPChannel channel) {
                    }
                }, 
                true
            );
        } else {
            TalkPlus.processFirebaseCloudMessagingData(remoteMessage.getData(), true);
        }
    }
}
override fun onMessageReceived(remoteMessage: RemoteMessage) {
    remoteMessage.data["talkplus"]?.let {
        try {
            // channelId, title, body 정보가 필요한 경우 아래와 같이 사용합니다.
            val talkplus = JSONObject(it)
            val channelId = talkplus.getString("channelId")
            val messageId = talkplus.getString("messageId") // available only for message event
            val title = talkplus.getString("title")
            val body = talkplus.getString("body")
        } catch (e: JSONException) {
            
        }

        if (isBackground()) {
            TalkPlus.processFirebaseCloudMessagingData(
                remoteMessage.data,
                object : TalkPlus.ChannelListener {
                    // TODO: 각 서비스의 시나리오에 맞춰 Push Notification 표시
                    override fun onMemberAdded(channel: TPChannel, users: List<TPUser>) { }

                    override fun onMemberLeft(channel: TPChannel, users: List<TPUser>) { }

                    override fun onMessageReceived(channel: TPChannel, message: TPMessage) { }

                    override fun onChannelChanged(channel: TPChannel) { }
                },
                true
            )
        } else {
            TalkPlus.processFirebaseCloudMessagingData(remoteMessage.data, true)
        }
    }
}

포그라운드와 백그라운드 모두 동일하게 onMessageReceived를 통해 개발자가 원하는대로 컨트롤 하려면 Data타입의 푸쉬를 받아야 합니다. 대시보드에 다음과 같이 설정해야 data 타입 푸쉬를 받게 됩니다.

  • 전체 Push Notification 설정 활성화

  • AOS "메시지 수신 알림" 비활성화

Previous채널별 개인 데이터 설정NextSample Application

Last updated 11 months ago