마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

RCS 형식의 메시지 수신시 내용 조회가 되지 않습니다.

0 추천

SMS, MMS 수신시에 후처리를 하는 앱을 개발진행중인데, 문제가 발생하여 조언을 구하고자 글 작성합니다.

SMS, MMS 수신 확인을 위해 BroadcastReceiver 사용하여 개발 진행한 상태입니다.

아래는 기존 BroadcastReceiver의 AndroidManifest.xml 설정값입니다.

<receiver
    android:name=".control.receiver.SmsReceiver"
    android:enabled="true">
    <intent-filter android:priority="9999">
        <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
    </intent-filter>
    <intent-filter>
        <action android:name="android.provider.Telephony.WAP_PUSH_RECEIVED"/>

        <data android:mimeType="application/vnd.wap.mms-message"/>
    </intent-filter>
</receiver>

 

개발 후에 테스트 진행중에 특정 상황에서 메시지 수신이 안되는걸 확인하고 이유를 찾아보니 

채팅플러스 기능을 켜고 전송시에 앱에서 인식이 안되는걸 확인했습니다.

채팅플러스라는 기능이 RCS 기반으로 데이터를 전달해

위의 receiver를 통하지 않는걸로 확인되어 관련 정보 검색하다 아래 링크의 글을 찾았습니다.

https://stackoverflow.com/questions/36953785/how-do-i-intercept-a-rich-communication-message-on-android

위 글 참조해서 receiver를 작성하고 테스트 진행했습니다.

아래는 receiver의 onReceive 구현 코드와 출력된 log 데이터입니다.

public void onReceive(Context context, Intent intent) {
    mContext = context;
    DebugLog.e(TAG, "RCS Receiver");
    String action = intent.getAction();
    Bundle bundle = intent.getExtras();
    DebugLog.e(TAG, "Received action : " + action);
    Set<String> keys = bundle.keySet();
    for (String key : keys) {
        DebugLog.e(TAG, "key : " + key + ", value : " + bundle.get(key));
    }
}
E/RcsReceiver: Function : onReceive, Line : 26, Log : RCS Receiver
E/RcsReceiver: Function : onReceive, Line : 29, Log : Received action : com.samsung.rcs.framework.instantmessaging.action.RECEIVE_NEW_MESSAGE
E/RcsReceiver: Function : onReceive, Line : 32, Log : key : message_id, value : 42
E/RcsReceiver: Function : onReceive, Line : 32, Log : key : message_type, value : 1
E/RcsReceiver: Function : onReceive, Line : 32, Log : key : message_direction, value : 0
E/RcsReceiver: Function : onReceive, Line : 32, Log : key : is_group_chat, value : false
E/RcsReceiver: Function : onReceive, Line : 32, Log : key : from, value : <개인정보>
E/RcsReceiver: Function : onReceive, Line : 32, Log : key : chat_id, value : <개인정보>

 

테스트 진행결과 SMS 수신시 수신 이벤트는 정상적으로 받아지는걸 확인했지만,

이미지 파일 전송시에는 위 로직 자체를 타지않아 별도의 로그가 찍히지 않고,

extra 내의 value값엔 메시지 내용같은 필요한 값이 획득이 안되는 문제도 있었습니다.

value값을 보면 chat_id, message_id 등의 값을 통해 메시지 정보를 획득하는 방법이 있을것도 같은데, 

권한값을 보면 삼성에서 자체적으로 개발한 방법으로 진행된듯해 마땅한 해결책이 안나오더군요.

 

해결해야하는 문제점은 크게 두가지가 있습니다.

1. 채팅플러스를 통한(RCS 형식의) 메시지 수신시에 메시지 내용 확인이 불가능함

2. 동일한 방법으로 이미지 전송시에 전송여부 및 파일 확인이 불가능함 

 

위 문제 관련해서 조언 부탁드리겠습니다.

디바프 (120 포인트) 님이 2021년 2월 10일 질문

1개의 답변

0 추천

sms와 mms는 수신 방법이 다릅니다. 

android mms receiver 나 http://susemi99.kr/664  처럼 sms와는 다른 방식으로 해야 합니다.

근데 문제는 sms, mms 읽는 권한이 들어가면 플레이스토어에 등록할 때 고생 좀 하실 겁니다 ;;; 

 

그래서 저는 위의 방식을 안 쓰고 NotificationListenerService 를 이용해서 알림에 뜬 내용만 가져오게 수정했습니다. http://susemi99.kr/5739 

sms/mms 인지 알려면 Telephony.Sms.getDefaultSmsPackage(context) 를 이용해서 기본 문자앱 패키지 경로를 알아와야하는 게 필요할 겁니다. 

쎄미 (162,410 포인트) 님이 2021년 2월 15일 답변
답변 감사드립니다.

기본 SMS, MMS 수신 및 처리 부분은 정상적으로 구현이 되었고 확인도 다 완료 했지만,

삼성 단말 메시지 앱에 있는 채팅+ 기능이 켜져있는 상태에서 채팅+ 기능을 사용하는 상대가 메시지 보낼 경우에 일반적인 SMS, MMS 형식 전송이 아니라 RCS 형식으로 메시지를 전송해서 기존 SMS, MMS 수신 로직으로는 수신이 안되는 문제였습니다.

결국 RCS 메시지 획득 구현이 불가능해서 초기 권한 설정시에 채팅+ 기능 꺼달라는 메시지 추가하는 방식으로 처리한 상태입니다.
...