kakao / kakao_flutter_sdk

Flutter SDK for Kakao Open API
Apache License 2.0
192 stars 70 forks source link

카카오 링크 관련 문의드립니다! #78

Closed ungchun closed 3 years ago

ungchun commented 3 years ago

안녕하세요 카카오 링크 기능을 만들고 싶어서 구현중에 있는 학생입니다. 코드는 kakao_flutter_sdk github에 example, link.dart 파일을 이용했구요. 버전은 0.6.3 버전 쓰고 있습니다. custome, default, scrap 세개전부다 똑같은 현상이 발생합니다. map 호출하는데 있어서 null 정보가 있다는거 같은데.. 아무리 찾아보고 해도 해결이 쉽게 되지 않아서 문의드립니다!

이슈

mbkim95 commented 3 years ago

안녕하세요~

말씀하신 내용으로는 정확한 상황 파악이 어려워서, 이슈가 발생한 부분의 코드를 첨부해주실 수 있으실까요?

ungchun commented 3 years ago

현재 코드는 github 에 올라와있는 예제 코드 그대로 사용중입니다! 버전 0.5.~ 사용할때는 이런 현상이 발생한적이 없었습니다.. custom, default, scrap 버튼 3개 다 눌러도 똑같은 현상이 발생하네요..

import 'package:kakao_flutter_sdk/link.dart';

class LinkScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ListView(
      children: <Widget>[
        ListTile(title: Text("Custom"), onTap: onTapCustom),
        ListTile(title: Text("Default"), onTap: onTapDefault),
        ListTile(title: Text("Scrap"), onTap: onTapScrap)
      ],
    );
  }

  void onTapDefault() async {
    try {
      var template = FeedTemplate(
          Content(
              "딸기 치즈 케익",
              Uri.parse(
                  "http://mud-kage.kakao.co.kr/dn/Q2iNx/btqgeRgV54P/VLdBs9cvyn8BJXB3o7N8UK/kakaolink40_original.png"),
              Link(
                  webUrl: Uri.parse("https://developers.kakao.com"),
                  mobileWebUrl: Uri.parse("https://developers.kakao.com"))),
          social: Social(likeCount: 286, commentCount: 45, sharedCount: 845),
          buttons: [
            Button("웹으로 보기",
                Link(webUrl: Uri.parse("https://developers.kakao.com"))),
            Button("앱으로 보기",
                Link(webUrl: Uri.parse("https://developers.kakao.com"))),
          ]);
      var uri = await LinkClient.instance.defaultWithWeb(template);
      await launchBrowserTab(uri);
    } catch (e) {
      print(e.toString());
    }
  }

  void onTapCustom() async {
    try {
      final talkInstalled = await isKakaoTalkInstalled();
      if (talkInstalled) {
        var uri = await LinkClient.instance
            .customWithTalk(528726, templateArgs: {"key1": "value1"});
        await LinkClient.instance.launchKakaoTalk(uri);
        return;
      }
      var uri = await LinkClient.instance
          .customWithWeb(528726, templateArgs: {"key1": "value1"});
      await launchBrowserTab(uri);
    } catch (e) {
      print(e.toString());
    }
  }

  void onTapScrap() async {
    print("@@@@@@@@@@@@@@@@@@@@@@@ ${KakaoContext.platformClientId}");
    try {
      final talkInstalled = await isKakaoTalkInstalled();
      if (talkInstalled) {
        Uri uri = await LinkClient.instance
            .customWithTalk(528726, templateArgs: {"key1": "value1"});
        await launchBrowserTab(uri);
        // var uri = await LinkClient.instance
        //     .scrapWithTalk("https://developers.kakao.com");
        // await LinkClient.instance.launchKakaoTalk(uri);
        return;
      }
      var uri = await LinkClient.instance
          .scrapWithWeb("https://developers.kakao.com");
      await launchBrowserTab(uri);
    } catch (e) {
      print(e.toString());
    }
  }
}
mbkim95 commented 3 years ago

혹시 카카오 디벨로퍼스 홈페이지에서 메시지 템플릿은 생성하셨나요?

만약 생성하지 않으셨다면, 생성 후 LinkClient.instance.customWithWeb(528726, templateArgs: {"key1": "value1"}); 에서 528726을 생성한 ID로 변경하면 정상 동작할 것으로 보여요

ungchun commented 3 years ago

답변 감사합니다! 우선 저는 default 부분을 사용하고 있어서 따로 메시지 템플릿은 생성하지 않았습니다. 디버그 키 해시값도 제대로 들어가있고, 코드상에서 네이티브 앱키 또한 main문에 등록되어있습니다.

asd

네이티브앱키 등록

cmd 키 해시값

키 해시 홈페이지

제 테스트 코드는 default 부분을 쓰고있습니다.

import 'package:kakao_flutter_sdk/link.dart';

class LinkScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ListView(
      children: <Widget>[
        ListTile(title: Text("Default"), onTap: onTapDefault),
      ],
    );
  }

  void onTapDefault() async {
    try {
      print("1111");
      var template = FeedTemplate(
          Content(
              "딸기 치즈 케익",
              Uri.parse(
                  "http://mud-kage.kakao.co.kr/dn/Q2iNx/btqgeRgV54P/VLdBs9cvyn8BJXB3o7N8UK/kakaolink40_original.png"),
              Link(
                  webUrl: Uri.parse("https://developers.kakao.com"),
                  mobileWebUrl: Uri.parse("https://developers.kakao.com"))),
          buttons: [
            Button("웹으로 보기",
                Link(webUrl: Uri.parse("https://developers.kakao.com"))),
            Button("앱으로 보기",
                Link(webUrl: Uri.parse("https://developers.kakao.com"))),
          ]);
      print("2222");
      var uri = await LinkClient.instance.defaultWithTalk(template);
      print("3333");
      await LinkClient.instance.launchKakaoTalk(uri);
      print("4444");
    } catch (e) {
      print("error");
      print(e.toString());
    }
  }
}

이 코드를 돌리면 error

1, 2 까지는 print가 나오는데 var uri = await LinkClient.instance.defaultWithWeb(template); 이 부분 다음에 catch로 잡혀버려서 실행이 되질 않네요..

mbkim95 commented 3 years ago

LinkClient.instance.defaultWithTalk() 을 사용하시고 싶으신건가요, 아니면 LinkClient.instance.defaultWithWeb()을 사용하고 싶으신건가요? 코드와 설명이 달라서 헷갈리네요

ungchun commented 3 years ago

LinkClient.instance.defaultWithTalk() 입니다 !

mbkim95 commented 3 years ago

해당 이슈가 발생하는 디바이스 OS 버전이 어떻게 되나요?

추가로 앱 id 알려주시면 감사하겠습니다.

ungchun commented 3 years ago

안드로이드 버전 7.0 이고, 앱 id는 528726 입니다!

mbkim95 commented 3 years ago

첨부해주신 코드를 그대로 사용했음에도 저희 쪽에서 해당 이슈가 재현이 되지 않아서 정확한 원인을 파악하지 못한 상태입니다ㅠㅠ

다만 서버 로그를 확인했을 때 키 해시가 잘못됐다는 에러 로그가 있네요.

키 해시 확인 후 수정 부탁드리겠습니다.

ungchun commented 3 years ago

바쁘신와중에 답변 감사합니다! 키 해시 값 재확인해서 수정하고 했는데도 똑같은 이슈가 뜨네요ㅠㅠ.. 마지막으로 서버 로그에 키 해시 잘못됐다는 에러 다시뜨는지 확인가능할까요..? 이슈는 닫아놓겠습니다! 링크는 나중에 다시 해보려 합니다.. 감사합니다

mbkim95 commented 3 years ago

@ungchun 서버 로그를 확인해보면 앱 id 528726로는 20일 16시 39분 이후로는 서버에 요청이 없고, 마지막 요청 역시도 등록되지 않은 키 해시로 되어있네요ㅠㅠ

현재 앱 id 528726에는 7i3 , UEm, aak, xL+ 이렇게 4개의 키 해시 값이 등록되어있고, 서버에 요청들어오는 키 해시 값은 IwO*** 입니다.

한번 더 확인 부탁드려요

ungchun commented 3 years ago

key hash 값 openSSL 버전에 따라 바뀐다는 말이 있어서 안드로이드에서 직접 key hash를 추출했더니 IwO... 값이 나와서 다시 해보니 정상 작동됩니다!! 감사합니다ㅠㅠ