코코딩딩

[안드로이드/android] 카카오api 카카오링크(v2-link) 메세지 전송 본문

일단기록/매일기록

[안드로이드/android] 카카오api 카카오링크(v2-link) 메세지 전송

겟츄 2022. 4. 27. 18:01

안드로이드 앱에서 카카오로 초대메세지와 같은 메세지를 보내는 방법을 검색하면 많은 예제들이 예전api 기능 들을 사용하고 있어 검색하는데 애를 먹었다.

 

카카오는 문서가 잘 되어 있지만 코틀린으로 작성되어 있어 자바코드로 변환을 하려면 또 검색을 해야 한다는 단점이 있었다. 많은 안드로이드 자료들이 코틀린으로 되어 있기 때문에 적절하게 자바로 변환하는 연습도 필요할 것 같다.

 


카카오 api를 이용하기 위한 절차들이 있는데 공식 문서에 자세히 설명이 되어 있다.

 

gradle

 

settings.gradle에 주소를 추가해준다.

 

maven { url 'https://devrepo.kakao.com/nexus/content/groups/public/' }

 

build.gradle에 카카오 링크 라이브러리를 추가해준다.

 

implementation "com.kakao.sdk:v2-link:2.9.0"

 

플랫폼 등록하기

 

카카오 디벨로퍼스 페이지에 로그인을 한 후 내 애플리케이션에 들어가서 애플리케이션 추가하기 버튼을 누른다.

 

정보를 입력한 후 네이티브 앱 키를 확인해준다.

 

또한 플랫폼 탭에 들어가 안드로이드를 추가해주고 자신의 패키지명과 같게 설정한 후 해쉬값을 입력하는데

 

해쉬값은 Log.d("key::", "::::::: "+ Utility.INSTANCE.getKeyHash(this)); 를 이용해 확인한 후 추가해준다.

 

인터넷 사용권한 설정

 

<uses-permission android:name="android.permission.INTERNET" />

 

custom url 스킴 설정하기

 

먼저 res 에 있는 values 폴더에 kakao_string.xml 파일을 만들어 주었다.

 

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="kakao_app_key">카카오에서 받은 네이티브키</string>
    <string name="kakao_scheme">kakao카카오에서 받은 네이티브키</string>
    <string name="kakaolink_host">kakaolink</string>
</resources>

 

그리고 manifests에 들어가 다음과 같이 추가 해준다.

 

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.kakaolink">

    <uses-permission android:name="android.permission.INTERNET" />

    <application
    	// 이부분추가
        android:usesCleartextTraffic="true"
        
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.KakaoLink">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
			// 이부분 추가 시작
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="@string/kakao_scheme"
                    android:host="@string/kakaolink_host"/>
            </intent-filter>
            <meta-data
                android:name="com.kakao.sdk.AppKey"
                android:value="@string/kakao_app_key" />
           // 이부분 추가 끝

        </activity>
    </application>

</manifest>

 

 

메세지 보내는 코드 작성

 

MainActivity에 버튼을 누르면 메세지를 보내는 창이 뜨도록 구현한다.

 

public class MainActivity extends AppCompatActivity {

    Button button;
    Button button2;
    Button button3;
    Context context;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
//        Log.d("key::", "::::::: "+ Utility.INSTANCE.getKeyHash(this));
        KakaoSdk.init(this, "네이티브키");
        context = this;
        button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                KakaoLink(context);
            }
        });
	}
    
    // 카카오링크 메서드
    public void KakaoLink(Context context) {
        // 원하는 메세지 형태의 template 생성
        TextTemplate textTemplate = new TextTemplate("원하는 메세지 test",new Link("https://www.daum.net","https://m.daum.net/"));
        // 코드 시작
        // 카카오톡 설치여부 확인
        if(LinkClient.getInstance().isKakaoLinkAvailable(context)){
            LinkClient.getInstance().defaultTemplate(context, textTemplate,null,new Function2<LinkResult, Throwable, Unit>() {
                @Override
                public Unit invoke(LinkResult linkResult, Throwable throwable) {
                    if (throwable != null) {
                        Log.e("TAG", "카카오링크 보내기 실패", throwable);
                    }
                    else if (linkResult != null) {
                        context.startActivity(linkResult.getIntent());
                        // 카카오링크 보내기에 성공했지만 아래 경고 메시지가 존재할 경우 일부 컨텐츠가 정상 동작하지 않을 수 있습니다.
                        Log.w("TAG", "Warning Msg: "+ linkResult.getWarningMsg());
                        Log.w("TAG", "Argument Msg: "+ linkResult.getArgumentMsg());
                    }
                    return null;
                }
            });
        }else{
            //카카오톡 미설치 시 웹으로 실행
            Uri sharerUrl = WebSharerClient.getInstance().defaultTemplateUri(textTemplate);
            try {
                KakaoCustomTabsClient.INSTANCE.openWithDefault(context,sharerUrl);
            } catch (UnsupportedOperationException e) {
                e.printStackTrace();
            }
        }
    }
    // 카카오링크 메서드 끝
}

 

 

위에 입력한 daum의 링크가 뜰것으로 기대했지만 실제로는 뜨지 않아 해결방법을 찾는중이다.