안드로이드에서 카카오톡 공유하기에서 shareDefault 사용시 오류가 발생합니다

안드로이드 스튜디오 : chipmunk 2021.2.1
카카오링크 SDK 버전 : v2-share:2.15.0


안녕하세요.
기존 카카오 공유하기 기능을 ‘com.kakao.sdk:kakaolink:1.20.0’ 로 사용하고있던중, SDK 만료에 따른 변경으로
‘com.kakao.sdk:v2-share:2.15.0’ 로 변경 개발중입니다.

    FeedTemplate feedTemplate = new FeedTemplate.Builder(ContentObject.newBuilder(sendPrefix, imgUrl, LinkObject.newBuilder()
            .setWebUrl(link)
            .setMobileWebUrl(link).build())
            .setDescrption(sendMessage)
            .build())
            .addButton(new ButtonObject(btnText, LinkObject.newBuilder()
                    .setWebUrl(link)
                    .setMobileWebUrl(link)
                    // 카카오 스키마를 사용하지 않고 다이나믹 링크로 앱 진입되도록 하기 위해 아래 함수 미사용
                    // .setAndroidExecutionParams(link)
                    // .setIosExecutionParams(link)
                    .build()))
            .build();

    KakaoLinkService.getInstance().sendDefault(activity, feedTemplate, new ResponseCallback<KakaoLinkResponse>() {
        public void onFailure(ErrorResult errorResult) {
            Logger.e(errorResult.toString());
        }

        public void onSuccess(KakaoLinkResponse result) {
        }
    });

라는 코드로 기존에 사용하고있던것을

    FeedTemplate feedTemplate2  = new FeedTemplate(
            new Content(
                    sendPrefix,         // 타이틀
                    imgUrl,             // 이미지
                    new Link(link,      // web url
                            link        // mobile web url
                    ),
                    sendMessage         // description
            ),
            null,
            null,
            Collections.singletonList(new Button(btnText, new Link(link, link)))
    );

    ShareClient.getInstance().shareDefault(activity.getApplicationContext(), feedTemplate2, (SharingResult sharingResult, Throwable throwable) -> {
        if (throwable != null) {
            LogUtil.d(TAG, "실패  : " + throwable + " ,  메세지   :  "  + throwable.getCause());
        } else if (sharingResult != null) {
            activity.startActivity(sharingResult.getIntent());
            LogUtil.d("TAG", "Warning Msg: " + sharingResult.getWarningMsg());
            LogUtil.d("TAG", "Argument Msg: " + sharingResult.getArgumentMsg());
        }
        return null;
    });

으로 변경하여서 동작하도록 구현했습니다.

문제가 되는 부분은, 개발서버가 내부망이다보니 해당 코드에서 imgUrl 부분을 가져올때 문제가 발생합니다.

기존에도 카카오톡으로 공유하기를 눌렀을때 다소 시간이 걸렸으나(6~10초정도) 카카오톡으로의 액티비티가 실행이 됬다면, 변경된 코드에서는 일정시간(6~8초…정도)이 지난후
java.net.SocketTimeoutException: timeout , 메세지 : java.net.SocketException: socket is closed
아래와 같은 문구와 함께 동작을 안합니다.

다만 궁금한것은 위의 변경된 코드로 운영서버에서 동작시에 공유하기가 잘 동작되어서,
shareDefault 내부 함수에서 템플릿 내부의 이미지를 가져올때 왜 기존에 동작되던것이 변경후에는 소켓이 닫히면서 타임아웃이 나는지 궁금합니다.

안녕하세요.

카카오톡 공유하기는 설정하신 이미지를 미리 보기용으로 표기하기 위해 섬네일 이미지로 변환하는 과정이 있습니다.

이때 카카오측 서버가 해당 이미지에 방문하게되고 정상응답이나 오류응답이 아닌 방화벽 차단인경우 대기하다 타임아웃 발생합니다.

이미지 URL은 카카오 서버가 접근 가능한 public망에 따로 두시거나
개발용은 public 망의 더미 이미지로 사용하시면 좋을 것 같습니다.
(개발서버에 카카오 스크랩서버 접근을 허용하셔도 됩니다.)

211.231.103.0/24
27.0.238.0/24
port: 80,443
1개의 좋아요

감사합니다! 스크랩서버 접근되도록 수정해보고 말해드리겠습니다.

추가적으로 공유하기에 사용되는 이미지의 크기나 확장자 명이 맞지않으면 어떻게 동작되지는 알려주실수 있으신가요?

추가적으로 공유하기에 사용되는 이미지의 크기나 확장자 명이 맞지않으면 어떻게 동작되지는 알려주실수 있으신가요?

처리 불가능한 이미지라면 표시되지 않고,
크기가 다르다면 표시 사이즈에 맞게 크롭되거나 늘려지는 것으로 알고 있습니다.
자세한 표시방식은 실제 전송 테스트 해보시는게 정확할 것같아요.

1개의 좋아요

감사합니다!