유니티에서 sns로 데이터보내기(공유하기)

2021. 4. 21. 12:36개발/유니티

void Share()
{
    Texture2D tex = 공유하고자하는 이미지
    string filePath = Path.Combine(Application.temporaryCachePath, "shared_img.png");
    File.WriteAllBytes(filePath, tex.EncodeToPNG());
    
    Destroy(tex);
    
    //여기엔 sns에 전송할 각각의 텍스트 정보를 적으면 된다.
    string subject = "";
    string title = "";
    string message = "";
    
    AndroidJavaClass jc = new AndroidJavaClass("android.content.Intent");
    AndroidJavaObject jo = new AndroidJavaObject("android.content.Intent");
    
    jo.Call<AndroidJavaObject>("setAction", jc.GetStatic<string>("ACTION_SEND"));
    jo.Call<AndroidJavaObject>("setType", "image/*");
    jo.Call<AndroidJavaObject>("putExtra", jc.GetStatic<string>("EXTRA_SUBJECT"), subject);
    jo.Call<AndroidJavaObject>("putExtra", jc.GetStatic<string>("EXTRA_TITLE"), title);
    jo.Call<AndroidJavaObject>("putExtra", jc.GetStatic<string>("EXTRA_TEXT"), message);
    
    AndroidJavaClass uc = new AndroidJavaClass("android.net.Uri")
    AndroidJavaObject fo = new AndroidJavaObject("java.io.File", filePath);
    AndroidJavaObject uo = uc.CallStatic<AndroidJavaObject>("fromFile", fo);
    
    //여기선 원래 우선 경로가 정확한지 검증해주는게 필요하지만 그냥 패스
    jo.Call<AndroidJavaObject>("putExtra", jc.GetStatic<string>("EXTRA_STREAM"), uo);
    
    AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    AndroidJavaObject currentActivity = unity.GetStatic<AndroidJavaObject>("currentActivity");
    currentActivity.Call("startActivity", jo);
}

간단하게 AndroidJavaClass 혹은 AndroidJavaObject를 이용해 구현할 수 있다.

다만, 안드로이드 11부터 각각의 앱 저장소개념이 분리되는바람에

앨범에 접근하기 위해선 별도의 네이티브 구현이 필요하다.

 

하지만 앱 자체 영역에서는 큰 문제없이 구현 가능하다.

 

 

 

 

 

공유하기위해 이렇게나 코드작성을 해야하고 성능도 저하되는 자바클래스나 오브젝트를 쓰는게 싫다면

 

https://github.com/yasirkula/UnityNativeShare

 

yasirkula/UnityNativeShare

A Unity plugin to natively share files (images, videos, documents, etc.) and/or plain text on Android & iOS - yasirkula/UnityNativeShare

github.com

 

이 아저씨의 오픈소스를 활용하는 것도 좋다.

ios도 지원하고 무엇보다도

 

new NativeShare().AddFile( filePath )
		.SetSubject( "Subject goes here" ).SetText( "Hello world!" ).SetUrl( "https://github.com/yasirkula/UnityNativeShare" )
		.SetCallback( ( result, shareTarget ) => Debug.Log( "Share result: " + result + ", selected app: " + shareTarget ) )
		.Share();

 

위의 긴 코드를 쓸 필요없이 이렇게나 간단한 인터페이스를 제공해준다!