카카오 채널 호출에 대한 차이점

채널을 통한 문의 답변을 위하여 카카오채널 호출을 SDK 2.4.1 적용하여 기술 문서에 작성된 대로 작업하였습니다.
그런데 'and’에서 sdk를 사용하여 호출 시 카카오톡이 없는 경우 스토어로 이동시키는데
’ios’에서는 카카오톡이 없으면
’주소가 유효하지 않기 때문에 Safari가 해당 페이지를 열 수 없습니다’
라는 팝업이 노출되고 이후로 아무 동작도 하지 않게 됩니다.
확인하여 보니 ‘The건강보험’ 앱에서는 동일 문구 팝업 노출 후 스토어로 이동하는 팝업이 띄워집니다
’The건강보험’앱은 카카오채널의 호출에 javascript를 사용한 것으로 보여지는데
이런 차이가 발생하는 이유와 해결 방법(카카오톡 미 설치 시 스토어로 이동 할 수 있게끔)을 알고 싶습니다.

안녕하세요~

말씀하신 ‘The건강보험’ 앱과 같이 iOS SDK 도 해당 메시지가 뜨고 설치할 수 있는 팝업이 뜨는데요.
아래 코드로 테스트 해보니 그렇게 되고 있습니다. 사용하신 코드블럭 공유해주시겠어요?

    @IBAction func chat(){
        self.safariViewController = SFSafariViewController(url: TalkApi.shared.makeUrlForChannelChat(channelPublicId:"_GVVxnK")!)

        guard (self.safariViewController != nil) else { return }

        self.safariViewController?.modalTransitionStyle = .crossDissolve
        self.safariViewController?.modalPresentationStyle = .overCurrentContext
        self.present(self.safariViewController!, animated: true) {
            print("Kakao Talk Channel chat 연결 페이지 실행 성공")
        }
    }

image

호출시 사용한 코드입니다.

// 카카오채널 연결
@objc func executeActionChannelQna() {
    ConsoleLog(":::::: executeKakaoChannelQna")
    safariViewController = SFSafariViewController(url: TalkApi.shared.makeUrlForChannelChat(channelPublicId: "_FzpxgK")!)
    guard self.safariViewController != nil else { return }
    self.showLoadingView()
    self.safariViewController?.modalTransitionStyle = .crossDissolve
    self.safariViewController?.modalPresentationStyle = .overCurrentContext
    self.present(self.safariViewController!, animated: true) {
        ConsoleLog(":::::: 카카오 페이지 연결 실행")
        self.hideLoadingView()
    }
}

코드는 동일한거 같은데요
‘The건강보험’은 해당 팝업 OK 뒤에 'App Store’에서 이 페이지를 열겠습니까? 라는 팝업이 노출되고 ‘확인’ 선택 시 스토어로 이동합니다
제가 적용한 것에서는 OK 뒤의 추가 팝업이 실행되지 않고 있고요

’주소가 유효하지 않기 때문에 Safari가 해당 페이지를 열 수 없습니다’ 메시지 백그라운드에 위 캡쳐 화면이 뜨고,
“카카오톡 최신 버전 설치하기” 버튼 을 선택해서 스토어로 이동하는게 아니라.

'App Store’에서 이 페이지를 열겠습니까? 라는 메시지가 바로 표시되는 거죠?

SDK 에서 제공된 메시지가 아니라 추가로 구현된 것이 아닐까 싶은데요.

아래 게시물 참고 해보시겠어요?

https://kakao-tam.tistory.com/85

참고 게시물의 경우는 앱으로 특정 이벤트를 전달하여 주셨을 경우 처리라고 생각됩니다
이미지와 같은 형태로 나타나게 하기 위해서는 게시물의 방식과는 다른 방법이라고 생각되어 문의드리게 되었습니다

32 PM

음… 혹시 몰라서 JS SDK 레퍼런스iOS SDK 의 레퍼런스를 찾아 봤는데요. 추가 처리 기능은 없네요.

말씀드린 것 처럼 ‘The건강보험’ 에서 추가 구현 한듯해요.
이런 식으로 블로그 내용을 카카오 SDK 가이드와 믹스 하면
iOS SDK에서 브릿지 페이지 띄우자 마자 마켓으로 이동합니다.

    @IBAction func chat(){
        self.safariViewController = SFSafariViewController(url: TalkApi.shared.makeUrlForChannelChat(channelPublicId:"_GVVxnK")!)

        guard (self.safariViewController != nil) else { return }

        self.safariViewController?.modalTransitionStyle = .crossDissolve
        self.safariViewController?.modalPresentationStyle = .overCurrentContext
        self.present(self.safariViewController!, animated: true) {
            print("Kakao Talk Channel chat 연결 페이지 실행 성공")
            
            if (! UserApi.isKakaoTalkLoginAvailable()) {
                let appId = "362057947"
                if let url = URL(string: "itms-apps://itunes.apple.com/app/id\(appId)"), UIApplication.shared.canOpenURL(url) {
                    if #available(iOS 10.0, *) {
                        UIApplication.shared.open(url, options: [:], completionHandler: nil)
                    } else {
                        UIApplication.shared.openURL(url)
                    }
                }
            }
        }
    }

알려주신 방식으로 적용하면 팝업에 대한 ‘확인’ 버튼 선택과는 상관없이 바로 스토어로 이동하게 됩니다.
이때 이동도 앱이 설치되어 있어도 이동하게 되어 'The건강보험’과 같은 형태가 사용자에게 노티 후 이동이라는 점에서 더 좋은 동작 처리인것 같습니다.

'The건강보험’의 경우 접근 Url이 bizmessage.kakao.com 으로 되어 있습니다. 저희 앱에서 만든 Url은 pf.kakao.com 으로 혹시 비즈앱 신청 적용의 차이에 의한 것은 아닌지 마지막으로 확인 부탁드립니다.

안녕하세요~
네, 비즈 메시지 호출에 의한 스토어 이동 맞네요. 제가 비즈메시지는 호출 해볼수 없어서 확인이 불가능한데요.
비즈 메시지 호출할 예정이 아니시라면 조건은 같을 것같아요.

if (! UserApi.isKakaoTalkLoginAvailable()) {

이 구문으로 인해 카카오 톡으로 로그인할 수 없는 상황에만 앱 설치로 이동하는데요. 다시 확인 부탁드려요.
그리고 위 if 문 앞에 사용자 노티 하시면 됩니다.