(React Native) 카카오톡 공유하기 2차인증 관련

kakao sdk version : 2.11.1

안녕하세요, React-Native 를 사용하여 앱을 개발하고 있으며, 이번 업데이트에 카카오톡 공유하기 기능을 도입하고자 합니다.

현재 React Native 에 공식적으로 카카오톡 API 가 지원되지 않기에 아래 라이브러리를 이용하여 구현하고 있습니다.
(https://github.com/millo-L/react-native-kakao-share-link#readme 13)

안드로이드는 잘 작동하나 ios에서 카카오 공유하기를 할 경우, 로그인 창이 뜨고 로그인하면 2차 인증을 해야지만 공유가 되는 현상이 있습니다. 혹시 딥링크가 잘 구성이 안되어있으면 이렇게 작동이 되는건가요?

제가 무슨 설정을 잘못해서 이런건지 모르겠습니다.

감사합니다.

안녕하세요.

xcode LSApplicationQueriesSchemes 설정에 kakaolink가 포함되어 있는지 확인 부탁드립니다.

<key>LSApplicationQueriesSchemes</key>
<array>
	<string>kakaokompassauth</string>
	<string>storykompassauth</string>
	<string>kakaolink</string>
</array>

이렇게 설정되어 있습니다.

 카카오톡 앱이 설치되어 있는데도 불구하고 IOS 에서 ShareApi.isKakaoTalkSharingAvailable()  이 함수가 false가 나와 웹뷰로 연결되는 듯 합니다.
그래서 2차인증을 하게 되는듯 합니다.

저 값이 false가 나오게 되는 이유가 뭘까요?

안녕하세요.

정확한 상황파악과 안내를 위해
재현 영상 첨부해주시겠어요?

photo_1698122560
photo_1698122562

해당 스샷은 react-native-share (https://github.com/react-native-share/react-native-share) 라이브러리를 써서 카카오톡 공유를 한 내용입니다. 이 라이브러리를 사용했을때는 별다른 로그인 없이 바로 메세지를 보낼 수 있었습니다.

해당 화면은 카카오SDK를 사용한 카카오톡 공유하기가 아니라
OS 공유화면으로 보이는데요?

그리고 2차인증에 관한 내용은 캡쳐화면으로 파악할 수 없는데… 부연 내용 첨부해주시겠어요?

근데 해당 라이브러리 (https://github.com/millo-L/react-native-kakao-share-link)를 사용할 때는
photo_1698122565
photo_1698122561
photo_1698122564

이런식으로 인증을 받고나서 공유가 됩니다.

물론 이 라이브러리와 다른 라이브러리의 내용은 다르더군요. 단순 text와 이미지 공유가 아닌 카카오 UI 공유(social의 좋아요수, 조회수, 댓글수 같은 것)를 표시할 수 있다는를 사용할 수 있다는 점이 다른데, 왜 이 라이브러리는 2차 인증을 해야만 할까요?

이 문제는 해당 라이브러리의 문제라서 해당 라이브러리를 수정해봐야 할까요?

안드로이드에서는 문제가 없습니다.

해당 외부 라이브러리에서 앱방식이 아닌 웹방식 공유를 제공하는군요.

해당 추가인증은 SDK에서 진행하는게 아니라 카카오 계정 페이지에서 로그인 시, 처리되는 부분으로
의심환경로그인, 비정상 로그인, 평범하지 않은 로그인 환경에서 추가 인증을 요구할 수도 있습니다.
(이부분 설정을 제공하지 않으며, 설명대로 1회 진행하시면 될 것같습니다. )

해당 라이브러리 ios 일부 코드입니다.

    private func shareDefaultTemplate(templateObject: [String: Any], callback: @escaping (Bool, Error?) -> Void) {
        if ShareApi.isKakaoTalkSharingAvailable() == true {
            ShareApi.shared.shareDefault(templateObject: templateObject) {(linkResult, error) in
                if let error = error {
                    callback(false, error)
                }
                else {
                    //do something
                    guard let linkResult = linkResult else { return }
                    UIApplication.shared.open(linkResult.url, options: [:], completionHandler: nil)
                    callback(true, nil)
                }
            }
        } else {
            if let url = ShareApi.shared.makeDefaultUrl(templateObject: templateObject) {
                openLinkWebview(url: url, callback: callback)
            }
        }
    }

제 앱이 kakaoSDK에서 isKakaoTalkSharingAvailable() 결과 값이 false 인 것 같은데.

이유는 알 수 없을까요?.. 카카오 로그인이 잘 작동하는거 보면 무언가 설정이 잘못되었거나 키가 잘못되었거나 그런 부분은 없는 것 같습니다.

kakaoSDK에서 isKakaoTalkSharingAvailable는

단순히 UIApplication.shared.canOpenURL로 LSApplicationQueriesSchemes 의 kakaolink 호출되는지 체크만 합니다.

즉, 해당 스킴 호출 할 수 없는 상황으로

설정이잘못되었거나 LSApplicationQueriesSchemes에 등록된 갯수가 50개 이상인 경우 정도로 추정됩니다.

카카오 계정로그인이 아닌 카카오톡으로 로그인은 잘되나요? (카카오톡 공유에서 카카오톡으로 로그인이 아닌 SDK 카카오 로그인기능 확인 가능한가요?)
카카오톡은 최신버전인가요?
LSApplicationQueriesSchemes에 등록된 스킴 갯수는 몇개인가요?

헉 그걸 몰랐네요…

<array>
		<string>instagram</string>
		<string>instagramstories</string>
		<string>instagram-stories</string>
		<string>itmss</string>
		<string>itms-appss</string>
		<string>itms</string>
		<string>itms-apps</string>
		<string>shinhan-sr-ansimclick</string>
		<string>shinhan-sr-ansimclick-payco</string>
		<string>shinhan-sr-ansimclick-naverpay</string>
		<string>smshinhanansimclick</string>
		<string>hdcardappcardansimclick</string>
		<string>smhyundaiansimclick</string>
		<string>mpocket.online.ansimclick</string>
		<string>scardcertiapp</string>
		<string>cloudpay</string>
		<string>hanaskcardmobileportal</string>
		<string>nhappcardansimclick</string>
		<string>nonghyupcardansimclick</string>
		<string>kb-acp</string>
		<string>lotteappcard</string>
		<string>lottesmartpay</string>
		<string>citispay</string>
		<string>kpay</string>
		<string>ispmobile</string>
		<string>paypin</string>
		<string>payco</string>
		<string>tswansimclick</string>
		<string>nhallonepayansimclick</string>
		<string>citimobileapp</string>
		<string>citicardappkr</string>
		<string>lpayapp</string>
		<string>kakaotalk</string>
		<string>shinsegaeeasypayment</string>
		<string>kftc-bankpay</string>
		<string>bankwallet</string>
		<string>uppay</string>
		<string>banka</string>
		<string>hanamopmoasign</string>
		<string>iphoneSbank</string>
		<string>wooripay</string>
		<string>tauthlink</string>
		<string>lguthepay</string>
		<string>lguthepay-xpay</string>
		<string>smartxpay-transfer</string>
		<string>nhappcash-acp</string>
		<string>SmartBank2WIB</string>
		<string>SmartBank2WB</string>
		<string>PortalCenterWB</string>
		<string>woorimembers</string>
		<string>wibeetalk</string>
		<string>ansimclickscard</string>
		<string>ansimclickipcollect</string>
		<string>vguardstart</string>
		<string>samsungpay</string>
		<string>hanawalletmembers</string>
		<string>ktauthexternalcall</string>
		<string>payprotocolwalletkr</string>
		<string>newliiv</string>
		<string>kbbank</string>
	<string>kakaokompassauth</string>
	<string>storykompassauth</string>
	<string>kakaolink</string>
		<string>fbapi</string>
		<string>fb-messenger-share-api</string>
	</array>

이렇게나 많은 상황이네요… 50개까지만 활성화 된다고 하면,

<string>kakaotalk</string>

이거는 활성화 되나 밑에

<string>kakaokompassauth</string>
<string>storykompassauth</string>
<string>kakaolink</string>

이것들은 활성화가 안돼서 그런건가요?

네 카카오 로그인은

이 화면에서 계속하기만 누르면 2차 인증 없이 그냥 로그인이 됩니다(access 토큰 얻기)

혹시 위 화면도 카카오 sdk를 사용하는것이 아닌 웹을 사용한 것인가요? 단순 토큰만 얻는 경우라 2차 인증을 안한 건지 궁금하네요

https://developer.apple.com/documentation/uikit/uiapplication/1622952-canopenurl?language=objc

iOS 15 이후에 연결된 앱은 키 항목이 최대 50개로 제한되었습니다. 이는 iOS 정책입니다.

이 화면에서 계속하기만 누르면 2차 인증 없이 그냥 로그인이 됩니다(access 토큰 얻기)
혹시 위 화면도 카카오 sdk를 사용하는것이 아닌 웹을 사용한 것인가요? 단순 토큰만 얻는 경우라 2차 인증을 안한 건지 궁금하네요

넵. 카카오 로그인도 카카오계정 웹로그인으로 처리되는군요. 톡이 호출되는 경우 톡으로 로그인은 웹뷰가 아닌 카카오톡 앱이 표시됩니다.

카카오 계정 웹페이지 로그인 시, 계정로직에 따라 추가 인증 처리 하게됩니다.
(이용자들의 안전한 사용을 위해 제공하는 기능이니 참고 부탁드립니다.)

감사합니다 50개로 줄여서 배포 다시 해보겠습니다!

1개의 좋아요