본문 바로가기
언어, 환경별 예제 코드

Android Kakao SDK v2 Java로 사용하기 - 카카오 링크

by kakao-TAM 2021. 11. 29.

- Android Kakao SDK 공식 가이드 : https://developers.kakao.com/docs/latest/ko/message/android-link

 

 


사전 체크 1. Android SDK 2.4.0 미만 사용 시, AndroidManifest.xml 에 queries 요소 추가 (카카오톡 호출 위해)

    <!--queries에 카카오톡 패키지 추가-->
    <queries>
        <package android:name="com.kakao.talk" />
    </queries>

사전 체크 2. AndroidManifest.xml에 카카오 링크 앱 스킴 설정

<activity android:name=".{YOUR_ACTIVITY_NAME}">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        
        <!-- "kakao{YOUR_NATIVE_APP_KEY}://kakaolink" 형식의 앱 실행 스킴을 설정하는데 사용 -->
        <data android:host="kakaolink"
                android:scheme="kakao{YOUR_NATIVE_APP_KEY}" />
    </intent-filter>
</activity>

 

 

 


1. Template 객체 Java 구성

    FeedTemplate feedTemplate = new FeedTemplate(
            new Content("오늘의 디저트",
                    "http://mud-kage.kakao.co.kr/dn/Q2iNx/btqgeRgV54P/VLdBs9cvyn8BJXB3o7N8UK/kakaolink40_original.png",
                    new Link("https://developers.kakao.com",
                            "https://developers.kakao.com"),
                    "#케익 #딸기 #삼평동 #카페 #분위기 #소개팅"
            ),
            new ItemContent("Kakao",
                    "http://mud-kage.kakao.co.kr/dn/Q2iNx/btqgeRgV54P/VLdBs9cvyn8BJXB3o7N8UK/kakaolink40_original.png",
                    "Cheese cake",
                    "http://mud-kage.kakao.co.kr/dn/Q2iNx/btqgeRgV54P/VLdBs9cvyn8BJXB3o7N8UK/kakaolink40_original.png",
                    "Cake",
                    Arrays.asList(new ItemInfo("cake1", "1000원")),
                    "Total",
                    "15000원"
            ),
            new Social(286, 45, 845),
            Arrays.asList(new com.kakao.sdk.template.model.Button("웹으로 보기", new Link("https://developers.kakao.com", "https://developers.kakao.com")))
    );

2. 카카오 링크 발송 Java 구성

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        Button kakao_link_msg_button = (Button) findViewById(R.id.kakao_link_msg_button);
        kakao_link_msg_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (UserApiClient.getInstance().isKakaoTalkLoginAvailable(MainActivity.this)) {
                    kakaoLink();
                } else {
                    webKakaoLink();
                }
            }
        });

    }

    public void kakaoLink() {
        String TAG = "kakaoLink()";
        // 카카오톡으로 카카오링크 공유 가능
        LinkClient.getInstance().defaultTemplate(MainActivity.this, feedTemplate, null, (linkResult, error) -> {
            if (error != null) {
                Log.e("TAG", "카카오링크 보내기 실패", error);
            } else if (linkResult != null) {
                Log.d(TAG, "카카오링크 보내기 성공 ${linkResult.intent}");
                MainActivity.this.startActivity(linkResult.getIntent());

                // 카카오링크 보내기에 성공했지만 아래 경고 메시지가 존재할 경우 일부 컨텐츠가 정상 동작하지 않을 수 있습니다.
                Log.w("TAG", "Warning Msg: " + linkResult.getWarningMsg());
                Log.w("TAG", "Argument Msg: " + linkResult.getArgumentMsg());
            }
            return null;
        });
    }

    public void webKakaoLink() {
        String TAG = "webKakaoLink()";

        // 카카오톡 미설치: 웹 공유 사용 권장
        // 웹 공유 예시 코드
        Uri sharerUrl = WebSharerClient.getInstance().defaultTemplateUri(feedTemplate);

        // CustomTabs으로 웹 브라우저 열기
        // 1. CustomTabs으로 Chrome 브라우저 열기
        try {
            KakaoCustomTabsClient.INSTANCE.openWithDefault(MainActivity.this, sharerUrl);
        } catch (UnsupportedOperationException e) {
            // Chrome 브라우저가 없을 때 예외처리
        }

        // 2. CustomTabs으로 디바이스 기본 브라우저 열기
        try {
            KakaoCustomTabsClient.INSTANCE.open(MainActivity.this, sharerUrl);
        } catch (ActivityNotFoundException e) {
            // 인터넷 브라우저가 없을 때 예외처리
        }
    }

 

 

댓글