2014년 8월 26일 화요일

SInAppPurchase for GooglePlay - 아이템 타입 에따른 처리 방법

아이템 타입에 따른 처리 방법  


구글플레이에서 인앱결제 시스템으로 제공해주는 아이템타입

구글 개발자 콘솔에서 아이템 추가시 선택가능
아이템 추가 완료후 화면


1. 관리되는 제품(소모 불가능 제품) 

   - 한번 구매후 다시 구매할수 없는 상품 입니다.(프리미엄 계정및, 광고 제거 아이템)

2.관리되지 않는 제품(소모 가능 제품)

   - 소모후 다시 구매가 가능한 상품 입니다. (게임머니, 특수 기능 아이템)

3. 구독 제품

   - 월, 년 기준으로 일정금액이 지속적으로 청구되는 상품 입니다.








아이템 타입에 따른 처리 방법

아이템 타입에 따른 구매 처리 방식

1. 관리되는 제품(소모 불가능 제품)

    - 클라이언트 실행시 구글빌링서버에 인벤토리 정보를 요청하여 관리되는 제품의 구매정보가 있거나, 관리되는 제품을 구매 완료 했을 경우 해당 유료 아이템을 적용, 사용하도록 합니다


2. 관리되지 않는 제품(소모 가능 제품)

    - 클라이언트 실행시 구글빌링서버에 인벤토리 정보를 요청하여 관리되지 않는 제품의 구매정보가 있거나, 관리되지 않는 제품을 구매 완료했을 경우 해당 유료 아이템을 사용하고 구글 빌링서버에 소모통보(Consume) 를 해야 다시 재구매가 가능합니다.

3. 구독 제품

    - 클라이언트 실행시 구글빌링서버에 인벤토리 정보를 요청하여 구독 제품의 구매 정보가 있거나, 구독 제품을 구매 완료 했을 경우 해당 유료 아이템을 적용, 사용 하도록 합니다

SInAppPurchase for GooglePlay - GooglePlayConsumeRequestDataAPI설명

namespace SPlugins
{
 public class GooglePlaySKUDetailData
 {
  //아이템 아이디
  public string sku { get; set; }

  //구매 완료후 받아온 아이템 정보의 token 
  //GooglePlayPurchaseData.token 값 사용
  public string token { get; set; }
 }
}/*namespace SPlugins*/

2014년 8월 25일 월요일

SInAppPurchase for GooglePlay - GooglePlaySKUDetailData API설명

namespace SPlugins
{
 public class GooglePlaySKUDetailData
 {
  //아이템 아이디
  public string sku { get; set; }

  //아이템 타입 "inapp" - 구매 제품, "subs" - 구독 제품
  //Value must be “inapp” for an in-app product or "subs" for subscriptions.
  public string ItemType { get; set; }

  //판매 가격
  //Formatted price of the item, including its currency sign. 
  //The price does not include tax.
  public string price { get; set; }

  //판매 아이템 이름
  //Title of the product.
  public string title { get; set; }

  //판매 아이템 설명
  //Description of the product.
  public string description { get; set; }

  //빌링 서버에서 보내준 JSON 형식 데이터
  public string originalJsonData { get; set; }
 }
}/*namespace SPlugins*/

SInAppPurchase for GooglePlay - GooglePlayPurchaseData API설명

namespace SPlugins
{
 public class GooglePlayPurchaseData
 {
  //아이템 타입 "inapp" - 구매 제품, "subs" - 구독 제품
  //Value must be “inapp” for an in-app product or "subs" for subscriptions.
  public string ItemType { get; private set; }

  //결제 아이디
  //A unique order identifier for the transaction. 
  //This corresponds to the Google Wallet Order ID.
  public string orderID { get; private set; }

  //APK 패키지 이름
  //The application package from which the purchase originated.
  public string packagaeName { get; private set; }

  //아이템 아이디
  public string sku { get; private set; }

  //구매한 시간
  //The time the product was purchased, 
  //in milliseconds since the epoch (Jan 1, 1970).
  public string purchaseTime { get; private set; }

  //구매 목록 상태 0-구매완료, 1-구매취소, 2-환불
  //The purchase state of the order. Possible values are 
  //0 (purchased), 1 (canceled), or 2 (refunded).
  public string purchaseState { get; private set; }

  //구매 처리시 생성한 developerPayload
  //A developer-specified string that contains supplemental information 
  //about an order. You can specify a value for 
  //this field when you make a IAP.PurchaseAsync
  public string developerPayload { get; private set; }

  //Consume처리시 사용하는 토큰, 
  //A token that uniquely identifies a purchase 
  //for a given item and user pair.
  public string token { get; private set; }

  public string originalJsonData { get; private set; }

  //보안 검증에 사용하는값, 어플리케이션 마다 할당 받은 키값과
  //signature 값을 통해 영수증 유효 여부를 처리할수 있습니다
  public string signature { get; private set; }
 }
}/*namespace SPlugins*/

SInAppPurchase for GooglePlay - IAP API설명

namespace SPlugins
{
 public static class IAP
 {
  /// 로그 콜백 함수를 지정합니다
  /// enable_ : 로그 여부 셋팅값 입니다
  /// delegateLog_: 로그 정보를 받아올 콜백 함수 입니다
  public static void EnableLog(bool enable_, 
   Action〈unityengine .logtype="" string=""> delegateLog_)
  

  /// 결제 시스템을 초기화 합니다. 결제 관련 모든 명령어 전에 초기화 되어야 합니다
  /// 키값이 NULL 또는 empty 일경우 보안 검증을 하지 않습니다
  /// base64PublicKey_ : 구글 개발자 콘솔에서 어플리케이션 마다 
  /// 할당받은 키값을 적용합니다.
  public static IAPResult Initialize(string base64PublicKey_)
  

  /// 결제 처리를 더이상 하지 않을때 호출 합니다
  public static void Terminate()
  
  /// 구매한 아이템 정보및 판매중인 아이템의 세부 정보를 얻어올수 있습니다
  /// querySubscription_ : 구독 아이템 정보를 포함할지 여부 입니다
  /// queryDetailSKUList_ : 세부 정보를 받아올 아이템 아이디 리스트 입니다
  /// delegateCompleted_ : 인벤토리 정보의 결과값을 받아올 콜백 함수 입니다
  public static void QueryInventoryAsync(bool querySubscription_, 
   List〈string> queryDetailSKUList_, 
   Action〈GooglePlayQueryInventoryResultData> delegateCompleted_)
  

  /// 아이템 구매시 사용하는 함수입니다
  /// sku_ : 구매할 아이템 아이디 입니다
  /// developerPayload_ : 구매 완료 영수증 정보에 포함되는 값입니다. 
  /// 이값을 이용하여 보안검증을 할수 있습니다
  /// isSubscription_ : 구매 하려는 아이템이 구독 아이템인지 여부 입니다
  /// delegateCompleted_ : 구매 완료시 호출되는 콜백 함수 입니다
  public static void PurchaseAsync(string sku_, 
   string developerPayload_,
   bool isSubscription_, 
   Action〈GooglePlayPurchaseResultData> delegateCompleted_)
  

  /// 소모성 아이템을 경우 구글빌링서버에 아이템을 소모하겠다고 통보하는 함수 입니다
  /// consumeRequestDataList_ : 소모 요청 아이템이 여러개 일경우 
  /// 리스트에 아이템 정보를 담아서 요청 합니다
  /// delegateCompleted_ : 소모 완료 콜백 함수 입니다
  public static void ConsumeAsync(
   List〈GooglePlayConsumeRequestData> consumeRequestDataList_, 
   Action〈GooglePlayConsumeResultData> delegateCompleted_)
  

  /// 소모성 아이템을 경우 구글빌링서버에 아이템을 소모하겠다고 통보하는 함수 입니다
  /// consumeRequestData_ : 소모 요청할 아이템 정보 입니다
  /// delegateCompleted_ : 소모 완료 콜백 함수 입니다
  public static void ConsumeAsync(
   GooglePlayConsumeRequestData consumeRequestData_, 
   Action〈GooglePlayConsumeResultData> delegateCompleted_)
  
 }/*class IAP*/
}/*namespace SPlugins*/

2014년 8월 22일 금요일

SInAppPurchase for GooglePlay - 설명

특징

- Unity 엔진에서 간단하게 적용가능한 인앱 결제 플러그인 입니다

- 별도의 외부 작업 없이 몇번의 함수 호출로 쉽게 Google Play의 인앱 구매가 가능합니다

- Google Play의 인앱결제 시스템 버전3을 사용합니다

- Google Play 인앱 결제의 자세한 설명은 아래 링크를 참고 바랍니다

https://developer.android.com/google/play/billing/index.html?hl=az


샘플 화면

결제 화면

결제 성공 화면


2014년 7월 28일 월요일

SRemoteConsole-Preferences


Preferences Window
 - 필터 문자를 등록하거나, 레이아웃 구성등을 변경 합니다



Custom Filters
   - 필터 문자열을 등록하거나 삭제할수 있습니다

ProfilerRefreshTimes(S)
   - 실시간 메모리 사용량 및 FPS 정보를 받아오는 간격을 조절합니다

SkipStackFrameCount
   -SPlugins.SRemoteConsole.Log 함수를 사용시 적용됩니다  
   -스택 정보를 얻어올때 무시할 스택프레임 수를 지정합니다
   -Log클래스를 Wrapper 하여 사용할경우 유용합니다
소스 코드

프레임 스킵 이 0일때 CallStack3 함수의 스택 정보가 표시됩니다

프레임 스킵을 1로 변경후 표시되야되는 CallStack3함수가 무시 됩니다


SkipStackFrameCountOnCallback
   -UnityEngine.Debug.Log 함수 사용시 적용 됩니다
   -스택 정보를 얻어올때 무시할 스택프레임 수를 지정합니다
   -Log클래스를 Wrapper 하여 사용할경우 유용합니다
소스 코드

프레임 스킵 이 0일때 CallStack3 함수의 스택 정보가 표시됩니다

프레임 스킵을 1로 변경후 표시되야되는 CallStack3함수가 무시 됩니다


Show Time
   -Log뷰에서 Time 정보 표시 여부

Show FrameCount
   -Log뷰에서 FrameCount 정보 표시 여부

Show ObjectName
   -Log뷰에서 오브젝트 이름 표시 여부

LogFileType
   -Log파일 저장시 포맷 형식을 지정 합니다

SvaeDirectory
   -로그 파일이 저장된 폴더 위치를 표시 합니다

SvaeFile
   -파일 저장 위치를 표시 합니다

2014년 7월 27일 일요일

SRemoteConsole-API설명

namespace SPlugins
{
 public static class SRemoteConsole
 {
   //커맨드 명령어를 처리할 콜백함수 입니다
   public static Action〈string> delegateOnReceiveCommand { get; set; }

   //시스템 메세지를 확인할수있는 콜백함수 입니다
   public static Action〈string> delegateOnReceiveSystemMessage { get; set; }

   //어플리케이션에서 보내는 로그정보를 확인할수있는 콜백 함수입니다
   public static Action〈LogData> delegateOnSendLog{ get; set; }

   //로그정보를 SRemoteConsoleEditor로 전송합니다 
   //context_ 정보 입력시 SRemoteConsoleEditor에서 오브젝트 이름을 확인 가능합니다
   public static void Log(string logMessage_, UnityEngine.Object context_ = null);
   public static void LogError(string logMessage_, UnityEngine.Object context_ = null);
   public static void LogWarning(string logMessage_, UnityEngine.Object context_ = null);

   //사용자 커맨드 명령어를 미리 등록합니다
   //SRemoteConsoleEditor에 등록되어 커맨드 검색으로 좀더 빠른 명령어 입력이 가능합니다
   public static void RegistCommand(string command_);

   //유니티에서 기본으로 제공하는 Debug 클래스의 로그정보를 SRemoteConsoleEditor에 출력합니다
   public static void RegisterUnityDebugLogCallback();
   public static void RegisterUnityDebugLogCallbackThreaded();
   
   //스택 정보의 프레임을 무시합니다
   //Log클래스를 Wrapper하여 사용할경우 유용합니다
   //SRemoteConsoleEditor 옵션에서도 셋팅 가능합니다
   public static void SkipStackFrameCount(int skipFrameCount_);

   //SRemoteConsole 이 Host로 실행될경우 사용합니다
   public static void StartClient(string hostIP_, int connectPort_ = 27889);

   //SRemoteConsole 이 Client로 실행될경우 사용합니다
   public static void StartHost(int connectPort_ = 27889, int maxConnection_ = 10);

   //네트워크를 사용하지않고 에디터에서 플레이할경우 사용합니다
   public static void StartLocal();

 }

 public class LogData 
 {
   //로그 타입
   public UnityEngine.LogType logType { get; set; }
   //로그 내용
   public string logContent { get; set; }
   //로그가 찍힐당시 스택정보
   public string logStackTrace { get; set; }
   //로그 생성위치
   public string filePath { get; set; }
   public Int32 lineNumber { get; set; }
   public Int32 columnNumber { get; set; }
   //로그 생성 시간
   public float timeS { get; set; }
   //로그 생성 프레임카운트
   public Int32 frameCount { get; set; }
   //로그가 UnityObject 타입일경우 오브젝트 이름
   public string objectName { get; set; }
 }
}/*namespace SPlugins*/

2014년 7월 2일 수요일

SRemoteConsole Download



SRemoteConsole



다운로드

무료 버전 다운로드

무료버전 차이점

 - 사용자 명령어 개수 제한
 - 스택 정보 제한
 - 원격 Error Pause, Step 기능제한
 - 메모리 및 FPS 정보 업데이트 시간 변경 제한
 - 로그 저장 파일 타입 선택 제한

2014년 6월 19일 목요일

SRemoteConsole-사용방법

1. 로컬 모드로 실행하기

        # 유니티 에디터로 플레이 시 네트워크 접속을 하지 않고 로그를 볼 수 있는 방법입니다


     1. SConsole 에디터를 실행 합니다

콘솔 시작 메뉴


     2. 스크립트를 작성 후 GameObject에 추가합니다

public class SampleStartLocal : MonoBehaviour
{
 void Awake()
 {
  SPlugins.SRemoteConsole.StartLocal();
  SPlugins.SRemoteConsole.RegisterUnityDebugLogCallback();
 }

 void OnDestroy()
 {
  SPlugins.SRemoteConsole.ShoutDown();
 }
}

2. 네트워크 모드로 실행하기

    # SConsoleApplication Host Client로 실행하여 Application이 빌드된 플랫폼에 구분 없이 로그를 확인 할 수 있는 방법 입니다

    # 네트워크 접속을 가능하게 하기 위해서는 HostIPAddress가 공용IP 이거나, Host Client가 동일한 지역 네트워크를 사용해야합니다(같은 공유기 사용)


   1. SConsole 에디터를 실행 합니다

콘솔 시작 메뉴



   2. SConsole에디터의 StartHost 버튼을 클릭합니다



   3.크립트를 작성 후 GameObject에 추가합니다

public class SampleStartClient : MonoBehaviour
{
 void Awake()
 {
  string hostIPAddress = "192.168.0.10";
  int port = 27889;
  SPlugins.SRemoteConsole.StartClient(hostIPAddress, port);
  SPlugins.SRemoteConsole.RegisterUnityDebugLogCallback();
 }

 void OnDestroy()
 {
  SPlugins.SRemoteConsole.ShoutDown();
 }
}


SRemoteConsole-설명

특징

- 유니티로 빌드된 어플리케이션에서 출력되는 로그 정보를 원격으로 확인 가능합니다

- 실시간으로 메모리 사용정보 및 초당 프레임 정보를 알수 있습니다
    # 빌드시 Development build 옵션을 활성화 시켜야 메모리 정보를 볼수있습니다

- 어플리케이션이 실행되고 있는 디바이스의 각종 정보를 알수 있습니다(CPU, OS, Memory, Graphic)

- 원격 Pause, Step ​기능을 사용하여, 빌드가 완료된 어플리케이션에서 Frame단위 테스트를 진행할수 있습니다

- 사용자 지정 명령어를 원격으로 전달하여, 빌드가 완료된 어플리케이션에서 다양한 테스트를 쉽게 할 수 있습니다.

-로그를 더블클릭하면, 실제 로그가 출력된 위치의 소스파일을 확인 가능합니다


SRemoteConsole v2.0




SRemoteConsole 동작 방식




검색 기능을 이용하여 필요한 로그를 보거나 제외할 수 있습니다





필터 기능을 이용하여 필요한 로그를 보거나 제외할 수 있습니다





사용자 정의 명령어를 원격으로 실행 가능합니다

Render Hide 커맨드 실행전

Render Hide 커맨드 실행후


어플리케이션이 실행되고 있는 시스템의 정보를 쉽게 확인 가능합니다




로그 파일을 CSV, XML, TXT 타입으로 저장 가능합니다



로그를 더블 클릭시 소스 코드로 이동 합니다




사용 방법 보기