Unity3D 안드로이드 카카오 링크 연동하기

 지난 7월초에 개발했던 것을 이제야 정리해봅니다. 당시 일정이 딱히 정해진 일이 없어서 혼자 재미삼아 유니티3D에 카카오링크 기능중 URL 링크 기능 연동해봤던 것을 정리해봅니다. 카카오톡이 아닌 카카오링크 open api입니다. 혼동이 없으시기 바랍니다.

 간단히 카카오링크라는 것은 외부 앱이나 모바일웹에서 카카오톡이나 카카오스토리로 메시지와 링크를 보낼 수 있는 오픈 API(Open API)라고 합니다.


1. 카카오링크 API 설치

 GitHub에서 소스로 제공하고 있는 카카오링크 API를 다운로드 받아 적절한 위치에 설치합니다.


2. 카카오링크 안드로이드 플러그인 프로젝트 생성

 먼저 유니티3D 안드로이드 플러그인 프로젝트를 만듭니다. 저는 그림과 같이 com.wwforever.kakaoopenapi 패키지명으로 만들었습니다.

 다음으로 카카오링크 소스를 가져오기전에 간단히 관련 패키지를 만듭니다. 전 com.example.link라고 만들었습니다.

 위에서 만든 패키지에 마우스 우클릭 -> Import 후 General/File System을 선택합니다. 프로젝트가 아닌 소스 2개만 가져올 것이라 이렇게 해줍니다.

 설치한 카카오링크 폴더에서 KakaoLink.java와 StoryLink.java를 가져옵니다.

 유니티3D 안드로이드 플러그인 기본형 작업이 마무리된 상태입니다. 이제 아래의 소스 작업을 진행하면 됩니다.


3. 카카오링크 URL 링크 연동

//MainActivity.java
package com.wwforever.kakaoopenapi;

import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
import android.util.Log;

import com.example.link.KakaoLink;
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;

public class MainActivity extends UnityPlayerActivity {
private final String LOG_TAG = "KAKAOLINKTEST";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}

protected void onPause() {
Log.d(LOG_TAG, "onPause");
super.onPause();
}

protected void onResume() {
Log.d(LOG_TAG, "onResume");
super.onResume();
}

public void SendUrlLink_U(final String strUrl, final String strMessage) {
final KakaoLink kakaoLink = KakaoLink.getLink(UnityPlayer.currentActivity);
if(kakaoLink.isAvailableIntent() == false) {
Log.d(LOG_TAG, "Not installed KakoTalk");
return;
}

runOnUiThread(new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub
try {
kakaoLink.openKakaoLink(UnityPlayer.currentActivity, strUrl, strMessage
, getPackageName()
, getPackageManager().getPackageInfo(getPackageName(), 0).versionName
, "Kakao OpenAPI TestApp"
, "UTF-8");
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
}

 먼저 안드로이드쪽 MainActivity.java 부분입니다. 유니티로부터 간단히 url과 메시지를 받아서 카카오링크를 호출하고 있습니다.


//PluginKakaoLinkManager.cs
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
using System.Configuration;

public class PluginKakaoLinkManager : MonoBehaviour
{
static PluginKakaoLinkManager _instance;
private AndroidJavaObject curActivity;
public string strLog = "Unity3D Android KakaoLink Integration Sample";
public static PluginKakaoLinkManager GetInstance()
{
if( _instance == null )
{
_instance = new GameObject("PluginKakaoLinkManager").AddComponent<PluginKakaoLinkManager>();
}

return _instance;
}

void Awake()
{
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
curActivity = jc.GetStatic<AndroidJavaObject>("currentActivity");
}

public void SendUrlLink(string strUrl, string strMessage)
{
curActivity.Call("SendUrlLink_U", strUrl, strMessage);
}

private void SetLog(string strLog)
{
this.strLog = strLog;
}
}

 PluginKakaoLinkManager 컴포넌트입니다.

//TestGUI.cs
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class TestGUI : MonoBehaviour
{
private string strMessage = string.Empty;
// Update is called once per frame
void Update ()
{
if (Application.platform == RuntimePlatform.Android)
        {

            if (Input.GetKey(KeyCode.Escape))
            {
                Application.Quit();
                return;
            }
}
}

void OnGUI()
{
float fYpos = 0;
GUI.Label(new Rect(0, fYpos, 400, 100), PluginKakaoLinkManager.GetInstance().strLog);

fYpos += 50;
this.strMessage = GUI.TextField(new Rect(0, fYpos, 400, 50), this.strMessage);

fYpos += 50;
if (GUI.Button (new Rect(0, fYpos, 100, 50), "SendUrlLink" ) == true)
{
string strUrl = "http://link.kakao.com/?test-android-app";
//string strUrl = "http://westwoodforever.blogspot.com";

PluginKakaoLinkManager.GetInstance().SendUrlLink(strUrl, this.strMessage);
}
}
}

 TestGUI 컴포넌트에서는 간단히 메시지를 입력받아 url과 함께 보내줍니다.

 이것으로 준비과정은 다구요 플러그인 폴더에 따로 AndroidManifest.xml은 수정할 것이 없이 기본형을 넣어주면 됩니다.

 실행해보면 위와 같습니다. 적당히 타이핑을 해서 SendUrlLink 버튼을 눌러주면,

 카톡 친구 목록창이 뜬 후 링크를 받을 친구를 선택해주면 위와같이 메시지 내용과 url이 전달된 것을 확인할 수 있습니다. 해당 스샷은 제가 PC 버전 카카오톡에서 찍은거라 밑에 '모바일 카카오톡에서 확인해주세요.' 가 더 추가되어있네요.

 나머지 정리하지 않은 앱 링크 전달 기능도 쉽게 할 수 있을 것 같네요.

이 블로그의 인기 게시물

CMake Windows에 설치하기

Unity3D 안드로이드 Keystore 생성하기

Unity3D iOS Plugin 만들어 연동하기