저도 최근에 기능성 메시지를 연동하면서 같은 이슈로 한참 헤매다가 이 글을 보고 원인을 찾을 수 있었어요. 먼저 공유해 주신 분께 감사드립니다.
공식 문서에는 사용자 인증 토큰이 필요하며, 사용자에게 메시지를 전송할 수 있는 scope 권한이 포함돼야 해요 정도로만 안내되어 있어서, TERMS_DISAGREED_MEMBER처럼 토스 앱 사용자 설정 레벨의 실패 사유는 예상하기 어려웠습니다. 검색해봐도 이 포럼 글 외에는 참고할 자료가 거의 없었어요.
관련해서, 추후에 네이티브 앱이 OS의 알림 권한 상태를 조회하는 것처럼 미니앱에서도 발송 전에 수신 가능 여부를 사전에 확인할 수 있으면 연동이 훨씬 수월할 것 같습니다.
현재 메시지 수신에 필요한 권한 레이어 (제가 이해한 바로는)
OS 알림 권한 — 디바이스 설정
사용자 최적화 제품 동의 — 토스 앱 전체 설정
미니앱 알림 권한 — 로그인 시 scope 동의
이 중 어느 단계에서 수신이 막혀 있는지 파트너 앱 입장에서는 미리 알 수 없다 보니, 실제로 발송해봐야 reachedFailReason으로만 확인이 가능합니다. 이 때문에 사용자에게 선제적으로 안내하거나 설정 페이지로 유도하는 게 어려운 상황입니다.
현재 저희 서비스에서 안내하고 있는 방식
알림이 수신되지 않는 경우 아래처럼 세 가지 경우를 모두 텍스트로 안내하고 있습니다. 어떤 레이어가 원인인지 알 수 없다 보니 사용자 입장에서도 정확히 어디를 켜야 하는지 찾기 어렵습니다.
알림이 수신되지 않는다면?
OS 알림 허용 — 기기 설정에서 토스 앱 알림 권한을 켜주세요.
미니앱 알림 허용 — 이 페이지 상단 ⋯ 버튼 > 설정 > 알림에서 켜주세요.
사용자 최적화 동의 — 토스 앱 [전체 → 검색 → 사용자 최적화 동의]에서 동의해주세요.
혹시 가능하시다면 고려해 주시면 좋을 것 같은 부분
위 3가지 권한 상태를 각각 조회할 수 있는 SDK 메서드가 있다면 좋을 것 같아요 (예: getMessagePermissionStatus())
꺼져 있는 레이어의 설정 화면으로 이동시킬 수 있는 딥링크나 SDK 메서드도 함께 있으면 사용자 안내가 훨씬 자연스러워질 것 같습니다.
reachedFailReason의 가능한 값과 의미가 문서화되면 비슷한 이슈를 겪는 다른 개발자분들께도 도움이 될 것 같습니다.
사용자가 “왜 알림이 안 오지?” 하고 혼란을 겪지 않도록, 파트너 앱에서 적극적으로 도와줄 수 있는 수단이 있으면 좋겠다는 바람에서 의견 남깁니다. 검토해 주시면 감사하겠습니다.