카카오링크는 2018년 6월 1일부로 정책이 바뀌어 새로운 카카오링크 ver2로 개발을 진행해야 한다.

블로그를 찾아봤지만 카카오링크 ver2에 대해 자세하게 나와있지 않아 처음부터 차근차근 정리해보자!

 

 

 

Step1. 앱 생성

https://developers.kakao.com/docs/android/getting-started#%EC%95%B1-%EC%83%9D%EC%84%B1

 

Kakao Developers_

더 나은 세상을 꿈꾸고 그것을 현실로 만드는 이를 위하여 카카오에서 앱 개발 플랫폼 서비스를 시작합니다.

developers.kakao.com

해당 사이트에 접속하여서 다음과 같은 순서대로 실행한다.

1. 내 애플리케이션 > 앱 만들기를 통해 앱을 생성합니다.

앱 만들기 결과 완료 화면

 

2. app > resource > value 폴더에 kakao_strings.xml 파일을 생성한다.

해당 파일에 위의 1의 과정을 끝나고 뜨는 완료 화면에서 첫번째 줄인 네이티브 앱키를 kakao_strings.xml 파일에 네이티브 앱키 들어갈 자리에 복사해서 넣는다.

 

kakao_scheme의 경우 앞에 "kakao"글자를 넣고 네이티브 앱키를 붙여넣는다.

kakaoliank_host는 모두 동일하게 kakaolink라고 넣으면 된다.

kakao_strings.xml
1
2
3
4
5
6
<?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>
 

 

3. 서버와의 통신을 위해 netwrok 권한을 설정한다.

3.1 통신을 허용하기 위해서 <uses-permission android:name="android.permission.INTERNET" />를 위쪽에 선언해준다.

 

3.2

activity_main.xml에 카카오링크를 연결하는 버튼을 만든다면 다음 코드와 같이 <activity android:name=".MainActivity> 부분에 다음의 소스코드를 붙혀 넣는다.

만약에 메인페이지가 아닌 다른 페이지에 카카오링크 버튼을 만든다면 해당 하는 페이지의 java가 선언되어있는 부분에 붙혀 넣으면 된다.

 <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>

 

3.3 meta 데이터는 알아 보기 쉽게 모든 application 태그가 닫히기 직전에 선언해준다. 만약에 페이지가 여러개 라고 해도 그냥 application 태그가 닫히기 바로 위에 붙혀도 오류가 나지 않는다.

  <meta-data

            android:name="com.kakao.sdk.AppKey"

            android:value="@string/kakao_app_key" />

 

3.4 전체 AndroidMainfest.xml 코드

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?xml version="1.0" encoding="utf-8"?>
    package="com.example.myapplication">
 
 
    <uses-permission android:name="android.permission.INTERNET" />
 
    <application
        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/AppTheme">
        <activity android:name=".MainActivity">
            <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>
        </activity>
 
        <meta-data
            android:name="com.kakao.sdk.AppKey"
            android:value="@string/kakao_app_key" />
    </application>
 
</manifest>
 
s

 

4. 키해시 등록

카카오 링크 정책이 바뀌어서 키 해쉬값을 필수적으로 입력해주어야한다.

내애플리케이션 > (해당 애플리케이션 선택) > 설정 > 일반 에서 키해시값을 입력해주어야 한다.

출처:  Kakao Develepers

키해시를 알아내는 방법은 여러개가 있지만 제일 간단한 방법을 소개하고자 한다.

헷갈리지 않게 새로운 안드로이드 프로젝트를 아무거나 생성한  Mainactivity.java에 다음 소스코드를 붙혀넣는다.

 

Mainactivity.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package com.example.myapplication;
 
 
 
 
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
 
public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getHashKey();
    }
    private void getHashKey(){
        PackageInfo packageInfo = null;
        try {
            packageInfo = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        if (packageInfo == null)
            Log.e("KeyHash""KeyHash:null");
 
        for (Signature signature : packageInfo.signatures) {
            try {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                Log.d("KeyHash", Base64.encodeToString(md.digest(), Base64.DEFAULT));
            } catch (NoSuchAlgorithmException e) {
                Log.e("KeyHash""Unable to get MessageDigest. signature=" + signature, e);
            }
        }
    }
}
 
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

이후 Android studio의 아래쪽에 logcat 부분에서 ctrl+f 를 누른후 KeyHash를 입력해서 찾으면 KeyHash값을 구할 수 있다.

 

 

Step2. Gradle 수정하기.

1. build.gradle(Project) 수정하기

build.gradle(Project:My application)에 해당 코드를 추가한다.

1
2
3
4
5
6
subprojects {
    repositories {
        mavenCentral()
    }
}
 
 

 

2. build.gradle(Module: app)에 해당 코드를 추가한다.

1
2
3
dependencies {
}
 
 

 

3. gradle.properties에 해당 코드를 추가한다.

1
2
#KAKAO_SDK_VERSION=1.1.28
KAKAO_SDK_VERSION=1.12.0
 

 

Step3. 카카오링크 버튼 만들기

버튼을 눌렀을때 카카오링크가 전송 될 수 있도록 xml 파일에 버튼을 만들어준다.

원하는 xml파일에 9번라인부터 14번라인까지 붙혀넣으면 된다.

 

원하는xml파일.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    
    <Button
            android:id="@+id/share_lit"
            android:layout_width="150dp"
            android:layout_height="70dp"
            android:onClick="btnClick"
            android:text="카카오톡 공유하기" />
    
</LinearLayout>
 

여기서 중요한 것은 android:onClick="btnClick"

해당 명령어를 통해서 버튼을 클릭하면 해당 xml파일의 java파일에서 btnClick함수를 실행한다.

xml 코드 결과화면

 

 

Step4. 버튼을 만든 xml에 해당하는 java파일 수정

4.1 import 헤더

카카오 링크 ver1과 카카오링크 ver2의 import가 다르기 때문에 잘 확인해야한다.

 

만약 FeedTemplate이나 LinkObect등에서 빨간줄이 쳐진다면 kakao api에 제대로 연결되지 않은것임으로 앞에 과정에서 오류가 있는 것이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package com.example.myapplication;
 
 
 
import com.example.myapplication.R;
 
 
 
public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
 
 
    public void btnClick(View view){
 
        FeedTemplate params = FeedTemplate
                .newBuilder(ContentObject.newBuilder("동행_지하철어플리케이션",
                        LinkObject.newBuilder().setWebUrl("https://developers.kakao.com")
                                .setMobileWebUrl("https://developers.kakao.com").build())
                        .setDescrption("목적지에 후 도착합니다.")
                        .build())
                .addButton(new ButtonObject("웹에서 보기", LinkObject.newBuilder().setWebUrl("https://developers.kakao.com").setMobileWebUrl("https://developers.kakao.com").build()))
                .addButton(new ButtonObject("앱에서 보기", LinkObject.newBuilder()
                        .setWebUrl("https://developers.kakao.com")
                        .setMobileWebUrl("https://developers.kakao.com")
                        .setAndroidExecutionParams("key1=value1")
                        .setIosExecutionParams("key1=value1")
                        .build()))
                .build();
 
        Map<StringString> serverCallbackArgs = new HashMap<StringString>();
        serverCallbackArgs.put("user_id""${current_user_id}");
        serverCallbackArgs.put("product_id""${shared_product_id}");
 
 
        KakaoLinkService.getInstance().sendDefault(this, params, new ResponseCallback <KakaoLinkResponse>() {
            @Override
            public void onFailure(ErrorResult errorResult) {}
 
            @Override
            public void onSuccess(KakaoLinkResponse result) {
            }
        });
 
    }
}
 
 
 
카카오링크 결과화면

카카오링크가 실행됐을때 결과화면은 다음과 같이 나온다.  

 

plus. 동적 메시지 만들기

위의 메시지처럼 변수값을 이용해서 동적인 카카오링크를 만들어보자

 

1. 변수 선언 하기

btnClick 안에 사용하려는 변수를 선언한다. setDesrption에는 string 형태만 들어 갈 수 있음으로 만약 숫자 형식의 변수라면 다음과 같이 string 형식으로 바꾸어줘야한다.

 

여기서 routeStntime은 해당 java파일에서 시간 값을 저장해 놓은 숫자형 변수이다.

1
2
3
  public void btnClick(View view){
 
        String timestring = getIntent().getStringExtra("routeStntime");
 

 

2. setDescrption 수정하기

setDesrcption 부분에 위에 선언한 string변수를 문자들과 +로 연결하여 사용한다.

1
.setDescrption("목적지에 " + timestring + " 후 도착예정입니다.")
 
 
해당 과정을 처음부터 끝까지 차근차근 따라한다면 카카오링크를 구현하는데 큰 어려움은 없을 것이다.
 
 
 
 

Kakao Developers_

더 나은 세상을 꿈꾸고 그것을 현실로 만드는 이를 위하여 카카오에서 앱 개발 플랫폼 서비스를 시작합니다.

developers.kakao.com

 

오류나 피드백에 대한 댓글은 항상 환영입니다. ^~^