Ringster's Techblog

Tech, Mobile, Internet

KaKaoLink를 이용하여 앱에서 카카오톡 통해 메시지 전송하기

with one comment

요즘 많은 앱들이 KaKaoTalk api를 이용하여 카카오톡과 연동한다.
여기서는 카카오톡 api를 이용하여 카카오톡을 통해 메시지 전송하는 법을 알아보겠다.
자세한 설명은 KakaoTalk developers(여기)를 참조하기로 하자.

먼저 https://developers.kakao.com/apps/new 를 통해 카카오톡에서 사용할 앱을 생성하고 네이티브 앱키를 발급받는다.
설정 → 플랫폼 추가에 앱이나 웹 정보를 추가한다. 해당 정보가 비어있으면 앱/웹으로 이동 버튼을 포함한 카카오 링크가 전송되지 않는다.


1. 카카오톡 sdk 추가하기 및 설정

카카오톡 sdk를 다운로드 받아 이클립스에 추가한다. sdk에서 라이브러리 관련 에러가 생기면 Google play service라이브러리 경로를 새로 지정해 준다.

샘플로 시작할 새로운 프로젝트를 만들고, 카카오톡 sdk 라이브러리를 추가한다.
카카오톡 페이지에서 발급받은 네이티브 앱키를 넣는다.
스킴 부분은 kakao는 그대로 두고 뒷부분만 앱키로 교체하고, kakaolink_host는 그대로 둔다.

<resources>

    <string name="kakao_app_key">발급받은 appkey</string>
    <string name="kakao_scheme">kakao발급받은 appkey</string>
    <string name="kakaolink_host">kakaolink</string>

</resources>

이후 메니페스트를 수정한다. 인텐트 필터를 추가하고, 메타 데이터를 추가한다.
수정된 메니페스트는 다음과 같다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.kakaosample"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="9"
        android:targetSdkVersion="19" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.kakaosample.MainActivity"
            android:label="@string/app_name" >
            <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>
        </activity>

        <meta-data
	        android:name="com.kakao.sdk.AppKey" android:value="@string/kakao_app_key" />
    </application>

</manifest>

이제 메인 레이아웃을 작성해보자. 메시지를 입력받을 EditText하나와 링크를 전송할 버튼을 하나 생성하자.

<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"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.kakaosample.MainActivity" >

    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/test" />

    <Button
        android:id="@+id/btnSend"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="전송" />

</LinearLayout>

2. KakaoLink 이용하여 텍스트 메시지 보내기

KakaoLink를 사용하는 방법은 크게 3단계로 나뉜다.

1) KakaoLink 객체 얻기

final KakaoLink kakaoLink = KakaoLink.getKakaoLink(Context c);

2) KakaoTalkLinkMessageBuilder로 메시지 스트링 생성하기

먼저 다음과 같이 KakaoTalkLinkMessageBuilder를 생성한다.

kakaoTalkLinkMessageBuilder = kakaoLink.createKakaoTalkLinkMessageBuilder();

그 이후 KakaoTalkLinkMessageBuilder를 통해 텍스트를 추가한다.

kakaoTalkLinkMessageBuilder.addText(String str);

3) 생성한 메시지를 sendMessage 메소드를 통해 전송하기

다음 메소드를 통해 메시지를 전송한다.

kakaoLink.sendMessage(String msg, context c);

다음은 위의 방법을 종합하여 완성된 코드이다.


public class MainActivity extends ActionBarActivity {

    private KakaoLink kakaoLink;
    private KakaoTalkLinkMessageBuilder kakaoTalkLinkMessageBuilder;
    private EditText mEditText;
    private Button mSendBtn;

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

		try {
			kakaoLink = KakaoLink.getKakaoLink(getApplicationContext());
			kakaoTalkLinkMessageBuilder = kakaoLink.createKakaoTalkLinkMessageBuilder();
		} catch (KakaoParameterException e) {
			e.getMessage();
		}

		mEditText = (EditText) findViewById(R.id.editText);
		mSendBtn = (Button) findViewById(R.id.btnSend);
		mSendBtn.setOnClickListener(new Button.OnClickListener() {
			@Override
			public void onClick(View v) {
				sendLink();
			}
		});
	}

	private void sendLink(){
		try {
			kakaoTalkLinkMessageBuilder.addText(mEditText.getText().toString());
			final String linkContents = kakaoTalkLinkMessageBuilder.build();
			kakaoLink.sendMessage(linkContents, this);
		} catch (KakaoParameterException e) {
			e.getMessage();
		}
	}
}

EditText에 메시지를 입력하고 전송버튼을 누르면 카카오톡이 실행되며 메시지가 잘 전달된다.

3. 이미지를 포함한 메시지 보내기

이미지를 포함한 메시지 보내기도 위와 동일한 순서를 따른다. 이미 만들어놓은 코드를 수정하여 이미지도 포함시켜 보자.

public class MainActivity extends ActionBarActivity {

    private KakaoLink kakaoLink;
    private KakaoTalkLinkMessageBuilder kakaoTalkLinkMessageBuilder;
    private final String imgSrcLink = "https://www.google.co.kr/images/srpr/logo11w.png";
    private EditText mEditText;
    private Button mSendBtn;

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

		try {
			kakaoLink = KakaoLink.getKakaoLink(getApplicationContext());
			kakaoTalkLinkMessageBuilder = kakaoLink.createKakaoTalkLinkMessageBuilder();
		} catch (KakaoParameterException e) {
			e.getMessage();
		}

		mEditText = (EditText) findViewById(R.id.editText);
		mSendBtn = (Button) findViewById(R.id.btnSend);
		mSendBtn.setOnClickListener(new Button.OnClickListener() {
			@Override
			public void onClick(View v) {
				sendLink(imgSrcLink);
			}
		});
	}

	private void sendLink(String imgSrcLink){
		try {
			kakaoTalkLinkMessageBuilder.addText(mEditText.getText().toString());
			kakaoTalkLinkMessageBuilder.addImage(imgSrcLink, 269, 95);
			final String linkContents = kakaoTalkLinkMessageBuilder.build();
			kakaoLink.sendMessage(linkContents, this);
		} catch (KakaoParameterException e) {
			e.getMessage();
		}
	}
}

kakaolink_sample   스크린샷 2014-12-10 오후 6.10.24

정상적으로 이미지 및 텍스트가 전송되었다.

4. 앱/웹으로 연결 버튼 포함한 메시지 보내기

링크를 전송하거나, 앱/웹으로 연결 버튼 추가 또한 간단하고, 위와 동일한 순서를 따른다.
다만 서두에서 말했듯이 카카오톡 홈페이지에서 웹/앱 플랫폼이 추가되있지 않다면 전송에 실패하게 된다.
앱/웹 연결 버튼 또한 추가해보자.
다른 부분은 모두 동일하고 sendLink 메소드에서 appbutton이나 webbutton을 추가하는 메소드를 호출하면 된다.
인자를 전달할 수도 있는데 자세한 것은 카카오톡 개발자 페이지를 참고하자.


private void sendLink(String imgSrcLink){
	try {
		kakaoTalkLinkMessageBuilder.addText(mEditText.getText().toString());
		kakaoTalkLinkMessageBuilder.addImage(imgSrcLink, 269, 95);
		kakaoTalkLinkMessageBuilder.addAppButton("앱으로 이동");
//		kakaoTalkLinkMessageBuilder.addWebButton("웹으로 이동");
		final String linkContents = kakaoTalkLinkMessageBuilder.build();
		kakaoLink.sendMessage(linkContents, this);
	} catch (KakaoParameterException e) {
		e.getMessage();
	}
}

kakaolink_applink

앱으로 이동 버튼과 아이콘까지 추가되었다. 아이콘은 카카오톡 홈페이지에서 등록해놓은 앱의 이미지가 출력된다.
링크를 선택할 경우 웹버튼의 경우 웹사이트로 앱 버튼의 경우 앱이 설치되었을 때는 앱으로, 그렇지 않은 경우는 마켓으로 연결된다.

Advertisements

Written by Ringster

2014/12/10 , 시간: 6:27 오후

One Response

Subscribe to comments with RSS.

  1. 성모의마을 가족 정제욱이예요 직원들이 나쁘일하고 한가족을 보고 나쁘일한다고 합니다 휴대폰을 고장나도록 하여습니다

    정제욱

    2016/11/25 at 2:51 오후


답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중

Jay Jin, Programmer&Designer

Fork my brain because I'm ready to commit

쉐어보드

쉐어메이트에 관한 모든 것

jamesjungkuelee's biotech story

Biotech, entrepreneur, life

Communications as Ikor

기업 위기관리의 모든 것

Charles Pyo Ventures

시도와 실패, 성장의 기록. 2막에서도 계속되는 모험들.

VentureBeat

News About Tech, Money and Innovation

Open API, Cloud, DevOps 와 eBook

Open API, eBook, Cloud, DevOps

Economics of almost everything

Tech, Mobile, Internet

cylee

Tech, Mobile, Internet

gorekun.log

고어쿤로그

Google Developers Korea 블로그

Tech, Mobile, Internet

Android Developers Blog

Tech, Mobile, Internet

최피디의 앱스 개발기

기술, 앱스, SNS, 창업

D2 Blog

Tech, Mobile, Internet

All of Software

Tech, Mobile, Internet

'Startup's Story Platform’

'Startup's Story Platform’

%d 블로거가 이것을 좋아합니다: