문의 시 사용하시는 SDK 버전 정보와 플랫폼(Android / iOS) 및 디벨로퍼스 앱ID를 알려주세요.
디벨로퍼스 앱 ID: 775109
flutter 앱에 딥링크를 연결했고, go router를 통해 경로를 설정했습니다.
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" android:host="partner-deeplink.netlify.app" />
<data android:scheme="https" />
</intent-filter>
GoRouter(
initialLocation: '/',
routes: [
GoRoute(
path: '/',
builder: (context, state) {
return const SplashScreen();
},
),
GoRoute(
path: '/main',
builder: (context, state) {
return const MainNavigationScreen(tab: "일기");
},
),
GoRoute(
path: '/sign-up',
builder: (context, state) {
return const SignUpScreen();
},
),
GoRoute(
path: '/agreement',
builder: (context, state) {
if (state.extra == null) return const SignUpScreen();
final kakaoUser = (state.extra as kakao.User);
return RegAgreementScreen(
kakaoLogin: true,
kakaoUser: kakaoUser,
);
},
),
GoRoute(
path: '/partner',
builder: (context, state) {
final sendUserId = state.uri.queryParameters["sendUserId"];
return PartnerAgreementScreen(sendUserId: sendUserId);
},
),
],
)
딥링크는 hash url이 아니라 path url로 작동되는 것으로 확인했고
그럴 경우 ‘https://partner-deeplink.netlify.app/partner?sendUserId=aaa’ 링크를 클릭하면
PartnerAgreementScreen 화면이 띄워져야 합니다.
실제 문자에 해당 링크를 올리면 PartnerAgreementScreen이 올바르게 뜹니다.
다만, 카카오톡으로 해당 링크를 공유하면 아무 화면도 뜨지 않아요.
현재 netlify로 배포했을 때 아무 화면도 뜨지 않고, github로 배포했을 때는 404 에러가 떴습니다.
‘https://partner-deeplink.netlify.app/#/partner?sendUserId=aaa’
이렇게 #을 넣고 hash url로 접근하면 링크는 카카오톡에서도 잘 작동하는데 PartnerAgreementScreen가 아닌 그냥 기본 SplashScreen 화면이 뜹니다.
원래는 카카오톡에서 hash url로도 작동이 안되었어서 딥링크를 연결하는 웹의 index.html에 아래와 같이 코드를 넣어 외부 창을 띄우도록 했습니다.
<script type="text/javascript" charset="UTF-8">
var inappdeny_exec_vanillajs = (callback) => {
if (document.readyState !== "loading") {
callback();
} else {
document.addEventListener("DOMContentLoaded", callback);
}
};
inappdeny_exec_vanillajs(() => {
/* Do things after DOM has fully loaded */
function copytoclipboard(val) {
var t = document.createElement("textarea");
document.body.appendChild(t);
t.value = val;
t.select();
document.execCommand("copy");
document.body.removeChild(t);
}
function inappbrowserout() {
copytoclipboard(window.location.href);
alert(
'URL주소가 복사되었습니다.\n\nSafari가 열리면 주소창을 길게 터치한 뒤, "붙여놓기 및 이동"를 누르면 정상적으로 이용하실 수 있습니다.'
);
location.href = "x-web-search://?";
}
var useragt = navigator.userAgent.toLowerCase();
var target_url = location.href;
if (useragt.match(/kakaotalk/i)) {
//카카오톡 외부브라우저로 호출
location.href =
"kakaotalk://web/openExternal?url=" + encodeURIComponent(target_url);
} else if (useragt.match(/line/i)) {
//라인 외부브라우저로 호출
if (target_url.indexOf("?") !== -1) {
location.href = target_url + "&openExternalBrowser=1";
} else {
location.href = target_url + "?openExternalBrowser=1";
}
} else if (
useragt.match(
/inapp|naver|snapchat|wirtschaftswoche|thunderbird|instagram|everytimeapp|whatsApp|electron|wadiz|aliapp|zumapp|iphone(.*)whale|android(.*)whale|kakaostory|band|twitter|DaumApps|DaumDevice\/mobile|FB_IAB|FB4A|FBAN|FBIOS|FBSS|trill|SamsungBrowser\/[^1]/i
)
) {
//그외 다른 인앱들
if (useragt.match(/iphone|ipad|ipod/i)) {
//아이폰은 강제로 사파리를 실행할 수 없다 ㅠㅠ
//모바일대응뷰포트강제설정
var mobile = document.createElement("meta");
mobile.name = "viewport";
mobile.content =
"width=device-width, initial-scale=1, shrink-to-fit=no, user-scalable=no, minimal-ui";
document.getElementsByTagName("head")[0].appendChild(mobile);
//노토산스폰트강제설정
var fonts = document.createElement("link");
fonts.href =
"https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100;300;400;500;700;900&display=swap";
document.getElementsByTagName("head")[0].appendChild(fonts);
document.body.innerHTML =
"<style>body{margin:0;padding:0;font-family: 'Noto Sans KR', sans-serif;overflow: hidden;height: 100%;}</style><h2 style='padding-top:50px; text-align:center;font-family: 'Noto Sans KR', sans-serif;'>인앱브라우저 호환문제로 인해<br />Safari로 접속해야합니다.</h2><article style='text-align:center; font-size:17px; word-break:keep-all;color:#999;'>아래 버튼을 눌러 Safari를 실행해주세요<br />Safari가 열리면, 주소창을 길게 터치한 뒤,<br />'붙여놓기 및 이동'을 누르면<br />정상적으로 이용할 수 있습니다.<br /><br /><button onclick='inappbrowserout();' style='min-width:180px;margin-top:10px;height:54px;font-weight: 700;background-color:#31408E;color:#fff;border-radius: 4px;font-size:17px;border:0;'>Safari로 열기</button></article><img style='width:70%;margin:50px 15% 0 15%' src='https://tistory3.daumcdn.net/tistory/1893869/skin/images/inappbrowserout.jpeg' />";
} else {
//안드로이드는 Chrome이 설치되어있음으로 강제로 스킴실행한다.
location.href =
"intent://" +
target_url.replace(/https?:\/\//i, "") +
"#Intent;scheme=http;package=com.android.chrome;end";
}
}
});
</script>
그럼에도 https://partner-deeplink.netlify.app/partner?sendUserId=aaa 랑크에는 아무런 반응이 없네요ㅠ
카카오톡 데벨로퍼스의 플랫폼 Web에 사이트 도메인에도 잘 연결해주었습니다.
처음에는 깃허브로 배포했었는데 딥링크는 path url로 작동하는데 깃허브가 hash url이 아니면 오류가 떨어지는 것 같아서 netlify로 배포툴을 바꾸었음에도 카카오톡에서만 동일하게 작동 안하나는 걸로 보아서는 배포툴의 문제라기보단 카카오톡에서 무언가 작동을 막는 것 같습니다,
카카오톡에서만 해당 링크가 작동되지 않는 이유가 무엇일까요?
그리고 어떻게 해결하면 될지 도움 부탁드립니다…