웹페이지를 사용할 수 없음
다음 이유로 intent://send?appkey=dfcf~~~~
net:ERR_UNKOWN_URL_SCHEME
예전에는 (‘package:kakao_flutter_sdk/link.dart’)에는 잘 되었었는데…
최신패키지에서는 (import ‘package:kakao_flutter_sdk_share/kakao_flutter_sdk_share.dart’ 오류가 나고 있습니다.
url 스키마가 가 다르기 때문인 것 같은데…
launchUrl를 이용하거나 어떤 해결책이 있을까요?
(제가 다른 언어는 잘 몰라서… flutter로 답변을 주시면 감사하겠습니다…)
안녕하세요
원인 파악을 위해 앱 id (카카오 디벨로퍼스에서 확인할 수 있는 숫자값), 사용 중인 kakao_flutter_sdk 버전, 이슈가 발생한 디바이스 및 OS 정보, 이슈가 발생한 코드 첨부 부탁드리겠습니다
앱 id : 187146
kakao_flutter_sdk_share: ^1.3.1
안드로이드 에뮬레이터 및 핸드폰
=============== (혹시나해서 … html 꺽기기호 생략)
div onclick=“go_kakao()”
img src=https://developers.kakao.com/assets/img/about/logos/kakaotalksharing/kakaotalk_sharing_btn_medium.png
카카오톡 친구에게 소개하기
/div
function go_kakao(){
window.flutter_inappwebview.callHandler('go_kakao', '');
}
===============
onWebViewCreated: (InAppWebViewController controller) {
_webViewController = controller;
controller.addJavaScriptHandler(
handlerName: 'go_kakao',
callback: (args) {
KakaoShareManager.kakaoSend();
}); // 자바스크립트 통신 - 카카오톡 친구공유 이미지를 클릭하면 KakaoShareManager.kakaoSend() 를 실행.
===============
class KakaoShareManager {
static kakaoSend() async {
KakaoSdk.init(nativeAppKey: ‘a31~~~~~~~~~’);
bool isKakaoTalkSharingAvailable =
await ShareClient.instance.isKakaoTalkSharingAvailable();
if (isKakaoTalkSharingAvailable) {
try {
Uri uri =
await ShareClient.instance.shareDefault(template: defaultFeed);
await ShareClient.instance.launchKakaoTalk(uri);
} catch (error) {
//
}
} else {
try {
Uri shareUrl = await WebSharerClient.instance
.makeDefaultUrl(template: defaultFeed);
await launchBrowserTab(shareUrl, popupOpen: true);
} catch (error) {
// print(‘카카오톡 공유 실패 $error’);
}
}
}
static FeedTemplate defaultFeed = FeedTemplate(
);
}
===============
pc 브라우저에서는 다음 script 코드로 잘 작동합니다.
혹시 flutter 에서 KakaoShareManager 클래스를 호출하지 않고
그냥 html script 코드만으로 완성을 할 수도 있는지요? (가능할 것 같은데...)
html script 코드만으로 했을 때도 동일한 에러가 나고 있습니다....
이 경우 flutter에서 어디에서 어떻게 처리를 해 주어야 하는지 궁금합니다...
div id="kakaotalk-sharing-btn" onclick="go_kakao()"
img src=https://developers.kakao.com/assets/img/about/logos/kakaotalksharing/kakaotalk_sharing_btn_medium.png
카카오톡 친구에게 소개하기
/div
script
Kakao.Share.createDefaultButton({
container: '#kakaotalk-sharing-btn',
objectType: 'feed',
content: {
~~~~ ;
/script
안녕하세요
서버 로그와 작성하신 코드를 확인해봤을 때 JavaScript SDK와 Flutter SDK를 혼용해서 사용하고 있는 것으로 보이는데요,
JavaScript SDK의 경우 모바일 하이브리드 앱 환경도 지원하기 때문에 Flutter SDK와 JavaScript SDK를 혼용하는 것보다는 JavaScript SDK만 사용해서 구현하시는 것이 더 좋을 것으로 보입니다.
제보주신 에러 url에 첨부된 앱 키가 JavaScript 앱 키 인 점, Flutter SDK에서는 해당 url을 사용하지 않는 점 등을 봤을 때 안드로이드 디바이스에서 Flutter SDK의 코드가 아니라 JavaScript SDK의 코드가 동작하면서 에러가 발생한 것 같습니다.
JavaScript SDK 문서를 확인해보시면 하이브리드 앱 설정 관련을 가이드하고 있는데요, 하이브리드 앱 관련 설정들이 제대로 되어있지 않아서 에러가 발생하는 것으로 보입니다.
가이드 확인하셔서 설정 후 이슈가 계속해서 발생하는지 확인 부탁드리겠습니다.
말씀하신대로 Flutter SDK를 제거하고
JavaScript SDK 만으로 진행을 했습니다…
제가 사용한 webview 패키지가 Flutter_inappwebview 입니다.
그리고 코드는 다음과 같습니다…
initialOptions: InAppWebViewGroupOptions(
crossPlatform: InAppWebViewOptions(
javaScriptEnabled: true,
javaScriptCanOpenWindowsAutomatically: true,
useShouldOverrideUrlLoading: true,
useShouldInterceptFetchRequest: true,
),
android: AndroidInAppWebViewOptions(
mixedContentMode:
AndroidMixedContentMode.MIXED_CONTENT_ALWAYS_ALLOW,
supportMultipleWindows: true,
useShouldInterceptRequest: true,
useHybridComposition: true,
)),
shouldOverrideUrlLoading: (controller, navigationAction) async {
var url = navigationAction.request.url!;
var uri = Uri.parse(url.toString());
await launchUrl(uri);
return NavigationActionPolicy.CANCEL;
},
그런데 …
var url = navigationAction.request.url!; 여기에 중단점을 찍고 확인을 해보면
navigationAction 값이 다음과 같이 나옵니다…ㅠㅠ
<optimized out>
<error>:<Invalid params>
PC 브라우저에서는 정상적으로 작동합니다.
html 코드
<div id=kakaotalk-sharing-btn href=javascript:; >
<img src=https://developers.kakao.com/assets/img/about/logos/kakaotalksharing/kakaotalk_sharing_btn_medium.png />|
<br/>카카오톡 친구에게 소개하기
</div>
<script>
Kakao.Share.createDefaultButton({
container: ‘#kakaotalk-sharing-btn’,
objectType: ‘feed’,
~~~~
</script>
답변이 조금 늦었네요ㅠㅠ
서버 로그와 에러 내용을 확인했을 때는 API 호출이 정상적으로 이뤄지고 있어서 flutter_inappbrowser 설정을 잘못하신 것으로 추측됩니다. fluter_inappbrowser는 외부 패키지이므로 해당 패키지 이슈에 대해서는 원인을 파악하기 어려운 점 양해 부탁드리고 이전 댓글에 첨부했던 하이브리드 앱 가이드 참고하셔서 설정하셔야할 것 같습니다.