티스토리 뷰

일단 유니티 자체적으로 국가코드를 불러올 수 있는 방법은 없는 것 같아요.

우회적인 방법으로 언어 기반으로 간접적으로 알 수 있지만 신뢰도가 낮지요.

그래서 좀 더 신뢰도 높은 정보를 가져오려면 어떻게 해야하는지 정리하는 글입니다.

 

------------------

1. 유니티에서 AAR 혹은 JAR 사용하기

 

유니티 메뉴얼에서 AAR플러그인 관련 문서입니다.

https://docs.unity3d.com/kr/2017.4/Manual/AndroidAARPlugins.html

 

AAR 플러그인과 Android 라이브러리 - Unity 매뉴얼

Android Archive(AAR) 플러그인은 컴파일된 Java, 네이티브 (C/C++)코드, 리소스 또는 Android 매니페스트가 포함된 번들입니다. .aar 파일 자체는 모든 에셋을 포함하는 zip 아카이브입니다. 자세한 내용은 Android 라이브러리 생성에 대한 Android 개발자 문서를 참조하십시오.

docs.unity3d.com

다음은 JAR플러그인임.

https://docs.unity3d.com/kr/2017.4/Manual/AndroidJARPlugins.html

 

JAR 플러그인 - Unity 매뉴얼

JAR(Java Archive) 플러그인은 주로 Android OS와의 상호 작용을 활성화하거나 C# 스크립트에서 Java로 작성된 메서드를 호출하는 데 사용됩니다.

docs.unity3d.com

 

여기서 가져와서 해야됨.

네이티브 플러그인을 사용하지 않는 방법도 있겠지만

권한관련 이슈때문에 지양하고 있는 상태. 

현재 PHONE_STATE_READ 권한을 쓰지 않고서 해결하고 싶다!

 

암튼 여기서 부터 시작해야함.

 

그럴려면 안드로이드 스튜디오에서 플러그인 만드는 것부터 알아야할 것 같음.

 

2. 플러그인 만들기.

2.0. 뻘짓

 

구글링을 통해 이것저것 살펴보았으나 여러가지 호환의 문제와 지식의 문제 때문에 제대로 적용하지 못하는 상태... 눈물을 머금고 뻘짓 후 괜찮은 참고자료를 찾음.

 

2.1. aar 튜토리얼

https://medium.com/jasons-devblog/creating-an-aar-plugin-for-unity-31ed219cb7f5

 

Creating an AAR plugin for Unity

Prerequisites: Unity, Android Studio

medium.com

여기서 참고해서 만들기로 함.

 

일단 Toast 메세지를 띄우는 것을 먼저 성공 시킨 다음에 국가 코드 찾기 하려고 함.

 

여기서 꽤 오랜시간 동안 헤맸는데 안드로이드 리졸브 때문에 안된 듯... 

내 프로젝트 안에 안드로이드 플러그인이 여러가지 있는데 (파이어베이스나 gpgs라든지...)

이런것들이 서로 꼬여서 그런지 내가 만든 플러그인이 잘 적용이 안됐다.

그러다 Force Resolve 하니까 제대로 동작 (Force가 아니었을 땐 잘 안되었음)

Toast 메세지 띄우는 것을 성공하였다!

 

이게 토스트 메시지다.

링크 안에 해당 내용이 그대로 있으니 참조 하시길...

이제 국가 코드 얻어오는 것을 하면 된다!

 

2.2. 안드로이드에서 국가 코드 얻기.

 

권한 이슈 때문에 단말기 유심의 정보를 얻어오는 것을 해야한다.

 

나의 네이티브 플러그인에서의 코드는 다음과 같이 했다.

 

package com.my.secondplugin;

import android.content.Context;
import android.telephony.TelephonyManager;
import android.widget.Toast;

import com.unity3d.player.UnityPlayer;

public class CountryCode{
    public static Context unityContext;
    public static void SetContext(Context context){
        unityContext = context;
    }

    public static void GetCountryCode(){
        String countryCode;
        TelephonyManager telephony =  (TelephonyManager) unityContext.getSystemService(Context.TELEPHONY_SERVICE);
        countryCode = telephony.getNetworkCountryIso();

        UnityPlayer.UnitySendMessage("AndroidPluginReceiver", "ReceiveCountryCode", countryCode);
    }
    public static void SendToast(String message){

        Toast.makeText(unityContext, message, Toast.LENGTH_LONG).show();
    }
}

 

유니티 내에서 CallStatic으로 이 플러그인의 GetCountryCode를 호출하면 플러그인이 유니티에 접근해서 메서드를 부르는 방식이다.

 

여기에선 플러그인이 "AndroidPluginReceiver" 라는 게임 오브젝트에 접근하고 (씬에 꼭 만들어놔야한다.)

해당 오브젝트 안에 어싸인된 스크립트에서 ReceiveCountryCode 메서드에 string 파라미터를 들고 호출하게끔 만들었다.

 

그런데 이 과정에서 여러가지 이슈가 많이 발생해서 어려움이 좀 있긴했다.

 

이 플러그인은 usim이 없는 기기에서는 제대로 작동하지 않는다.

따라서 나도 정보를 못 받았을 경우에는 시스템랭귀지로 접근해서 코드를 가져오는 것으로 하였다... 

ㅠㅠ 역시 완벽하게 되기는 힘들구만.

댓글
최근에 올라온 글
Total
Today
Yesterday
TAG
more
«   2024/07   »
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