unity inapp 결제

유니티 2019. 4. 29. 22:40

유니티 인앱 결제는 android, iOS 모두 연동을 해 본 경험이 있다면, 아주 쉽게 구현이 가능합니다. 물론 몰라도 구현이 가능하지만, 중간 중간 생기는 문제가 발생할 경우, 이것을 해결하기 조금 힘들 수 있습니다.

이 문서는 플레이 스토어 설정과, iOS 설정은 다루지 않습니다. 선행작업의 링크로 가 선행작업으로 완료해 주시기 바랍니다. 

 

[선행작업]

플레이 스토어 설정 : https://nicgoon.tistory.com/200 .
앱 스토어 설정 : https://nicgoon.tistory.com/205 .

 

[공식문서]

코드리스인앱 : https://docs.unity3d.com/kr/current/Manual/UnityIAPCodelessIAP.html .
유니티 IAP 설정 : https://docs.unity3d.com/kr/current/Manual/UnityIAPSettingUp.html .
유니티 IAP 초기화 : https://docs.unity3d.com/kr/current/Manual/UnityIAPInitialization.html .

 

1. 플레이스토어, 앱스토어 설정확인.

플레이 스토어, 앱스토어를 설정했다면, 이 것을 확인할 필요가 있을 것 입니다. 이 것을 확인할 때는 공식 문서의 코드리스인앱 ( 링크 )으로 테스트 하면 됩니다. 이 것이 잘되면, 코드리스 인앱을 사용해 결제를 구현해도 모두 구현할 수 있지만, 이 문서는 유니티 인앱을 소개하는 페이지 이므로, 아래 계속해서 인앱 구현을 설명하도록 하겠습니다.

 

2. 유니티 인앱 셋팅.

유니티 인앱 설정은 Unity IAP 설정 ( 링크 ) 을 따라 하면됩니다. 주의할 점 조차 없습니다. 다른 참고 문서들에 이 외에 해야 될 것들이 있다고 써 있다면, 과감히 하지 마세요. 딱 이것만 하면됩니다. (이게 단 하나의 주의할 점 입니다.).

 

3. 구글 플레이를 위핸 인앱 매니저 구성.

구글 플레이 초기화를 위해서, 유니티의 초기화 문서 ( 링크 ) 를 보면 됩니다.

구글 상품을 구매하기 위해서는, 앱을 한 번 생성해 알파 혹은 베타 버전으로 등록한 후, 상품을 등록해야 합니다. 등록한 상품들은 아래 페이지에서 확인할 수 있으며, 상품아이디들을 메모해 둡니다.

그리고, IStoreListener 인터페이스를 상속한 클래스를 만들어 생성자에, 상품의 정보와 상품의 이름을 넣은 빌더를 만들어 유니티 인앱을 초기화 하도록 합니다. 빌더는 상품의 아이디와 상품의 종류, 플레이 스토어에서 사용되는 이름들을 넣어 주면되겠습니다.

    public MyIAPManager () {
        var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());



        // 골드 100개.
        builder.AddProduct("gold_100", ProductType.Consumable, new IDs
        {
            {"골드 100개", GooglePlay.Name}
        });

        // 골드 500개.
        builder.AddProduct("gold_500", ProductType.Consumable, new IDs
        {
            {"골드 500개", GooglePlay.Name}
        });

        // 골드 1000개.
        builder.AddProduct("gold_1000", ProductType.Consumable, new IDs
        {
            {"골드 1000개", GooglePlay.Name}
        });

        

        UnityPurchasing.Initialize (this, builder);



    }

 

4. 초기화 성공.

초기화 성공 시에는 컨트롤과 익스텐션을 받을 수 있습니다. 이 중 우리가 필요한 것은 컨트롤 입니다. 컨트롤을 이용해, 상품 구매를 하게 됩니다. 안드로이드, iOS 모두 인앱 결제를 할 때, 지정한 아이디의 상품이 실제 존재하는지 Retrieving 을 하게됩니다. 유니티는 초기화 시 이 작업을 하는데, 그 결과가 각 상품에 들어 있습니다. 그 상품 아이디가 구매가능한 상태인 지 확인하려면 초기화 시 하면 되며, 아래 코드는 초기화 및 그 값들을 확인하는 코드 입니다.

    public void OnInitialized (IStoreController controller, IExtensionProvider extensions)
    {


        this.controller = controller;
        this.extensions = extensions;


        var gold_100 = controller.products.WithID( "gold_100" );
        if( gold_100 != null && gold_100.availableToPurchase )
        {
            Debug.Log("골드 100 구매가 가능합니다.");
        }

        var gold_500 = controller.products.WithID( "gold_500" );
        if( gold_500 != null && gold_500.availableToPurchase )
        {
            Debug.Log("골드 500 구매가 가능합니다.");
        }

        var gold_1000 = controller.products.WithID( "gold_1000" );
        if( gold_1000 != null && gold_1000.availableToPurchase )
        {
            Debug.Log("골드 1000 구매가 가능합니다.");
        }


        Debug.Log("초기화 성공");

    }

 

5. 초기화 실패

초기화 실패 메소드는 아래와 같이 간단히 구현해 주시면됩니다.

    public void OnInitializeFailed (InitializationFailureReason error)
    {

        Debug.Log("초기화 실패");

    }

 

6. 결제 시도.

결제시도는 상품정보를 가지고와 InitiatePurchase 메소드를 구현해 주면됩니다. 아래 코드는 딱히 함수가 필요한 것은 아니고, 컨트롤러를 이용해 구현한 코드를 함수로 묶어 둔 것 입니다.

    public void buy_gold_100()
    {

        Product _100 = controller.products.WithID("gold_100");
        controller.InitiatePurchase( _100 );

    }

 

7. 결제 성공.

결제 성공시에는, 결제가 완료되었을 때, 영수증을 확인할 수 있습니다. 이 영수증 값을 서버로 보내, 서버에서는 이 영수증이 올바른 영수증인지 여부를 테스트할 수 있습니다.

    public PurchaseProcessingResult ProcessPurchase (PurchaseEventArgs e)
    {

        Debug.LogFormat("결제 완료, 구매 영수증 : {0}", e.purchasedProduct.receipt);
        return PurchaseProcessingResult.Complete;

    }

 

8. 결제 실패.

결제 실패시에는, 아래 메소드가 호출됩니다.

    public void OnInitializeFailed (InitializationFailureReason error)
    {
        Debug.Log("초기화 실패");
    }

 

9. iOS.

iOS는 상품 정보만 ConfigurationBuilder 를 만들 때 iOS 관련 값들을 넣어 주면됩니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'유니티' 카테고리의 다른 글

유니티 구글 플레이 연동  (0) 2019.04.29
unity Tapjoy offerwall  (1) 2019.04.29
탭조이 유니티 계정생성하기  (0) 2019.04.28
adpopcorn Unity 연동 - android  (0) 2019.04.28
adpopcorn Unity 연동 - 계정추가 (1/3)  (0) 2019.04.28
Posted by 창업닉군
,

구글 플레이는 복잡하고 탈도 많아 (사실 넣기는 쉬운데, 갑자기 버전업 같은 것 하면 아주 말썽을 부립니다.), 사용하지 않으려 했으나, 탭조이를 쓰려고 하니, 구글 플레이 서비스를 필요로 하는 것 같습니다. 그래서 일단 구현을 해 보려고 하는데, 썩 내키지는 않습니다.

 

[공식문서]

유니티 플레이 서비스 : https://github.com/playgameservices/play-games-plugin-for-unity .

 

[참고사이트]

 

 

[예제사이트]

잠자머 : https://m.blog.naver.com/lyw94k/221290526967 .
너랑나랑개발자이야기 : https://you-rang.tistory.com/158 .

 

 

다음에 계속 이어 쓰도록 하겠습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'유니티' 카테고리의 다른 글

unity inapp 결제  (0) 2019.04.29
unity Tapjoy offerwall  (1) 2019.04.29
탭조이 유니티 계정생성하기  (0) 2019.04.28
adpopcorn Unity 연동 - android  (0) 2019.04.28
adpopcorn Unity 연동 - 계정추가 (1/3)  (0) 2019.04.28
Posted by 창업닉군
,

unity Tapjoy offerwall

유니티 2019. 4. 29. 01:04

유니티 문서를 잠시 봤는데 설명이 장황하고, 처음 해보는 것이라, 정말 복잡했습니다. 하지만, 하나씩 차근차근해 보려고 합니다. 탭조이 계정이 생성되어 있어야 하고, 유니티 앱이 생성되어 있어야 합니다.

 

[선행작업]

탭 조이 계정생성 : https://nicgoon.tistory.com/221 .

 

[공식문서]

 

[참고 사이트]

IDFA / GAID 확인하기 : http://blog.naver.com/PostView.nhn?blogId=wcjpower&logNo=220893826146&categoryNo=23&parentCategoryNo=0 .

 

[오류참고]

구글플레이 최신버전 오류 : https://github.com/playgameservices/play-games-plugin-for-unity/issues/2019 .

 

 

 

1. 앱 등록.

탭조이 사이트로가 탭 조이 로그인을 합니다. 그러면 모네타이즈 기본 지표 사이트로 이동을 합니다.

앱 등록화면이 나오면, Both를 선택해 둘다 등록할 수 있도록하고, 나머지 값들을 잘 입력한 후, 등록하기 버튼을 눌러 주도록 합니다. 아직 앱을 앱스토어에 등록하지 않았으므로, 아이폰 안드로이드 모두 this app is not in the App Store yet / Test App, This app is not in the Google Play store yet / Test App을 선택해 주도록 합니다.

자 그럼 기본 연동을 시작해 보세요 라는 항목이 뜹니다. 여기서 유니티를 선택해 주도록 합니다.

그럼 SDK 파일이 다운로드 됩니다. 이 것을 일단 두시고 페이지를 조금 더 스크롤 해 줍니다.

그럼 SDK 키가 나오고, 기본 연동 설명이 이어 집니다. SDK키는 잘 메모해 두시고, Unity 탭을 눌러 유니티 연동을 하도록 합니다.

유니티 포르젝트를 생성하고, 탭 조이 플러그인을 설치하도록 합니다. 방법은 다운로드된, TapjoyUnityPlugin_v12.2.1 폴더 속 TapjoyUnityPlugin_v12.2.1.unitypackage 파일을 프로젝트로 드래그앤 드랍하면됩니다.

설치된 SDK 중 Plugins의 Android에 TapjoySampleAndroidManifest.xml 파일을 찾을 수 있을 것 입니다. 이것을 하나 복사해 AndroidManifest.xml 로 이름을 변경해 줍니다. (그 폴더 그대로 두면됩니다.)

이 파일을 열어 보고 있는 문서와 내용이 일치하는지 확인합니다.

앞서 확인했던 SDK Key를 입력해 주기 위해 유니티의 Window > Tapjoy 를 선택해 SDK 키를 입력해 주도록 합니다.

iOS 탭도 눌러 잊지않고, 아이디를 추가해 주도록 합니다. (주의할점은 iOS키가 위에 있습니다. Android 키와 바꿔 넣지 않도록 주의합니다.).

그리고 자세한 로그를 보기 위해 Debug Mode를 눌러 로그를 볼 수 있도록 합니다.

앱이 실행될 때 탭조이는 알아서 서버로 연결 요청을 합니다. 그래서 연결이 되어 있는 상태인지 아닌지의 확인만 필요합니다. 이 상태를 확인하는 값은 아래와 같습니다. 상단에, using TapjoyUnity; 구문이 필요합니다.

if (!Tapjoy.IsConnected) {
  Tapjoy.Connect();
}

여기 까지 했다면 좀더 스크롤 해 테스트 디바이스를 등록하도록 합니다.

안드로이드 iOS 모두 등록하시면 좋습니다. 기기를 등록할 때 가각 IDFA / GAID를 입력하는 란이 나올 텐데, 본 문서 상단에 걸어놓은 링크 IDFA / GAID 확인하기 ( 링크 )를 눌러 확인하실 수 있습니다. (안드로이드 폰 중 설정 > 구글설정 메뉴가 없을 수 있습니다. 이럴 경우, 톱니바퀴에 G 가 새겨진 앱을 실행하면됩니다.). 등록하실 때 android iOS를 주의해 입력해 주세요.

그리고 유니티를 빌드하면, integer/google_play_service_version 이라는 오류를 만날수 있습니다. 구글 플레이서비스가 설치되어 있지 않아 생긴 것이므로, 설치해 주어야 합니다.

 

-- 계속 이어 가겠습니다. (구글 플레이 서비스 설치중)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'유니티' 카테고리의 다른 글

unity inapp 결제  (0) 2019.04.29
유니티 구글 플레이 연동  (0) 2019.04.29
탭조이 유니티 계정생성하기  (0) 2019.04.28
adpopcorn Unity 연동 - android  (0) 2019.04.28
adpopcorn Unity 연동 - 계정추가 (1/3)  (0) 2019.04.28
Posted by 창업닉군
,

탭조이는 상당히 오랜 기간 유니티를 비롯한 수많은 모바일기기에 광고 서비스를 해 왔습니다. 물론 국내에는 많이 알려지지 않았지만, 외국에서는 매우 유명한 회사 입니다. 수익 구조가 다양한 만큼 꽤나 많은 기능이 있어 복잡하지만, 하나하나 구현해 보도록 하겠습니다.

 

[참고링크]

탭조이 : http://tapjoy.com .

 

 

1. 먼저 공식 사이트로가 Sign up 버튼을 눌러 주도록 합니다.

이후 창이 뜨면 사용할 사용할 계정을 입력하고 계정만들기 버튼을 눌러 주도록 합니다.

그럼 주소로 메일을 발송했다는 표시가 뜰 것 입니다. 메일로가 확인 메일이 잘왔는지 보고 왔다면, 계속하기 버튼을 눌러주도록 합니다.

링크를 누르면, 지금 시작하세요. 라는 페이지가 뜰텐데, 적당한 값을 입력하고, Tabjoy 시작하기 버튼을 눌러 주도록 합니다.

자 그럼 계정 생성이 완료되었습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'유니티' 카테고리의 다른 글

유니티 구글 플레이 연동  (0) 2019.04.29
unity Tapjoy offerwall  (1) 2019.04.29
adpopcorn Unity 연동 - android  (0) 2019.04.28
adpopcorn Unity 연동 - 계정추가 (1/3)  (0) 2019.04.28
UNITY Firebase push  (3) 2019.04.27
Posted by 창업닉군
,

애드 팝콘 안드로이드 연동 메뉴얼 입니다. 계정이 이미 만들어저 있어야 하며, 유니티에 대한 약간의 지식이 필요합니다.

 

[선행작업]

adbrix 계정만들기 : https://nicgoon.tistory.com/219 .

 

[공식문서]

 

 

[참고사이트]

adbrix 공식사이트 : http://adbrix.io .

 

1. 앱 생성.

애드 브릭스 공식 사이트로가 지금 시작하기 버튼을 눌러 주도록 합니다.

그리고 사용할 계정 선택 (adbrix 아이디 속에 여러개의 계정을 만들수 있습니다.) 합니다.

콘솔로 들어오면, 앱 생성하기 버튼을 눌러 주도록 합니다.

일단 안드로이드만의 앱을 선택하도록 합니다. iOS는 따로 문서를 만들 생각이기 때문입니다.

앱이 추가되면 다음 과 같은 화면이 나오는데, unity 탭을 눌러 구현해야할 것들을 훑어 보도록 합니다.

SDK를 추가하고 알려준 대로 유니티를 통합하면 크게 문제가 없을 것입니다.

 

 

 

 

 

 

 

'유니티' 카테고리의 다른 글

유니티 구글 플레이 연동  (0) 2019.04.29
unity Tapjoy offerwall  (1) 2019.04.29
탭조이 유니티 계정생성하기  (0) 2019.04.28
adpopcorn Unity 연동 - 계정추가 (1/3)  (0) 2019.04.28
UNITY Firebase push  (3) 2019.04.27
Posted by 창업닉군
,

모바일 게임 및 앱을 만들면, 광고를 통해, 수익을 창출할 수 잇는 도두가 많이 있습니다. 그런것들 중 하나가 adbrix의 adpopcorn 입니다. 유니티로 만든 게임 자체는 하나의 소스로, 많은 플랫폼들에 동작하지만, adpopcorn은 유니티에서 구현되지만, android, iOS 플랫폼 각각 구현해 주어야 합니다.

이 문서에서는 adbrix 계정만드는 법을 다루고, Android, iOS는 이 후 게시물을 따로 게시하겠습니다.

 

[공식문서]

 

 

[참고사이트]

adbrix 사이트 : http://adbrix.io .

 

 

1. 계정만들기.

 adbrix사이트로 들어가 지금 시작하기 버튼을 눌러 주도록합니다.

로그인 창이 뜨면 회원가입 버튼을 눌러 주도록 합니다.

회원가입 창이 뜨면 적당한 값을 입력하고, 가입하기 버튼을 눌러 주도록 합니다.

그럼 인증 메일을 확인하라는 메시지가 뜹니다. 메일로가 인증해 주세요.

받은 메일을 눌러 인증하기 버튼을 누르면 인증이 완료됩니다.

인증을 완료한 후, 지금 시작하기 버튼을 누르면 계정 추가 화면이 나옵니다.

적당한 값을 입력하고 생성버튼을 눌러 주도록 합니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

'유니티' 카테고리의 다른 글

유니티 구글 플레이 연동  (0) 2019.04.29
unity Tapjoy offerwall  (1) 2019.04.29
탭조이 유니티 계정생성하기  (0) 2019.04.28
adpopcorn Unity 연동 - android  (0) 2019.04.28
UNITY Firebase push  (3) 2019.04.27
Posted by 창업닉군
,

유니티에 PUN을 셋팅하면, 포톤서버를 이용할 수 있습니다.  먼저 photon 사이트에서 Realtime 어플리케이션을 추가하고, pun unity 패키지를 photon 사이트에서 다운로드 받아 설치합니다. PUN 과 PUN+가 있는데, PUN은 Pro 버전이 아니라면, 모바일로 빌드할 수 없다고 합니다. PUN+는 모바일이 아니여도 빌드가 가능합니다.

 

[선행작업]

Photon Realtime 어플리케이션 추가하기 : https://nicgoon.tistory.com/216 .

 

[참고문서]

포톤엔진을 유니티 (Unity 3D)에 적용 : https://photonkr.tistory.com/13?category=1030095 .

 

메인 화면에서,  SDK를 선택해 줍니다.

다운로드 화면에서 REALTIME을 선택하고, PUN Unity 패키지를 눌러 줍니다.

PUN 상세 화면이 나타나면, PUN FREE로 시작해 보세요 를 눌러 줍니다.

그럼 유니티 에셋 스토어로 연결이 될 텐데, add to My Assets를 눌러 줍니다.

그럼 로그인 창이 뜨는 데 로그인 합니다.

그럼 인증하라는 창이 나타나는 데, 언릉 메일을 확인해 코드를 입력해 주도록 합니다.

그리고 다시 add to My Assets 를 누르면, 추가가 됩니다.

추가된 모습은 아래와 같습니다.

유니티 프로젝트를 하나 만들어 주세요. 그리고 에셋 스토어 창을 열어 줍니다.

그리고 My Assets를 눌러 줍니다.

My Assets 페이지가 뜨면 PUN 2- FREE를 찾아 Download 를 눌러 주도록 합니다.

다운로드가 완료되면, Import를 눌러 유니티 프로젝트에 포함시켜 줍니다.

Import 창이 뜨면, Import 버튼을 눌러 주도록 합니다.

임포트가 완료되면, 포톤 어플리케이션 ID를 세팅하는 창이 뜹니다. 앞서 만들어 둔 Photon Realtime 어플리케이션에 설정된 appid를 입력하고, Setup Project를 눌러 주도록 합니다.

UNITY에 PUN 세팅을 마쳤습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Posted by 창업닉군
,

UNITY Firebase push

유니티 2019. 4. 27. 02:28

예전에 게임에 푸쉬를 추가하려면, android iOS 따로 따로 만들어 푸쉬를 추가해야 했습니다. 힘들기도 하지만, 트러블 슈팅에 많은 시간을 소요해야만 했습니다. 하지만, 이제는 Firebase를 통해 추가하면, 한 번에 추가하고 관리할 수 있습니다. 물론, 문제는 여전히 산재해 있습니다. 하지만, 최소한 예전보다는 좋아졌습니다.

 

[선행작업]

프로비저닝 프로파일 만들기 (푸쉬 인증서 설명도 같이 있음) : https://nicgoon.tistory.com/202 .

 

[공식문서]

Unity 프로젝트에 Firebase 추가 : https://firebase.google.com/docs/unity/setup .
GitHub의 Unity용 Firebase 빠른 시작 샘플 : https://github.com/firebase/quickstart-unity .
Unity로 Firebase 클라우드 메시징 클라이언트 앱 설정 : https://firebase.google.com/docs/cloud-messaging/unity/client .

 

[주요링크]

파이어 베이스 : https://firebase.google.com .

 

 

1. 유니티 프로젝트 생성.

유티 프로젝트 생성은 크게 힘들 일이 아닐 것 입니다. 적당한 이름으로 프로젝트를 생성해 주세요. 그리고, 안드로이드를 위한 빌드 셋팅을 해 주도록 합니다.

상단 메뉴에서 File > Bild Settings 를 선택해 주도록 합니다. 그럼 빌드 셋팅 창이 뜨는데, Android를 선택하고 Switch Platform 버튼을 눌러 플랫폼을 변경하도록 합니다.

플랫폼이 변경되면, Player Settings 버튼을 눌러서, Player Settings 창을 호출하도록 합니다.

창이 뜨면, 안드로이드 > Other Settings 버튼을 눌러 Package Name 을 적당한 값으로 변경해 줍니다.

그리고, 다시 Build Settings 창에서, Build And Run 버튼을 눌러 한 번 빌드를해 잘 동작하는 지 확인합니다.

 

2. 파이어 베이스 프로젝트 추가.

첫 화면에서 콘솔로 이동합니다.

콘솔 첫 화면에서 프로젝트 추가 버튼을 눌러 주도록 합니다.

아래와 같이 프로젝트 추가 창이 뜨면, 적당한 값들을 입력하고, 프로젝트 만들기 버튼을 눌러 주도록 합니다.

 

3. 유니티 앱 추가 하기.

프로젝트 창이 뜨면, 유니티 앱 추가 버튼을 눌러 앱을 추가하도록 합니다.

추가 페이지의 앱등록 화면이 뜨면, 아래와 같이 적당한 값들을 넣고, 앱 등록 버튼을 눌러 주도록 합니다.

구성 파일 다운로드 항목에서는 시키는 대로 android, iOS 를 위한 설정 파일을 다운로드 받아 적당한 위치에 배치 합니다. 그리고 다음 버튼을 눌러 주도록 합니다.

다음 항목에서 파이어 베이스 sdk를 다운로드 받습니다. 다운로드 후 폴더를 열어 보면, dotnet3, dotnet4 폴더가 각각 있을 것 입니다. 그 중 dotnet4 속의 FirebaseAnalytics.unitypackage 를 가지고 오도록 합니다. 여기 까지 했다면 다음 버튼을 눌러 주도록 합니다.

여기서, 유니티 Preference > External Tools > Android SDK Tools Installed with Unity 체크 되어 있다면, 오류를 만날 수 있습니다. 잠시, 해제를 해 주면, 오류가 해결되고, 파이어 베이스가 종속성이 있는 모듈을 확인할 수 있도록 해 줍니다. 끝나면, 다시 체크 해 줍니다.

다음 창이 나오면, 문서와 예제 링크가 나옵니다. Unity 문서를 눌러, Unity 프로젝트에 Firebase 추가 페이지를 불러 옵니다.

이 문서를 확인해 보면, 우리는 5단계까지 완료했고, 마지막, 6단계를 하지 않았습니다. 파이어 베이스 기능을 사용하기 위한 앱을 호출 하는 것 인데, 저는 프로젝트에 게임오브젝트를 만들고, Start 메소드에 이 코드를 추가했습니다. 코드는 다음과 같습니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

using Firebase;

public class PushTestScene : MonoBehaviour
{
    
    public FirebaseApp app = null;

    void Start()
    {

        Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => {

            var dependencyStatus = task.Result;
            if (dependencyStatus == Firebase.DependencyStatus.Available) {
                // Create and hold a reference to your FirebaseApp,
                // where app is a Firebase.FirebaseApp property of your application class.
                app = Firebase.FirebaseApp.DefaultInstance;

                Debug.Log( "파이어 베이스 앱을 무사히 초기화 하였습니다." );

                // Set a flag here to indicate whether Firebase is ready to use by your app.
            } else {
                UnityEngine.Debug.LogError(System.String.Format(
                "Could not resolve all Firebase dependencies: {0}", dependencyStatus));
                // Firebase Unity SDK is not safe to use here.
            }

        });

    }


}

유니티에서 바로 실행해 보면, 앱이 잘 생성되어 줍니다. 저는 안드로이드, iOS 모두 정상적으로 잘 작동하였습니다.

 

4. Unity로 Firebase 클라우드 메시징 클라이언트 앱 설정.

앞서 다운로드 받았던, Firebase Unity SDK를 추가 하도록 합니다. Asset > Import Package > Custom Package 메뉴 항목을 선택합니다. 그리고 다운로드 받았던, Firebase 패키징 dotnet4 폴더 속에 있는, FirebaseMessaging.unitypackage 파일을 추가해 줍니다. 저는 그냥 이 파일을 유니티에 드래그앤 드랍으로 추가했습니다.

그리고, 파이어 베이스 메시징에 메시지를 받았을 경우 이벤트를 처리하는 코드만 추가하면됩니다. 추가할 코드는 아래와 같습니다.

public void Start() {
  Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;
  Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;
}

public void OnTokenReceived(object sender, Firebase.Messaging.TokenReceivedEventArgs token) {
  UnityEngine.Debug.Log("Received Registration Token: " + token.Token);
}

public void OnMessageReceived(object sender, Firebase.Messaging.MessageReceivedEventArgs e) {
  UnityEngine.Debug.Log("Received a new message from: " + e.Message.From);
}

위 코드와 합치면, 이렇게 됩니다. 저 같은 경우, 앱에서는 로그를 찍기 힘들기 때문에 레이블을 만들어 로그를 표시하도록 하였습니다. 주의 할점은 파이어 베이스로 인해 정의된 메소드들은 모두 메인 쓰레드가 아니므로, 레이블에 직접 접근할 수 없습니다. c#에서는 메인 쓰레드 외에 쓰레드에서 UI에 접근할 때, Invoke를 사용하였지만, 유니티에서는 어떻게 처리할 지 모르겠더군요. 그래서 update에서, 추가될 메시지를 확인해 메인 쓰레드에서 UI를 업데이트하도록 하였습니다.

하나의 스크립트에 모두 정의가 가능했고, 코드는 아래와 같습니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;


using Firebase;

public class PushTestScene : MonoBehaviour
{
    

    [Header("UI들")]
    public Text mainMessage = null;
    public string addMessage = "";


    [Header("초기화시 설정되는 값들")]
    public FirebaseApp app = null;

    void Start()
    {

        mainMessage.text = "";



        Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;
        Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;



        Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => {

            var dependencyStatus = task.Result;
            if (dependencyStatus == Firebase.DependencyStatus.Available) {
                // Create and hold a reference to your FirebaseApp,
                // where app is a Firebase.FirebaseApp property of your application class.
                app = Firebase.FirebaseApp.DefaultInstance;

                
                    lock(mainMessage)
                    {
                        addMessage += "파이어 베이스 앱을 무사히 초기화 하였습니다.";
                    }
                    // mainMessage.text = "파이어 베이스 앱을 무사히 초기화 하였습니다." ;
                    // this.SendMessage( "update_mainMessage", "파이어 베이스 앱을 무사히 초기화 하였습니다." );
                
                

                // Set a flag here to indicate whether Firebase is ready to use by your app.
            } else {

                lock( mainMessage )
                {
                    addMessage += string.Format("Could not resolve all Firebase dependencies: {0}", dependencyStatus);
                }
                // mainMessage.text = string.Format( "Could not resolve all Firebase dependencies: {0}", dependencyStatus ) ;

                // UnityEngine.Debug.LogError(System.String.Format(
                // "Could not resolve all Firebase dependencies: {0}", dependencyStatus));
                // Firebase Unity SDK is not safe to use here.
            }

        });

    }


    public void OnTokenReceived(object sender, Firebase.Messaging.TokenReceivedEventArgs token) {
        // UnityEngine.Debug.Log("Received Registration Token: " + token.Token);
        lock(mainMessage)
        {
            addMessage += string.Format( "Received Registration Token: " + token.Token );
        }
    }

    public void OnMessageReceived(object sender, Firebase.Messaging.MessageReceivedEventArgs e) {
        // UnityEngine.Debug.Log("Received a new message from: " + e.Message.From);
        lock(mainMessage)
        {


            var notification = e.Message.Notification;

            addMessage += string.Format(
                "Received a new message from: {0}, title: {1}, message: {2}" , e.Message.From
                , notification.Title
                , notification.Body
                );


        }
    }



    void Update()
    {

        lock(mainMessage)
        {
            // 추가할 메시지가 없는 경우 종료합니다.
            if( string.IsNullOrEmpty( addMessage ) ) return;

            // 기존 메시지에 메시지를 더해 주도록 합니다.
            mainMessage.text += addMessage;

            // 메시지를 지워 줍니다.
            addMessage = "";
        }

    }



}

그리고, 클라우드 메시지를 파이어 베이스에서 보내면 메시지가 잘 받아 집니다.

 

5. Android 메시지 보내기.

실제로 잘 받아 지는 지 테스트를 해봅시다. 안드로이드로 앱을 배포하고, 앱이 켜지면 아래 내용을 따라 실행해 주세요.

클라우드 콘솔에서, 왼쪽 메뉴중 Cloud Messaging 을 선택해 Cloud Messaging 페이지를 불러 옵니다. 불러온 페이지에서, Send your first message를 선택합니다.

나온 알림 작성 페이지의 각 항목에 적당한 값들을 입력하고 다음 버튼을 눌러 주도록 합니다.

다음 페이지에서 안드로이드 앱을 선택해 주고, 검토 버튼을 눌러 줍니다.

그럼 메시지 검토 창이 뜰텐데, 여기서 게시를 선택해 주도록 합니다.

저는 아래와 같이 무사히 결과를 받았습니다.

 

6. iOS 메시지 보내기.

위 프로비저닝 프로파일 만들기에서, 프로 비저닝은 이미 끝내서, 준비해야 합니다.

메시지를 iOS에 발신하기 위해서는, APN 키가 필요합니다. 애플 개발자 사이트로 접속해 Certificates, Identifiers & Profiles 로 이동합니다. 여기서 왼쪽 메뉴 중 Keys > All을 선택합니다. 그리고, + 버튼을 눌줍니다.

새 키 생성창에서 적당한 값들을 입력하고, Continue 버튼을 눌러 주도록 합니다.

그럼 만들것인지 다시 한 번 묻는 창이 나오는 데, Confirm을 눌러 주도록 합니다.

그럼 키 생성이 완료되었다는 창과 함께 키를 다운로드 받을 수 있습니다. Download 버튼을 눌러 키를 다운받습니다. 그리고, Key ID늘 잘 메모해 둡니다. 

파이어 베이스 콘솔로 돌아와 콘솔창에서 톱니바퀴 버튼을 눌러 프로젝트 설정 메뉴를 선택합니다.

설정키에서 클라우드 메시징 탭을 선택하고, APN 인증 키의 업로드 버튼을 선택해 줍니다.

APN 인증 키 업로드 다이얼로그가 뜨면 적당한 값들을 넣고, 업로드 버튼을 눌러 주도록 합니다.

이제 유니티로 돌아와 IOS로 플랫폼을 변경합니다.

플랫폼이 변경되면, 빌드를 눌러 xcode 프로젝트를 생성합니다.

내어 보내진 프로젝트에서, push를 허용해 줍니다.

그리고, 푸쉬 관련 프레임워크를 추가합니다. 다만, 공식 문서나, 기존에는 PushKit.framework를 사용했었습니다. 하지만, 파이어베이스에서는, UserNotifications.framework를 추가하라고 합니다. 일단, 저는 UserNotifications.framework를 추가하였습니다.

이렇게 빌드를해 정상적으로 앱을 호출된다면, 다음으로 넘어 가시면 됩니다.

이제 파이어 베이스에서 메시지를 보내어 봅시다. 파이어베이스 콘솔에서, 왼쪽의 Cloud Messaging 를 선택해 Cloud Messaging 페이지가 호출되면, 새 알림 버튼을 눌러 주도록 합니다.

그 다음 알림 전송 페이지가 호출되면, 적당한 값들을 넣고, 다음을 눌러 줍니다.

타겟 항목이 뜨면 iOS 앱을 선택하고, 검토를 눌러 줍니다.

메시지 검토 다이얼로그가 뜨면, 게시버튼을 눌러 메시지를 보냅니다.

저는 여기까지 메시지가 잘 도착하였습니다. 안드로이드와 마찮가지로.

 

 

 

'유니티' 카테고리의 다른 글

유니티 구글 플레이 연동  (0) 2019.04.29
unity Tapjoy offerwall  (1) 2019.04.29
탭조이 유니티 계정생성하기  (0) 2019.04.28
adpopcorn Unity 연동 - android  (0) 2019.04.28
adpopcorn Unity 연동 - 계정추가 (1/3)  (0) 2019.04.28
Posted by 창업닉군
,