woong's

Kakao App 연동 & 링크 하기 본문

Develop/Android

Kakao App 연동 & 링크 하기

dlsdnd345 2016. 2. 13. 23:13

Kakao App 연동하기


URL 링크 전달

외부 앱, 모바일웹에서 카카오톡 친구들에게 URL 링크 혹은 메세지(TEXT)를 전송할 수 있습니다.

  • 지원 OS: iOS, Android, 모바일웹, Blackberry 추후 지원 예정

App 링크 전달

외부 앱, 모바일웹에서 카카오톡 친구들에게 해당 앱으로 바로 연결 할수 있는 링크를 전송할 수 있습니다. 링크를 받는 사람이 해당 앱을 설치하지 않은 경우 설치마켓으로 연결 할 수 있으며, 호환되지 않는 OS의 경우 URL 링크로 대체하여 전달할 수 있습니다.

  • 지원 OS: iOS, Android, 모바일웹, Blackberry 추후 지원 예정
  • 지원 설치마켓: Google play(Android market), App store


URL 링크 전달


Custom URL Scheme


kakaolink://sendurl?msg=[message]&url=[url]

&appid=[appid]&appver=[appver]&type=[type]&appname=[appname]&apiver=[apiver]

파라미터 설명


msg (String)      : 유저에게 전달될 메세지 내용(UTF-8)

url (String)      : 유저에게 전달될 메세지에 포함되는 링크 url(모바일웹)

appid (String)    : App의 bundle id

appver (String)   : 3rd party app의 버전

appname (String)  : 3rd party app의 정확한 이름

type (String)     : 카카오링크 타입(link, 고정값)

apiver (String)   : 카카오링크 API 버전(2.0, 고정값)


Custom URL Scheme


kakaolink://sendurl?msg=[message]&url=[url]

&appid=[appid]&appver=[appver]&type=[type]&appname=[appname]&apiver=[apiver]&metainfo=[metainfo]

파라미터 설명


msg (String)      : 유저에게 전달될 메세지 내용(UTF-8)

url (String)      : 유저에게 전달될 메세지에 포함되는 링크 url(모바일웹)

appid (String)    : App의 bundle id

appver (String)   : 3rd party app의 버전메ㅔ

appname (String)  : 3rd party app의 정확한 이름

type (String)     : 카카오링크 타입(app, 고정값)

apiver (String)   : 카카오링크 API 버전(2.0, 고정값)

metainfo (String) : 3rd party app을 구동시키기 위한 meta 정보

                    (JSONObject의 String Array 형식으로 지원)


Activity 를 작성하기전에 kakao 에서 제공하는 KakaoLink.java 파일을 해당 패키지에 옮겨 넣는다. 해당파일은 첨부파일을 열어보면 확인할수 있다.

 

Colored By Color Scripter

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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
package com.example.kakao_test;
 
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Map;
 
import android.app.Activity;
import android.app.AlertDialog;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
import android.view.View;
 
public class MainActivity extends Activity {
 
    private final String encoding = "UTF-8";
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
    }
 
    public void sendUrlLink(View v) throws NameNotFoundException {
        // Recommended: Use application context for parameter.
        KakaoLink kakaoLink = KakaoLink.getLink(getApplicationContext());
 
        // check, intent is available.
        if (!kakaoLink.isAvailableIntent()) {
            alert("Not installed KakaoTalk.");
            return;
        }
 
        /**
         * @param activity
         * @param url : 유저에게 전달될 메세지에 포함되는 링크 url(모바일웹)
         * @param message : 유저에게 전달될 메세지 내용(UTF-8)
         * @param appId : App bundle id 또는 package id (예: com.company.app)정확히 입력하지 않을 경우 이용이 제한될 수 있습니다.
         * @param appVer : 3rd app의 버전
         * @param appName : 3rd app의 정확한 이름
         * @param encoding
         */
        kakaoLink.openKakaoLink(this,
                "http://www.naver.com"// url 들어갈 자리(유저에게 전달될 메세지에 포함되는 링크 url(모바일웹))
                "내용들어갈 자리"// 유저에게 전달될 메세지 내용(UTF-8)
                getPackageName(),
                getPackageManager().getPackageInfo(getPackageName(), 0).versionName,
                "제목들어갈 자리",
                encoding);
    }
 
    public void sendAppData(View v) throws NameNotFoundException {
        ArrayList<Map<StringString>> metaInfoArray = new ArrayList<Map<StringString>>();
 
        // If application is support Android platform.
        Map<StringString> metaInfoAndroid = new Hashtable<StringString>(1);
        metaInfoAndroid.put("os""android");//(3rd app이 지원하는 OS Platform)
        metaInfoAndroid.put("devicetype""phone");
        metaInfoAndroid.put("installurl""market://details?id=com.kakao.talk"); //설치 Url(3rd app의 Goole Play나 iTunes의 설치 url)
        metaInfoAndroid.put("executeurl""kakaoLinkTest://starActivity"); // 실행 url(app을 구동시키기 위한 url)
 
        // add to array
        metaInfoArray.add(metaInfoAndroid);
 
        // Recommended: Use application context for parameter. 
        KakaoLink kakaoLink = KakaoLink.getLink(getApplicationContext());
 
        // check, intent is available.
        if (!kakaoLink.isAvailableIntent()) {
            alert("Not installed KakaoTalk.");
            return;
        }
 
        /**
         * @param activity
         * @param url : 유저에게 전달될 메세지에 포함되는 링크 url(모바일웹)
         * @param message : 유저에게 전달될 메세지 내용(UTF-8)
         * @param appId : App bundle id 또는 package id (예: com.company.app)정확히 입력하지 않을 경우 이용이 제한될 수 있습니다.
         * @param appVer : 3rd app의 버전
         * @param appName : 3rd app의 정확한 이름
         * @param encoding
         * @param metaInfoArray
         */
        kakaoLink.openKakaoAppLink(
                this,
                "http://link.kakao.com/?test-android-app"// 카카오톡 앱 연동 해주는 url
                "내용이 들어갈 자리",
                getPackageName(),
                getPackageManager().getPackageInfo(getPackageName(), 0).versionName,
                "제목이 들어갈 자리",
                encoding,
                metaInfoArray);
    }
 
    private void alert(String message) {
        new AlertDialog.Builder(this)
                .setIcon(android.R.drawable.ic_dialog_alert)
                .setTitle(R.string.app_name)
                .setMessage(message)
                .setPositiveButton(android.R.string.ok, null)
                .create().show();
    }
}
 

 

 

 

 

여기서 하나 확인하고 넘어가야 할것이 있다. 

sendAppData 에서 installurl , executeurl 이다 .

 

installurl 은 어플리케이션이 설치 안되있을때 다운받을 마켓을 경로를 지정해 주면된다.

executeurl 는 어플리케이션이 설치 되어있을때 실행시켜줄 어플리케이션이다.

이것은 실행시켜줄 어플리케이션 매니페스트에 설정을 해주어야 한다.


이렇게 하고 카카오톡 연동을 하면 어플이 깔려있을 경우에 해당 어플이 실행되는 것을 볼수 있다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        <activity
            android:name="com.iris.activity.MainActivity"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.NoTitleBar" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <intent-filter>
                <data
                    android:host="iris.com"
                    android:scheme="iris" />
 
                <action android:name="android.intent.action.VIEW" />
 
                <category android:name="android.intent.category.BROWSABLE" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

 

 

 


Comments