푸시토큰 등록 오류 (How to register push token)

[Problem/Question]
안녕하세요,
푸시토큰을 샌드버드 서버에 저장을 하고 싶은데
“BadRequestError” 에러가 뜨네요

제 코드는

import 'package:sendbird_chat_sdk/sendbird_chat_sdk.dart' as sendbird;
await sendbird.SendbirdChat.connect(myEmail!);
    final FirebaseMessaging fcm = FirebaseMessaging.instance;
    if (Platform.isAndroid) {
      String? token = await fcm.getToken();
      if (token != null) {
        sendbird.SendbirdChat.registerPushToken(type: sendbird.PushTokenType.fcm, token: token, unique: true);
      }
    } else if (Platform.isIOS) {
      String? token = await fcm.getAPNSToken();
      if (token != null) {
        sendbird.SendbirdChat.registerPushToken(type: sendbird.PushTokenType.apns, token: token, unique: true);
      }
    }

입니다.

에러 메시지

/flutter (10947): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: Instance of 'BadRequestError'
E/flutter (10947): #0      HttpClient._response (package:sendbird_sdk/services/network/http_client.dart:319:9)
E/flutter (10947): #1      HttpClient.post (package:sendbird_sdk/services/network/http_client.dart:139:12)
E/flutter (10947): <asynchronous suspension>
E/flutter (10947): #2      ApiClient.send (package:sendbird_sdk/services/network/api_client.dart:72:18)
E/flutter (10947): <asynchronous suspension>
E/flutter (10947): #3      SendbirdSdk.registerPushToken (package:sendbird_sdk/sdk/sendbird_sdk_api.dart:327:11)
E/flutter (10947): <asynchronous suspension>

지금은 자체서버에서 푸시를 보내고 있는데 궁극적으로는 샌드버드에서 제공하는 push notifications 기능을 사용하기 위해서 send test를 진행 중입니다.

바쁜 시간임에도 검토해주셔서 감사합니다.


// If problem, please fill out the below. If question, please delete.
[SDK Version]
sendbird_chat_sdk: ^4.0.12

안녕하세요.
문의 주신 내용 관련하여 두가지 체크 부탁드립니다.

  1. 센드버드 서버와의 연결은 정상적으로 되었는지?

  2. 센드버드 서버는 fcm to apns 는 지원하지 않고 있습니다. 아래 예제를 통해 push token 등록하는 부분 참고 부탁드립니다.

[예제]

[라이브러리 확인] Push

감사합니다.

안녕하세요 답변 감사합니다.

  1. 센드버드 서버와의 연결은 정상적으로 되었는지?
    => 서버와의 연결은 정상적으로 보입니다.

  2. 센드버드 서버는 fcm to apns 는 지원하지 않고 있습니다. 아래 예제를 통해 push token 등록하는 부분 참고 부탁드립니다.
    => 보내주신 예제대로 하니 잘 되네요 감사합니다.

또 다른 문제가 있는데 푸시토큰을 등록해서 테스트 메시지를 보냈는데
받는 부분에서 에러가 있는 것 같습니다.

D/AndroidRuntime(30008): Shutting down VM
E/AndroidRuntime(30008): FATAL EXCEPTION: main
E/AndroidRuntime(30008): Process: com.ynot.calring, PID: 30008
E/AndroidRuntime(30008): java.lang.RuntimeException: Unable to instantiate receiver uk.orth.push.example.FirebaseMessagingReceiver: java.lang.ClassNotFoundException: Didn't find class "uk.orth.push.example.FirebaseMessagingReceiver" on path: DexPathList[[zip file "/data/app/~~HgeWGC3Sn0DhhqiN7EaXdQ==/com.ynot.calring-UIfqNp_10fEclkW5WZpmBw==/base.apk"],nativeLibraryDirectories=[/data/app/~~HgeWGC3Sn0DhhqiN7EaXdQ==/com.ynot.calring-UIfqNp_10fEclkW5WZpmBw==/lib/arm64, /data/app/~~HgeWGC3Sn0DhhqiN7EaXdQ==/com.ynot.calring-UIfqNp_10fEclkW5WZpmBw==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]]

혹시 메시지를 받을 때는 기존 fcm 메시지를 받을때와 다르게 받아야 하는 걸까요?

Push 라이브러리 확인

 push: ^2.1.0

=> AGP 8.3.1 버전에서 에러가 나는 것 같습니다.
현재는 단순히 package속성을 삭제하니 빌드는 되는데 이렇게 하는게 맞는지 모르겠네요…

답변 기다리겠습니다.
감사합니다.

말씀해주신대로 해보니 토큰 등록은 잘 됩니다 감사합니다!

등록된 토큰을 사용해서 푸시 테스트를 하는데
기존 fcm에서 받던 코드로는 에러가 나네요
혹시 다른 방법으로 받아야 할까요?

D/AndroidRuntime(30008): Shutting down VM
E/AndroidRuntime(30008): FATAL EXCEPTION: main
E/AndroidRuntime(30008): Process: com.ynot.calring, PID: 30008
E/AndroidRuntime(30008): java.lang.RuntimeException: Unable to instantiate receiver uk.orth.push.example.FirebaseMessagingReceiver: java.lang.ClassNotFoundException: Didn't find class "uk.orth.push.example.FirebaseMessagingReceiver" on path: DexPathList[[zip file "/data/app/~~HgeWGC3Sn0DhhqiN7EaXdQ==/com.ynot.calring-UIfqNp_10fEclkW5WZpmBw==/base.apk"],nativeLibraryDirectories=[/data/app/~~HgeWGC3Sn0DhhqiN7EaXdQ==/com.ynot.calring-UIfqNp_10fEclkW5WZpmBw==/lib/arm64, /data/app/~~HgeWGC3Sn0DhhqiN7EaXdQ==/com.ynot.calring-UIfqNp_10fEclkW5WZpmBw==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]]

답변 기다리겠습니다.
감사합니다.

Reply가 계속 사라지네요…

알려주신 위의 방법을 토큰등록은 성공했습니다.
감사합니다!

등록된 토큰으로 푸시 테스트 메시지를 보냈는데
받을 때 에러가 나네요

D/AndroidRuntime(11905): Shutting down VM
E/AndroidRuntime(11905): FATAL EXCEPTION: main
E/AndroidRuntime(11905): Process: com.ynot.calring, PID: 11905
E/AndroidRuntime(11905): java.lang.RuntimeException: Unable to instantiate receiver uk.orth.push.example.FirebaseMessagingReceiver: java.lang.ClassNotFoundException: Didn't find class "uk.orth.push.example.FirebaseMessagingReceiver" on path: DexPathList[[zip file "/data/app/~~oSRVD6jydHSZTGYnfgs8PA==/com.ynot.calring-ax9VlNOpJANK2mKkf4lJhg==/base.apk"],nativeLibraryDirectories=[/data/app/~~oSRVD6jydHSZTGYnfgs8PA==/com.ynot.calring-ax9VlNOpJANK2mKkf4lJhg==/lib/arm64, /data/app/~~oSRVD6jydHSZTGYnfgs8PA==/com.ynot.calring-ax9VlNOpJANK2mKkf4lJhg==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]]

기존 fcm을 받던 코드가 있는데
그것과는 다른 방식으로 받아야 할까요?

답변 기다리겠습니다
감사합니다

푸시토큰 등록은 잘 됩니다!

등록된 토큰으로 테스트 메시지를 보냈는데
받을 때 에러가 나네요
현재 fcm 에서 오는 메시지를 받는 코드로 되어있는데
혹시 샌드버드쪽에서 따로 함수를 구현해야 하는걸까요?

D/AndroidRuntime(11905): Shutting down VM
E/AndroidRuntime(11905): FATAL EXCEPTION: main
E/AndroidRuntime(11905): Process: com.ynot.calring, PID: 11905
E/AndroidRuntime(11905): java.lang.RuntimeException: Unable to instantiate receiver uk.orth.push.example.FirebaseMessagingReceiver: java.lang.ClassNotFoundException: Didn't find class "uk.orth.push.example.FirebaseMessagingReceiver" on path: DexPathList[[zip file "/data/app/~~oSRVD6jydHSZTGYnfgs8PA==/com.ynot.calring-ax9VlNOpJANK2mKkf4lJhg==/base.apk"],nativeLibraryDirectories=[/data/app/~~oSRVD6jydHSZTGYnfgs8PA==/com.ynot.calring-ax9VlNOpJANK2mKkf4lJhg==/lib/arm64, /data/app/~~oSRVD6jydHSZTGYnfgs8PA==/com.ynot.calring-ax9VlNOpJANK2mKkf4lJhg==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]]

샌드버드 flutter sdk 문서에서는

Future<String?> _getToken() async {
  String? token;
  if (Platform.isAndroid) {
    token = await FirebaseMessaging.instance.getToken();
  } else if (Platform.isIOS) {
    token = await FirebaseMessaging.instance.getAPNSToken();
  }
  return token;
}

이렇게 설명하고 있는데 이게 안된다는 말씀이신건가요?