카카오톡으로 로그인 인스타그램 앱 문제

문의 시, 사용하시는 개발환경과 디벨로퍼스 앱ID를 알려주세요.


개발환경 : react next js
key : rest api key 사용
디벨로퍼스 앱 ID : 381416

안녕하세요

인스타그램 프로필의 링크에 자사몰 상품 상세페이지 주소를 넣어 자사몰로의 유입을 유도하고 있습니다.
아시다시피 인스타그램에서 링크 클릭할 경우, 인스타그램 인앱 브라우저를 통해 접속하게 됩니다.

  1. 인앱 브라우저로 진입하게 되면,
  2. 접속한 상품 상세페이지에서 자사몰 로그인 페이지로 이동 후,
  3. 로그인 페이지에서 카카오 싱크로 구현된 ‘카카오로 시작하기’ 를 통해 카카오 로그인 페이지로 이동합니다.

현재 아이폰으로 해당 위의 프로세스를 진행할 경우,
3)에서 이동한 카카오 로그인 페이지에서 ‘카카오톡으로 로그인하기’ 버튼이 표시되는 경우와 표시되지 않는 경우가 있습니다.
표시되지 않는 경우 : 1) > 2) > 3)의 절차 그대로 진행하는 경우
표시되는 경우 : 1) > 2) > 3) 의 절차를 그대로 진행한 뒤, 인앱브라우저를 닫고 다시 인스타그램 프로필의 링크를 열면 3)의 페이지가 열립니다. 그 다음 인앱브라우저에서 뒤로가기를 하면 2)의 페이지로 이동되며, 2)에서 다시 ‘카카오로 시작하기’ 를 눌러서 3)으로 이동하면 ‘카카오톡으로 로그인하기’ 버튼이 있는 페이지로 가게 됩니다.

어떠한 경우든 3)에서 카카오로 시작하기를 클릭할 경우, ‘카카오톡으로 로그인하기’ 버튼이 있는 페이지로 이동되길 희망합니다.
위의 케이스가 재현되는 환경 예시는
아이폰 11Pro (ios 17.1.2 & 인스타그램 버전 311.0.2.23.115)와
아이폰 12mini (ios 17.1.2 & 인스타그램 버전 311.0.2.23.115) 입니다.
비공개 릴레이 기능 꺼져있고, 모든 쿠키 차단 설정도 꺼져있는 상태입니다.

운영서버에서 JS 키로는 카카오톡 로그인 버튼이 나오질 않아서 이전에 rest api 키로 변경하고 운영중인 상태입니다.
안드로이드로 시도했을때는 카카오톡 로그인이 노출 되는것을 확인했습니다.

카카오톡 로그인 링크는
https://kauth.kakao.com/oauth/authorize?client_id=${KAKAO_CLIENT_ID}&redirect_uri=${REDIRECT_URL}&response_type=code
해당 링크로 오픈합니다

답변 주시면 감사하겠습니다.

안녕하세요.

(1) JS SDK authorize 로그인 시, 카카오톡 앱으로 간편하게 로그인은 인스타그램, 페이스북 인앱브라우저에서 동작하지 않습니다. 그래서 카카오 계정 로그인 페이지로 이동하게됩니다. (js sdk 로그인은 기본 톡으로 로그인 시도 하므로 계정 로그인 페이지에 카카오톡으로 로그인 버튼을 표시하지 않습니다.)

(2) REST-API 방식 로그인 시, 카카오 계정 로그인 페이지에 있는 “카카오톡으로 로그인” 버튼은 인스타그램 인앱브라우저에서는 정상작동하고 페이스북 인앱브라우저에서는 작동하지 않습니다.

위상황에 따라 인스타그램, 페이스북 인앱브라우저에서 동작이 다르게 처리됩니다.
이는 인스타그램, 페이스북의 지원 상황에 따라 달라질 수 있습니다.

아래 내용도 참고해보시면 좋을 것 같습니다.

Android 환경의 Facebook, Instagram Webview를 통해 간편 로그인을 하는 경우 카카오 앱이 뜨지 않고, 로그인 창이 노출됩니다

답변 감사합니다

현재 저희는 (2)의 방식을 사용하고있고 아래 참고내용도 확인해봤는데 , 해당사항이 아닌거같습니다.

안드로이드에서는 카카오톡 로그인이 확인되고 아이폰에서 확인이 안되는 상황인데 , 아이폰에서는 크롬 , 사파리를 했을때는 카카오톡 로그인이 노출이 됩니다 인스타그램 인앱 브라우져에서만 확인이 안되는걸로 파악하고있습니다.

카카오톡로그인이 노출되는 url과 안되는 url을 비교해봤는데
되는경우 끝에 webTalkLogin 이라고 나오고 안될경우 login으로 나오는데 이거랑 관련이 있을까요?

카카오톡으로 로그인 버튼 관련 질문 - chunmyungdev 님의 게시물 #7 해당 토픽글도 확인해봤는데 ,
비공개 릴레이 기능 꺼져있고, 모든 쿠키 차단 설정도 꺼져있는 상태이여서 해결방안이 안되었습니다.

필요하시면 재현케이스도 전달드리겠습니다 답변주시면 감사하겠습니다.

안녕하세요.

REST-API 방식에서 “카카오톡으로 로그인” 버튼은 UserAgent 값을 참고하여 표시 여부가 결정 됩니다. 인스타그램 웹뷰의 경우 그 동안 앱투앱 실행 여부가 인스타그램의 업데이트에 따라 허용되거나 제한을 받았기에 현재는 기본적으로 버튼을 표시하고 있지 않습니다.

안녕하세요

위에 말씀드린 내용처럼

"표시되는 경우 : 1) > 2) > 3) 의 절차를 그대로 진행한 뒤, 인앱브라우저를 닫고 다시 인스타그램 프로필의 링크를 열면 3)의 페이지가 열립니다. 그 다음 인앱브라우저에서 뒤로가기를 하면 2)의 페이지로 이동되며, 2)에서 다시 ‘카카오로 시작하기’ 를 눌러서 3)으로 이동하면 ‘카카오톡으로 로그인하기’ 버튼이 있는 페이지로 가게 됩니다. "

이럴때는 어떤 이유로 인해 카카오톡 로그인으로 나오는지 알수있을까요?

표시되는 경우가 있어서 , 해결방안이 있을거같은데 …
꼭 카카오톡으로 로그인하기를 띄우고싶습니다 ㅠㅠ

파라미터를 추가하거나 특정 옵션으로 어떻게 띄울수있는방법이라도 없을까요?

인스타그램 인앱브라우저에서는

(1) JS SDK authorize 방식 로그인 시도하면, 카카오계정 로그인페이지에 ‘카카오톡으로 로그인하기’ 버튼 표시하지 않고
(2) REST-API 방식 로그인 시도하면, 카카오계정 로그인페이지에 ‘카카오톡으로 로그인하기’ 버튼 표시합니다.
→ 운영하시는 사이트에 User-Agent 확인 로직 추가하셔서 인스타그램 인앱브라우저라면 REST-API 방식 로그인하고
→ 그외 기본 브라우저라면 JS SDK authorize 방식 로그인 처리하셔서
ID/PW 입력하지 않고 안전하고 빠르게 로그인하도록 구현하시면 좋을 것 같습니다.

말씀하신 상황은 JS SDK authorize 방식 로그인 시도 했는데 표기되는 상황이 있다는 것으로 이해되는데요.
재현할 수 있는 URL 알려주시겠어요?

iPhone이군요. 제가 확인한 것은 android인데요.

카카오 로그인과 별개로
iPhone 인스타그램 인앱브라우저에서 https://accounts.kakao.com/ 카카오 계정 페이지가 ‘카카오톡으로 로그인하기’ 를 제공하지 않는 것으로보이네요. 반대로 JS SDK authorize는 정상 작동 하네요.

배경을 다시 설명드리면,
(1) 카카오 로그인에서 사용하는 카카오톡 호출 스킴과 카카오 계정로그인 페이지의 스킴은 각각 다릅니다.
(2) 카카오 로그인에서 사용하는 카카오톡 호출 스킴은 HOST/URI-path 는 생략되어 있음
(인텐트 스킴 표준 스펙에서 HOST/URI-path 는 생략 가능하나 생략한 경우 페이스북 및 인스타그램 인앱브라우저에서 에러 처리 하는 것으로 확인)
(3) JS SDK authorize 방식 로그인 시, 최근 iPhone 카카오 로그인은 유니버설 링크를 도입했는데 정상 작동 인스타그램 인앱브라우저에서 정상작동 하는 것으로 확인
(4) 카카오톡을 호출하는데 사용하는 스킴은 카카오톡 업데이트가 필요하거 이전버전을 사용하면 변경된 스킴을 호출할 수 없으므로 변경하는 것이 어려움.

정리해보면
(1) android JS SDK authorize 방식 로그인 → 스킴 작동안함, 카카오 계정 로그인 페이지 이동 (‘카카오톡으로 로그인하기’ 없음)
(2) android REST-API 방식으로 로그인 → 카카오 계정 로그인 페이지 ‘카카오톡으로 로그인하기’ 표시
(3) iPhone JS SDK authorize 방식 로그인 → 유니버설 링크로 카카오톡 바로 실행 로그인 가능
(4) iPhone REST-API 방식으로 로그인 → 카카오 계정 로그인 페이지 이동 (‘카카오톡으로 로그인하기’ 작동안하여 버튼 제공안함)

위에 안내드린 것과 같이 인스타그램 인앱브라우저의 기능에 종속적으로 기능 제공할 수 밖에 없으므로
아래와 같이 처리하시면 좋을 것 같습니다.

(1) JS SDK authorize 방식 로그인을 기본으로 설정하여 카카오톡으로 간편 로그인 가능한 환경에 가장 간단하게 처리하시면 좋을 것 같습니다.
(2) android 인스타그램 인앱브라우저 일때, User-Agent에 Instagram 여부를 체크하셔서 REST-API 방식으로 로그인하시면 카카오 계정 로그인 페이지에서 ‘카카오톡으로 로그인하기’ 사용하실 수 있습니다.

(참고로 이러한 처리는 인스타그램 인앱브라우저에서 지원여부에 따라 변경될 수 있습니다.)

iPhone 인스타그램 인앱브라우저 User-Agent (* Instagram이라고 표기 안합니다. )

Mozilla/5.0 (iPhone; CPU iPhone OS 17_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148

android 인스타그램 인앱브라우저 User-Agent

Mozilla/5.0 (Linux; Android 13; SM-S908N Build/TP1A.220624.014; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/120.0.6099.43 Mobile Safari/537.36 Instagram 311.0.0.32.118 Android (33/13; 420dpi; 1080x2115; samsung; SM-S908N; b0q; qcom; ko_KR; 545986896)


if (/Instagram/i.test(navigator.userAgent)) {
   //REST-API 방식 로그인 
}
else{
   //JS SDK authorize 방식 로그인
}

(3) iPhone JS SDK authorize 방식 로그인 → 유니버설 링크로 카카오톡 바로 실행 로그인 가능

해당 기능을 사용하면 카카오톡 간편 로그인 기능을 사용하는걸까요?

최초 인스타에서 링크를 클릭하고 인스타 인앱브라우져에서 계정정보를 입력하고 로그인이 되야 다음부터는 자동로그인이 되는걸로 이해하면 될까요?

그리고
"표시되는 경우 : 1) > 2) > 3) 의 절차를 그대로 진행한 뒤, 인앱브라우저를 닫고 다시 인스타그램 프로필의 링크를 열면 3)의 페이지가 열립니다. 그 다음 인앱브라우저에서 뒤로가기를 하면 2)의 페이지로 이동되며, 2)에서 다시 ‘카카오로 시작하기’ 를 눌러서 3)으로 이동하면 ‘카카오톡으로 로그인하기’ 버튼이 있는 페이지로 가게 됩니다. "

이거에 대해서는 혹시 왜 이런현상이 발생하는지는 알수있을까요?

해당 기능을 사용하면 카카오톡 간편 로그인 기능을 사용하는걸까요?

네, 맞습니다.
계정 정보 입력 없이, iPhone JS SDK authorize 방식 로그인은 카카오톡 앱으로 바로 로그인 처리합니다.

카카오계정 로그인 페이지에서 Reffer로 판단하나보군요. 해당 기능은 카카오계정이 제공하는 기능이므로 카카오 계정 고객센터에 의견 주셔도 좋을 것 같긴하지만,

iPhone JS SDK authorize 방식 로그인은 계정 페이지에 진입하지 않고 바로 카카오톡으로 로그인하니 위에 안내드린 것처럼 적용하시는 것을 추천드립니다.

아하 아이폰으로 인스타그램 브라우져 최초 진입시 계정정보 (아이디 , 비밀번호)는 꼭 입력을 해줘야겠네요…

근데 지금 rest-api 방식도
아이폰 인스타그램 인앱브라우져 진입 → 카카오톡 로그인 버튼 클릭 → 계정정보입력 (카카오톡으로 로그인하기 없이 id , password 입력) → 로그인 후에
로그아웃 하고 다시 로그인을할때 자동로그인이 되는데 ,

JS SDK authorize 방식은 차이점이있을까요? 위와 같이 적용되면 그냥 rest-api로 냅둬도 괜찮을까요

음. 조금 잘못 전달된 것 같은데요.

if (/Instagram/i.test(navigator.userAgent)) {
   // REST-API 방식 로그인 : android 인스타그램 인앱브라우저에서만 동작
   // 카카오 계정 로그인 페이지에서 ‘카카오톡으로 로그인하기’
}
else{
   //JS SDK authorize 방식 로그인 : '아이폰으로 인스타그램 브라우져  또는 그외 기타 기본 브라우저'
   // 카카오톡앱으로 로그인 : 카카오 계정 페이지에 진입하지 않고 카카오톡을 실행해 ID/PW 입력 없이 로그인
}

계정정보입력 (카카오톡으로 로그인하기 없이 id , password 입력) → 로그인 후에
로그아웃 하고 다시 로그인을할때 자동로그인이 되는데 ,

인스타그램 인앱브라우저에 카카오 계정 페이지는 로그인된 상황이고, 운영하시는 사이트만 로그아웃된 것으로
카카오 계정 페이지는 다시 ID/PW입력 할 필요 없어서 그런것입니다.


인스타그램에서 아래 URL로 로그인 해보시면 ‘카카오톡앱으로 로그인’ 확인하실 수 있습니다.

JS SDK authorize 방식 로그인 Kakao Developers

아 그러면

JS SDK authorize 방식으로
최초 iphone 인스타그램 인앱브라우져에 접근후 카카오 로그인을 실행하면 위와 같이 ID/PW 입력 없이 로그인 실행이 된다는거죠?

위와 같이 분기를 칠때
if (/Instagram/i.test(navigator.userAgent)) {
  https://kauth.kakao.com/oauth/authorize?client_id=${REST_API_KEY}&redirect_uri=${REDIRECT_URL}&response_type=code
}
else{
  https://kauth.kakao.com/oauth/authorize?client_id=${JAVASCRIPT_KEY}&redirect_uri=${REDIRECT_URL}&response_type=code
}   
}

로 키만 변경해줘도 JS SDK authorize 방식으로 인지가 될까요
아니면 window.Kakao.Auth.authorize 해당 함수를 통해 호출이 필요할까요?

JS SDK authorize 방식으로
최초 iphone 인스타그램 인앱브라우져에 접근후 카카오 로그인을 실행하면 위와 같이 ID/PW 입력 없이 로그인 실행이 된다는거죠?

네, 계정 로그인 페이지로 이동하지 않고 바로 카카오톡 앱을 띄워 동의창 표시합니다.
동의 후, 또는 로그인 후 원래 앱으로 자동으로 돌아가지 않고 "닫기"나 뒤로 해야하는데 이는 아이폰 사용자들은 학습된 내용이라 큰 문제 없어 보이나 동선은 한번 확인해보시면 좋을 것같아요.

로 키만 변경해줘도 JS SDK authorize 방식으로 인지가 될까요
아니면 window.Kakao.Auth.authorize 해당 함수를 통해 호출이 필요할까요?

키만 변경하시면 안되고 이렇게 호출해주셔야합니다. (카카오톡을 SDK가 호출해줍니다.)

Kakao.Auth.authorize({
  redirectUri: '${REDIRECT_URI}',
});