Version: 2020.1
언어: 한국어
UDP 콘솔에서 게임 관리 및 퍼블리싱
UDP 레퍼런스

다른 서비스에서 UDP 사용

UDP 빌드의 Google Play 게임 서비스

개요

Android 게임에 Google Play 게임 서비스를 구현하면 업적, 리더 보드 등과 같은 기능에 Google의 서비스 레이어를 활용할 수 있습니다. 게임이 Google Play 게임 서비스를 구현하는 경우 추가 설정을 통해 UDP가 다른 스토어에 대해 생성하는 빌드를 지원해야 합니다.

게임에서 Google Play 게임 서비스를 호출하면 Google Play 게임 서비스는 다음 세부 정보가 Google Play 콘솔에 등록된 정보와 일치하는지 확인합니다.

  • 애플리케이션의 패키지 이름
  • 애플리케이션 서명에 사용된 인증서

일치하지 않으면 플레이어가 Google Play 게임 서비스를 사용하여 애플리케이션에 로그인할 수 없습니다.

UDP를 통해 게임을 퍼블리시하는 특정 스토어의 경우 UDP는 패키지 이름에 스토어별 접미사를 추가합니다. 또한 자체 프라이빗 키를 사용하여 인증서를 생성하지 않는 경우 UDP는 리패킹된 각 빌드에 대해 인증서를 생성합니다. 이 이벤트로 인해 인증서 및/또는 패키지 이름이 Google Play 콘솔의 정보와 더 이상 일치하지 않게 됩니다. 이 경우 사용자가 Google Play 게임 서비스를 사용하여 게임에 로그인할 수 없습니다.

다음 섹션에서는 이 문제를 해결하는 방법에 대해 설명합니다.

UDP 빌드용 Google Play 게임 서비스 설정

이 섹션에서는 UDP 버전을 Google Play 애플리케이션에 연결하여 Google Play 게임 서비스가 모든 버전에서 동작하도록 만드는 방법을 설명합니다.

  1. Google Play 콘솔에서 타겟 앱으로 이동합니다.
  2. Play Games Services > Setup and management > Configuration으로 이동합니다.
    • Google Play 게임에 Google Play 게임 서비스가 구현되었다면 게임은 Google Play 게임 서비스 프로젝트에 이미 연결되어 있습니다. 이 경우 다음 단계를 따르십시오.
      1. Use an existing Play Games Services project를 선택합니다.
      2. 게임 프로젝트를 선택하고 Use를 선택합니다.
      3. 게임 서비스에 UDP 앱 연결의 단계를 따릅니다.
    • Google Play 게임에 Google Play 게임 서비스가 구현되지 않은 경우 다음 단계를 따르십시오.
      1. Play Games Services 설정 페이지에서 Yes, my game already uses Google APIs 또는 No, my game doesn’t use Google APIs를 선택합니다.
      2. Google Play 게임 서비스 프로젝트 생성 및 연결의 단계를 따릅니다.

Google Play 게임 서비스 프로젝트 생성 및 연결

이 섹션에서는 Google Play 게임 서비스 프로젝트를 생성하여 신규 또는 기존 클라우드 프로젝트에 연결하는 방법을 설명합니다.

Play Games Services 설정 페이지에서 Yes, my game already uses Google APIs를 선택했다면 다음 단계를 따르십시오.

  1. 클라우드 프로젝트를 선택합니다.
  2. Use를 선택하여 새로운 Play Games Services 프로젝트를 만들고 기존 클라우드 프로젝트에 연결합니다.

Play Games Services 설정 페이지에서 No, my game doesn’t use Google APIs를 선택했다면 다음 단계를 따르십시오.

  1. 게임 이름을 입력합니다.
  2. Create를 선택하여 새로운 Play Games Services 프로젝트를 만들고 신규 클라우드 프로젝트에 연결합니다.

새로운 Play Games Services 프로젝트를 만들면 Add credential 링크가 비활성화됩니다.

  1. Configure OAuth consent screen을 선택합니다.
  2. Play Games Services 설정 화면에서 Refresh를 선택합니다.
    이제 Add credential 옵션이 활성화됩니다.
  3. Add credential을 선택합니다.
    그러면 Add credential 페이지가 열립니다.
  4. Add credential 페이지에서 다음 단계를 따르십시오.
    1. Type으로 Android를 선택합니다.
    2. Enable anti-piracyOff로 설정합니다. 이렇게 하면 사용자가 Google Play 이외의 다른 앱 스토어에서 게임을 설치해도 게임에 액세스할 수 있습니다.
    3. Authorization 섹션에서 Create OAuth client를 선택합니다. 그러면 팝업이 열립니다.
    4. Create OAuth Client ID를 선택한 후 팝업의 세부 정보를 사용하여 양식을 작성합니다.

위 단계를 완료하면 Google Play 게임이 Google Play 게임 서비스에 연결됩니다. 다음 단계는 UDP 빌드를 게임 서비스에 연결하는 것입니다.

UDP 앱을 게임 서비스에 연결

앱을 Google Play 게임 서비스에 연결하면 다른 (UDP) 앱을 게임 서비스에 연결할 수 있습니다.

  1. Google Play 콘솔에서 Play Games Services > Setup and management > Configuration을 선택합니다.
    1. Play Games Services 설정 페이지에서 Add credential을 선택합니다.
  2. Add credential 페이지에서 다음 단계를 따르십시오.
    1. Android를 선택합니다.
    2. Enable anti-piracy를 Off로 설정합니다. 이렇게 하면 사용자가 Google Play 이외의 다른 앱 스토어에서 게임을 설치해도 게임에 액세스할 수 있습니다.
    3. Authorization 섹션에서 Create OAuth client를 선택합니다. 그러면 팝업이 열립니다.
    4. Create OAuth Client ID를 선택한 후 팝업의 세부 정보를 사용하여 양식을 작성합니다.
  3. Create OAuth client ID 양식에 필수 정보를 입력하여 UDP 빌드 중 하나에 대한 엔트리를 생성합니다.
    1. Name 필드에서 해당 스토어 이름을 따라 빌드 이름을 지정합니다(예: “Samsung version”).
    2. Package name 필드에서 UDP 콘솔을 통해 해당 스토어에 등록된 빌드의 패키지 이름을 지정합니다.
      UDP 콘솔에 스토어별 패키지 이름이 표시됩니다.
      1. My Games > Publish 탭으로 이동합니다.
      2. 해당 스토어에 대한 Advanced를 선택합니다.
        Basic Information 섹션에 패키지 이름이 표시됩니다.
    3. 인증서 필드에서 해당 UDP 스토어에 사용된 인증서를 사용합니다. UDP는 리패킹 작업 후 새 인증서로 앱에 서명합니다.
      스토어별 인증서가 UDP 콘솔에 표시됩니다.
      1. My Games > Publish 탭으로 이동합니다.
      2. 해당 스토어에 대한 Advanced를 선택합니다.
        Basic Information 섹션에 인증서가 표시됩니다.
        참고: APK 인증서를 다운로드하고 다음 커맨드를 사용하여 지문 정보를 얻을 수도 있습니다.
        openssl x509 -in [downloaded-pem-filepath] -fingerprint -noout
      3. SHA–1을 UDP 콘솔에서 인증서 필드로 복사합니다.
  4. 양식을 작성한 후 Create를 선택하여 Google Play 콘솔로 돌아갑니다.
  5. Refresh OAuth clients를 선택합니다.
  6. 새 OAuth 클라이언트를 선택합니다.
    1. Save changes를 선택하여 자격 증명을 저장합니다.
  7. Google Play 애플리케이션에 연결할 각 스토어별 UDP 빌드에 대해 위 단계를 반복합니다.

Google Cloud Platform > Google API & Services 대시보드의 Credentials에서 Google Play 애플리케이션에 연결한 UDP 빌드를 확인할 수 있습니다.

이러한 단계를 통해 Google Play 게임 서비스는 이러한 방식으로 연결된 모든 UDP 스토어 버전에서 성공적으로 동작할 수 있습니다. 단, SDK가 이전 버전의 Google Mobile Services를 통합하여 충돌이 발생하는 Mi GetApps는 제외입니다.

참고: Google 시스템에 대한 모든 변경 사항은 위에 설명된 솔루션에 영향을 미칠 수 있습니다. Google의 문제 해결 정보에 대한 자세한 내용은 Google 문서를 참조하십시오.

UDP에서 클라우드 빌드 사용

클라우드 빌드를 사용하여 다음과 같은 방법으로 UDP 콘솔에 게임을 배포할 수 있습니다.

클라우드 빌드를 통해 UDP 콘솔에 빌드 푸시

이 섹션에서는 클라우드 빌드를 사용하여 게임을 UDP로 푸시하는 방법을 설명합니다. Unity 에디터에서 Unity Services 창을 통해 클라우드 빌드를 활성화하십시오.

에디터에서 클라우드 빌드를 사용하여 UDP에 게임 배포

Unity 에디터에서 클라우드 빌드 기능을 통해 UDP에 게임을 배포하려면 UDP 빌드를 업로드한 후 UDP로 푸시해야 합니다.

  1. Cloud Build Services 창에서 이전에 빌드를 업로드하지 않았다면 Upload Build를 선택합니다.
  2. FILE에서 다음을 수행합니다.
    • UDP 빌드의 APK를 선택합니다.
    • 유용한 LABEL을 입력합니다.
    • PLATFORM 필드를 Android로 설정합니다.
  3. UPLOAD를 선택하면 업로드 프로세스가 자동으로 완료됩니다.
  4. Cloud Build Services 창의 빌드 History 타임라인에서 원하는 빌드를 찾은 후 Push to Unity Distribution Portal을 선택합니다.
    1. 푸시할지, 그리고 해당 작업이 완료되는지 확인합니다.

Unity 대시보드를 사용하여 게임을 UDP에 배포

Unity 대시보드에서 클라우드 빌드 기능을 통해 UDP에 게임을 배포하려면 UDP 빌드를 Unity 대시보드에 업로드한 후 UDP로 푸시해야 합니다.

  1. Unity 개발자 대시보드에서 프로젝트의 Cloud Build > History로 이동합니다.
  2. Upload를 선택한 후 APK 파일을 선택합니다.
  3. Platform 필드에서 Android를 선택합니다.
  4. Upload를 선택합니다.
  5. 빌드 옆에 있는 More 메뉴를 선택하여 드롭다운 메뉴를 확장합니다.
  6. Push to Unity Distribution Portal을 선택합니다.

클라우드 빌드를 통한 빌드 및 배포

Unity 팀즈 어드밴스드를 사용하는 경우 빌드를 자동으로 생성할 수 있습니다.

Cloud Build Services 창에서 다음을 단계를 따르십시오.

  1. Manage Build Targets > Add new build target을 선택합니다.
  2. TARGET SETUP 창에서 PLATFORM 필드를 Android로 설정하고 유용한 TARGET LABEL을 입력합니다.
  3. Next: Save를 선택합니다.
  4. Start Cloud Build를 선택한 후 방금 생성한 타겟 빌드를 선택합니다.

Unity 클라우드 빌드 개발자 대시보드를 통해 빌드를 UDP로 직접 푸시합니다(위 참조).

서비스 상호호환성

UDP는 게임이 사용하는 다른 서비스에 어느 스토어에서 게임을 다운로드했는지 알릴 수 있습니다.

이 정보는 Unity 서비스와 타사 또는 자체 서비스에서 다양한 방식으로 사용될 수 있습니다.

예를 들어 Unity 리모트 설정을 통해 정의된 규칙에 따라 게임 설정을 조정할 수 있습니다(예: 게임을 다운로드한 스토어).

이 섹션에서는 다른 서비스가 이러한 정보에 액세스하도록 허용하는 방법을 설명하고 관련 예시를 소개합니다.

동작 방식

플레이어의 기기에서 게임이 처음으로 실행되면 UDP는 게임의 영구 데이터 경로에 udp.json 파일을 만들고 삭제합니다. 이 파일에는 게임을 다운로드한 스토어를 보여주는 udpStore 필드가 있습니다. 해당 정보를 검색해서 가져온 후 원하는 방식으로 활용하십시오.

참고: 이로 인해 게임 매니페스트에 새로운 권한을 추가되지는 않습니다.

udp.json 찾기

udp.json 파일은 다음 위치에 저장됩니다.

Application.PersistentDataPath + '/Unity' + /Application.CloudProjectID + /udp/udp.json

여기에서

  • Application.PersistentDataPath는 게임의 영구 데이터 경로입니다.
  • Application.CloudProjectID는 게임의 Unity 프로젝트 ID입니다.

다음은 udp.json 파일 경로의 예입니다.

path/storage/emulated/0/Android/data/com.mystudio.mygame/files/Unity/c83d2de2-de74-4b75-83fc-ade948bda064/udp/udp.json

여기에서

  • Application.PersistentDataPath= path/storage/emulated/0/Android/data/com.mystudio.mygame
  • Application.CloudProjectID= c83d2de2-de74-4b75-83fc-ade948bda064

udp.json 읽기

udp.json 파일에는 다음 정보가 들어 있습니다.

{"key":"UDP","udpStore":"StoreName","udpClientId":"value_of_udpClientId","CloudProjectId":"value_of_CloudProjectId"}

udpStore 필드에는 게임을 다운로드한 UDP 스토어의 값이 들어 있습니다.

다음은 udp.json 파일의 예입니다.

{“key”:“UDP”,“udpStore”:“SamsungGalaxyStore”,“udpClientId”:“icjaB7wmu_q7AOjrSLH8yw”,“cloudProjectId”:“bc2be074–09f3–450f–8e98-a0f79c9746f7”}

이 예에서 게임은 Samsung Galaxy 스토어에서 다운로드되었습니다.

팁: JSONUtility.FromJsonOverwrite를 사용하여 파일 내용을 텍스트 에셋으로 읽으십시오.

udpStore 값

아래 표에는 UDP에서 사용할 수 있는 스토어에 대해 기대할 수 있는udpStore 값이 나열되어 있습니다.

이 값들은 대소문자를 구분합니다.

스토어(UDP에서의 채널 이름) udpStore 값
UDP 샌드박스(일반 UDP 빌드용) UdpSandbox
ONE Store OneStore
APPTUTTi Apptutti
VIVEPORT Htc
Mi GetApps (Xiaomi) XiaomiStore
Mi Game Center (Xiaomi China) XiaomiStoreCn
HUAWEI AppGallery Huawei
Samsung Galaxy Store SamsungGalaxyStore
QooApp Game Store QooApp
TPAY MOBILE Stores Tpay
Uptodown Uptodown
SHAREit ShareIt
JioGames JioGamesStore

리모트 설정으로 udpStore 사용

Unity 리모트 설정을 사용하면 애플리케이션의 새 버전을 배포하지 않고도 게임 설정을 조정할 수 있습니다. 플레이어가 게임을 실행하면 리모트 설정이 규칙 조건으로 사용되는 컨텍스트 속성을 감지합니다(Unity, 애플리케이션, 사용자, 또는 사용자 정의 기준을 따름). 그런 다음 서비스는 적용되는 규칙에 따라 각 플레이어에 대해 커스터마이즈된 설정을 반환합니다.

udpStore를 규칙 조건의 속성으로 사용하면 게임을 다운로드한 UDP 스토어에 따라 게임 설정을 결정할 수 있습니다.

리모트 설정으로 udpStore를 구현하려면 다음 단계를 따르십시오.

  1. UDP 패키지를 다운로드한 후 설치합니다.
  2. Unity 리모트 설정 패키지를 다운로드한 후 설치합니다. 리모트 설정 문서를 참조하십시오.
  3. AppAttributes 구조체를 만듭니다. 여기에는 최소 하나의 파라미터, 즉 “udpStore”가 있어야 합니다.
    public struct AppAttributes { public string udpStore; }
  4. 게임 코드에서 리모트 설정 ConfigManager.FetchConfigs 호출을 구현합니다.
  5. FetchConfigs를 호출하면 AppAttributes 구조체의 새 인스턴스를 생성하고 다음 위치에서 UDP 스토어 데이터 파일을 읽습니다. Application.PersistentDataPath + ‘/Unity’ + /Application.CloudProjectId + /udp/udp.json JSONUtility.FromJsonOverwrite를 사용하여 파일 내용을 텍스트 에셋으로 읽으십시오.
    { string udpFilePath = System.IO.Path.Combine(Application.persistentDataPath, "Unity", Application.cloudProjectId, "udp", "udp.json"); string udpFileContents = System.IO.File.ReadAllText(udpFilePath); var appAttr = JsonUtility.FromJson<AppAttributes>(udpFileContents); Unity.RemoteConfig.ConfigManager.FetchCompleted += ConfigManager_FetchCompleted; Unity.RemoteConfig.ConfigManager.FetchConfigs(null, appAttr); }
  6. AppAttributes 구조체가 ConfigManager.FetchConfigs에서 사용되는지 확인합니다.
  7. Remote Config 창(Window > Remote Config)을 열고 UDP 스토어에 따라 변경할 파라미터를 만듭니다.
  8. 파라미터가 설정되고 게임 코드에서 계측되면 Remote Config 창에서 각 스토어에 대한 규칙이 만들어집니다.
  9. 각 규칙의 조건에 app.udpStore == “[storeName]”을 입력합니다.
  10. 설정을 활성화하려면 Remote Config 창의 왼쪽 패널에서 규칙 이름 옆에 있는 체크박스를 선택합니다.
  11. 기기에 앱을 빌드하고 규칙이 제대로 적용되었는지 확인한 후 제공합니다.

Unity IAP를 사용하여 UDP용 IAP 아이템 구현

Unity IAP를 사용하여 UDP를 구현하려면 먼저 Unity IAP를 설정하십시오.

참고: UDP 패키지를 사용하는 대신, Unity IAP 버전 1.22.0–1.23.5를 사용하여 UDP를 구현하려는 경우에는 Unity IAP를 통해서만 구현해야 합니다.

Unity IAP는 다음 작업을 자동으로 처리합니다.

  • UDP 초기화
  • 스토어의 IAP 상품 인벤토리 쿼리
  • 상품 구매 요청
  • 구매한 아이템 소비

하지만 게임은 Unity IAP 문서에 따라 Unity IAP의 유사한 기능(예: 초기화, 구매)을 올바르게 사용해야 합니다.

Unity IAP를 사용하여 게임의 인앱 구매를 구현했다면 다음 단계에 따라 Unity IAP로 UDP를 설정하십시오.

IAP 인벤토리 쿼리

Unity IAP 사용(코드 구현)

에디터에 정의된 IAP 상품 페치

queryInventory 메서드에 전달할 IAP 상품을 페치하는 경우 ProductCatalog.LoadDefaultCatalog()를 호출하십시오. 그러면 에디터의 IAP Catalog(Window > Unity IAP > IAP Catalog)에 정의된 IAP 상품이 반환됩니다.

예를 들면 다음과 같습니다.

var catalog = ProductCatalog.LoadDefaultCatalog();

foreach (var product in catalog.allValidProducts)
{
   if (product.allStoreIDs.Count > 0)
   {
       var ids = new IDs();
       foreach (var storeID in product.allStoreIDs)
       {
           ids.Add(storeID.id, storeID.store);
       }
       builder.AddProduct(product.id, product.type, ids);
   }
   else
   {
       builder.AddProduct(product.id, product.type);
   }
}
UDP 콘솔에서 IAP 상품 정보 페치

UDP 콘솔에서 게임의 IAP 카탈로그를 수정하려는 경우 UDP 콘솔에서 IAP 상품 정보를 페치하도록 게임을 준비시키십시오.

queryInventory 메서드에 전달할 IAP 상품을 페치하는 경우 builder.AddProduct를 호출하여 UDP 콘솔에서 특정 IAP 상품을 검색해서 가져오십시오.

builder.AddProduct(product.id, product.type, new IDs{})

통화 포맷이 지정된 상품 가격을 표시하려면 productInfo.Value.Price를 사용하십시오.

UDP 콘솔에서 IAP 카탈로그 페치

UDP 콘솔에서 정의된 모든 IAP 상품을 검색해서 가져오려는 경우에는 IAP 상품 검색 메서드를 호출하지 마십시오. 그러면 게임이 UDP 콘솔에서 전체 IAP 카탈로그를 페치합니다.

참고: UDP 콘솔에서 IAP 상품의 CSV 파일을 업로드하면 IAP 카탈로그를 완전히 덮어씁니다.

Unity IAP 패키지로 IAP 카탈로그 채우기

UDP에 대한 모든 인앱 구매를 IAP 카탈로그에 추가하고 구성합니다.

참고: 게임 클라이언트에서 IAP 카탈로그를 사용하지 않는 경우(예: 게임 서버에서만 IAP 아이템을 유지하는 경우)에도 여전히 UDP 콘솔에서 IAP 카탈로그를 생성해야 합니다.

  1. Unity 에디터에서 Window > Unity IAP > IAP Catalog를 선택합니다.
  2. Add Product를 선택하고 각 IAP 상품에 대한 세부 정보를 입력합니다.
    1. Unity 퍼블리싱 포털 설정에서 IAP 아이템의 가격을 추가합니다.
  3. IAP 상품을 UDP 콘솔에 저장하려면 Sync to UDP를 선택합니다. 생성되는 각 IAP 상품에 대해 이 작업을 수행해야 합니다.

IAP 카탈로그가 올바르게 저장되었는지 확인하려면 추가한 아이템이 UDP 콘솔에 표시되는지 확인하십시오.

UDP 콘솔에서 게임 관리 및 퍼블리싱
UDP 레퍼런스