Linux Manage Help..

Hard Disk Auto Mount

cd / etc / fstab
sudo nano fstab
# Mount by Moon
sudo mkdir /media/nodemoon/320G
sudo mount -a

Madcatz RAT7 Mouse Setting

cd /etc/X11/xorg.conf.d/
#if folder doesn't exist, create it
sudo mkdir /etc/X11/xorg.conf.d

#then do the following

sudo vi 910-rat.conf

#the above will create file 910-rat.conf and it will not get overwritten as if you put it in xorg.conf

# add the following to the file, use 'i' in vi to insert, esc to get out of insert mode

Section "InputClass"
Identifier "R.A.T."
MatchProduct "R.A.T.7|R.A.T.9"
MatchDevicePath "/dev/input/event*"
Option "Buttons" "17"
Option "ButtonMapping" "1 2 3 4 5 0 0 8 9 7 6 12 0 0 0 16 17"
Option "AutoReleaseButtons" "13 14 15"
Option "ZAxisMapping" "4 5 6 7"
EndSection

# esc, then wq!
# reboot
sudo reboot now

Advertisements

C# 상속, 함수 오버로딩 … 유한 상태 머신..


public class BaseState {
//  ////////////////////////////////////////////////     Public
public BaseState mExitState;
public string mName;

//  ////////////////////////////////////////////////     Protected  ** 상속받은 자식 클래스에서 인식 가능
protected bool mDidExecute_Entry = false;
protected uint mCounter;

//  ////////////////////////////////////////////////     Main Actions...  virtual 은 override 대상이라는 뜻..
public virtual BaseState Action() {
    if (!mDidExecute_Entry) EntryAction();
    DuringAction();
    if ( ExitCondition() ) {
      ExitAction();
      return mExitState; // Setting Next Action...
    }
    return this;
}

public virtual void DuringAction() {
    Debug.Log("BaseState :: DuringAction  \n");
}

public virtual bool ExitCondition() {  // Condition.. true or false...
    return false;
}

public virtual void EntryAction() {
  mCounter = 0;
  mDidExecute_Entry = true;
}

public virtual void ExitAction() {
  mDidExecute_Entry = false; // In case of Entering Again....
}

//  ////////////////////////////////////////////////     생성자
public BaseState() {
}
public BaseState( string pName ) {   mName = pName;  }
}

상속 받는 방법…

//  ////////////////////////////////////////////////     ////////////////////////     >>>>>  상속 받은 자식 클래스....  <<<<<
public class StateShop : BaseState {

//  ////////////////////////////////////////////////     Creation

public StateShop() : base () {}

public StateShop( string pName ) : base ( pName) {  }  // 이런 식으로 상위 생성자 호출</pre>
&nbsp;

public override void DuringAction ()  // override : 상위 함수를 부르지만, new 는 따로 논다..
{
    base.DuringAction ();
}


IAP (2) Making a purchase

Making a Purchase

Collecting Payment

결재를 위해 어플이 payment object 생성하여 페이먼트 큐에 ‘큐’ 한다. 그림 3-1 참조.
서버에서 paymentQueue:updatedTransaction 을 받음..
Payment 가 생성되면 persistent transaction 생성하여 갖고 있음. 지불한 후에 transaction 이 업데이트 되고 어플에서 이것을 반영하는 옵서버 구현.   옵저버는 사용자에게 구매한 아이템 제공하고 큐에서 transaction제거.

SKPayment

결재는 payment object 에서 시작.  PI와 수량 포함. 같은 객체를 한번 이상 ‘큐’ 가능. 각각은 다른 결재로 인식.
유저는 세팅에서 구매를 비활성 시킬 수 있다. 구매를 큐하기 전에, 어플은 구매가 진행될 수 있는지 확인해야 함.  [paymentQueueu :: canMakePayment] 메서드를 통해.

SKPaymentQueue

앱 스토어와 통신하는 객체. [payment]가 큐에 추가되면 스토어킷은 앱 스토어에 요청 전송. 스토어킷이 사용자가 결재를 확인하는 대화상자 제공. 완성된 결재는 옵서버에 리턴함.

SKPaymentTransaction

구매 시 생성. 어플이 transaction 의 상태를 결정하도록 하는 속성을 갖고 있다. 결재가 성공하면 성공에 관한 디테일 정보를 담는다. 큐에 지연된 액션을 물어볼 수 있지만, 옵서버가 기다리는 게 일반적.

SKPaymentTransactionObserver 프로토콜

어플이 구현하여 옵서버에 등록. 옵서버의 주된 임무는 완성된 액션을 검사하고 구매한 아이템을 유저에게 전달하며 큐에서 제거.
사용자가 아이템 구매를 시도할 때까지 기다리기 보다,  어플 런칭 시 큐와 옵서버와 연결되어 있어야 한다. 어플이 끝날 때 트랜잭션은 잃지 않음. 다음에 런칭할 때 스토어 킷은 트랜잭션 재개.  어플 초기화 시 옵저버 추가는 모든 트랜잭션이 어플에 돌아왔는 지 확인한다.

Restoring Transactions

액션이 진행되서 큐에서 제거되면 다시 볼 수 없다. 하지만, 어플이 결과를 저장해야 할 속성이 있으면 그 인터페이스를 구현해야 한다. 이 인터페이스는 다른 기기에 제품을 추가할 수 있으며, 기기가 지워지면, 원 기기에서 거래를 복구할 수 있다.
스토어킷은 비-소비성 제품, 오토-리뉴어블 구독,  프리-구독 에 대해 빌트-인 복구 기능 지원.
트랜잭션을 복구하려면 당신 어플은 큐의 restoreCompleltedTransactions 메서드 콜. 큐는 앱 스토어에 복구위한 요청을 보냄. 앱스토어는 새로운 트랜잭션 복구를 생성. 복구 트랜잭션 객체의 originalTransaction은 원래의 정보를 담고 있다.  어플에서는 이것을 통해 구매한 아이템을 풀어준다.  스토어킷이 복구를 마친 후 큐 옵서버에 paymentQueueRestoreCompletedTransactionsFinished: 메서드를 보낸다.

유저가 복구가능한 아이템을 구매하려고 하면  (당신이 구현한 복구 인터페이스 대신) 보통 트랜잭션을 받는다. 하지만, 유저는 같은 아이템에 대해 다시 과금 받지는 않는다. 당신 어플은 이 액션을 원래 액션과 똑같이 취급해야 한다.

넌-리뉴잉 구독, 소비성 제품은 복구되지 않는다. 하지만, 넌-리뉴잉은 복구되야 한다. 이것은 당신 서버에서 알아서 해라.

In App Purchase 매뉴얼..

In-App Purchase Programming Guide

Overview of In-App Purchase

Product

팔고 싶은 특성 모두. iTunes Connect 를 통해 새로운 앱을 만들때 처럼 연결.  4가지 방법. & 컨텐트 : 전자첵. 잡지, 사진, 아트웤, 게임레벨, 케릭 등등  어플에 배달 가능한 컨텐트. & 기능 : 이미 구현되어 있는 기능을 언락 / 기능 확장. & 서비스 : 1회성 서비스에 대해 과금. 음성 받아적기 등. & Subscriptions : 확장에 기반한 컨텐트/서비스 접속. 금융 정보에 1달간 접속 가능, 온라인 게임 포털에 접속 가능… 등.. 제품 설계 시 중요한 가이드라인. > 실제 제품 판매에는 사용하지 말것. > 전자머니를 나타내는 아이템을 제공하지 말라.. 사용자가 특정 아이템/서비스를 구매하는 것으로 아는 것이 중요 > 포르노, 도박, 혐오 에 관련되지 않도록..

Registering Products with the App Store

모든 아이템은 iTunes Connect 를 통해 먼저 등록 되어야 함.  이름/설명/가격 이 있어야 함. 특정 제품을 <product identifier> 라는 스트링으로 구별할 수 있다. 스토어킷을 이용하면 제품에 제공한 데이터를 가져올 때 PI 를 사용. 나중에 고객이 구매하고자 할 때, 어플은 PI 를 이용하여 그 제품이 구매된 것인 지 구별한다. 앱 스토어가 제공하는 제품의 종류 > Consumable : 매번 사야 하는 것. 1회성. > Non-consumable : 특정 유저가 한번만 구매.  모든 디바이스에 적용. 스토어킷은 이러한 기능 제공. > Auto-renewable subscriptions : 앞의 것처럼 모든 기기에 적용. subscription 의 기간 선택. 당신의 앱이 유효한지 안한지 책임진다. 가장 최근의 결재를 업데이트… > Free subscriptions : 뉴스 스탠드에 무료 자료. 폐기되지 않고 ‘뉴스 스탠드’ 가능한 앱에서만 사용 가능. > Non-renewing subscriptions : 제한된 기간을 갖는 제품. 오토-리뉴어블 과 다른 점. >> 아이튠즈커낵트에 제품 생성 시 섭스크립션 이란 단어가 선언되지 않음. 당신의 앱이 제공. 보통 제품 설명에 포함. >> 넌-리뉴잉 은 여러번 구매할 수 있다. 앱스토어에 의해 자동으로 ‘리뉴’ 되지 않음. 리뉴얼 프로세스를 앱 안에서 구현해라. >> 넌 리뉴잉  을 모든 기기에서 보여줘야. 자동으로 싱크되지 않음.

Feature Delivery

Buil-in / sever model..

Built-in Product Model

앱 내부에 모든 것이 이미 구현. [풀어 주는] 기능. 즉시 제공 가능. 대부분은 non-consumable.. *** IAP 는 결재 성공 후 어플을 패치하는 것은 하지 않음. 어플의 번들에 변화가 필요하면 업데이트된 버전을 앱스토어에 배달해야 함. 제품을 구별하기 위해 당신의 어플은 PI를 번들에 저장. Plist 를 권장. 컨텐트 주도 어플은 소스를 바꾸지 않고 새로운 컨텐트를 추가 가능. 구배 성공 후 언락하고 기능을 제공해야 한다. 가장 쉬운 방법은 preferences 를 바꾸는 것..  Implementing Application Preferences어플 프레퍼런스는 백업 된다. 유저에게 백업하라고 추천할 수도 있음.  도표 참조..

Server Product Model

당신이 제품을 공급할 서버를 운영.  게임 등에서는 뉴 레벨 등을 배달 가능. 스토어 킷은 어떤 것도 제공하지 않음. 당근.. 특정 유저를 구별하는 메카니즘도 제공 안 함.  도표 참조 …

## 사용자 스토어에서 아이템 선택 -> 어플이 앱 스토어에 결재 요청 전송 -> 앱 스토어 결재한 후 결재완료 리턴 -> 어플이 영수증 받고 서버로 보냄 …
—-> ** 서버가 앱 스토어로 확인 영수증 데이터 보냄. -> ** 앱 스토어가  영수증이 유효한지 확인한 후 영수증과 확인 되었는지 보냄 -> 서버가 반환된 영수증을 통해 구매 물품 확인 -> 서버가 구매 물품 어플에 전달.

애플은 서버로부터 PI를 받는 것을 추천.. plist에 저장은 비추.. >> 업데이트 없이 물품 추가하는 유연성 제공.

서버가 영수증을 받고 물품 확인 하는 절차.. Verifying Store Receipts..

서버 모델은 추가적인 보안, 신뢰성 부가… 보안코딩 가이드 참조할것..

Non-consumable 제품은 스토어 킷의 기능을 이용해 회복 가능하지만, non-renewing 제품은 당신의 서버에 저장되야 한다. 이 정보를 저장하는 것은 네 책임이다. Consumable 제품 역시 당신 서버에 의해 추적가능하다.  이 제품이 서버에 의해 제공되는 것이면, 사용자가 각 기기에서 수습하게 할 수 있다.

Retrieving Product Information

어플이 스토어를 보여줄 준비가 되면, 앱 스토어로부터의 정보를 UI 에 덧붙여야 함.  이 장은 앱 스토어에 제품 디테일을 요청하는 방법에 관한 것임.

Sending Requests to the App Store

스토어 킷은 요청하는 메카니즘 제공.  request 객체를 생성, 초기화 딜리깃을 붙이고 요청 시작. 시작하면 앱 스토어에 전달. 앱 스토어가 요청을 실행하면 딜리깃이 비동기적으로 불려서 결과를 전달함.

SKRequest : abstract base class

SKRequestDelegate : protocol  : 구현할 부분. 성공/실패 에 대하여

Requesting Information About Products

어플은 제품에 대해 로컬 정보를 얻기 위해 products request 를 사용.
어플이 product identifier string 의 리스트를 포함하는 request 를 생성. 앞에서 설명한대로 어플은 PI를 어플 내부에 임베드하거나 혹은 서버를 통해 갱신할 수 있다.  request 를 시작하면 identifier string 이 앱 스토어에 넘겨진다. 앱 스토어가 iTunes Connect 에서 입력한 로컬화된 정보로 응답한다. 이 디테일로 당신 스토어의 UI에 덧붙여라.

##** 중요 : 제품 구매를 허락하기 전에 특정 제품 identifier 를 요청해야 함. 앱 스토어로부터 제품 정보를 갱신하므로 제대로 된 제품을 파는 것을 보장할 수 있음.

SKProductsRequest

product identifier 의 리스트와 함께 생성.  상점에 진열될..

SKProductsRequestDelegate  프로토콜

상점으로부터의 반응을 받기 위해 구현.  요청이 성공되면 대답을 받음.

SKProductsResponse

스토어에 의해 인식되지 않은 PI의 리스트 뿐만 아니라 원래 요청의 유효한 PI 마다 하나의 SKProduct 객체를 갖고 있음. 스토어는 여러 이유로 식별하지 못할 수도 있음 : 오타, 판매 불가로 표시,  iTunes Connect 에서의 변경이 모든 앱 스토어 서버로 전달되지 않아서.

SKProduct

앱 스토어에 등록한 제품에 대해 로컬 정보를 제공함.

Prime31. Social Network Plugin of Unity3d

플러그인 기초

# ~~ binding.cs 가 항상 있슴.

# iOS 에서 유니티로 콜백함수를 받는 경우.  *Manager.cs 가 있슴.  콜백이 제대로 전달되기 위해 GameObject 에 할당되야 함. 런타임 시 GameObject의 이름이 클래스 이름으로 바뀜. 그러므로 클래스 이름을 바꾸지 말것. 프리팹을 쓸 경우 첫 씬에 포함하면 게임 중에 계속 살아있을 것임.

# 여러 플러그인은 *EventListener.cs 을 갖으며 프리팹에 연결되 있다. 어떻게 작동하는 지 보여주기 위해 거기 있다. 이것을 포함할 필요는 없다. 테스트 씬에서 사용할 것.

# testSupport : 이 디렉토리 안에 간단한 예제가 있슴.

어떤 플러그인은 ‘프리팹’ 디렉토리를 갖는다. 프리팹을 쓰던 *binding.cs 를 직접 쓰던 자유다. 프리팹은 코딩 없이 제공하기 위해서. manager 프리팹이 있으면 최초 로딩 씬에 포함되야 한다. 이것은 네이티브와 통신하는 역할.

‘testSupport’ 폴더에는 항상 테스트 씬이 있음. 이걸 실행하면서 Xcode 디버깅 콘솔을 볼 것.

처음 빌드할 때 Xcode 를 닫아둘 것.  Build (Build and Run이 아니라) 를 하지 않으면 세팅이 잘못 될 수 있음. 스크립트가 실행 될 때 Finder 노트가 뜰 것임.

Social Networking

최신 버전으로 실행할 것..  Facebooks Single Sign On authentication system will only work if your app is set to run in the background.  <- 백 그라운드로 실행 될 때만 작동한다 ??

–> Exit on Suspend 가 체크되면 안된다..  그래서 그렇군…

더 작업하기 전에 트위터/페북 에서 작업을 해야 한다.. (앱 등록 등등..)

대안으로 로그인 프로세스로 oAuth를 쓸 수 있다. 인앱브라우저 형식으로 트위터 페이지를 보여줘서 사용자가 로그인 하게 함.  트위터가 xAuth 를 허가하지 않으면 oAuth로 해야함.
oAuth를 선택하면 트위터 사이트에 ‘브라우저 앱’으로 당신의 앱을 셋업해야 한다.  이것은 등록 시 콜백 url 을 넣으므로 가능하다.  그건 사용되지 않지만, 인증을 위해 필요하다. 당신이 입력하는 redirect url 은 사용되든 안되든 상관없다. 구글닷컴도 완전히 유효하다.

페북 : 페북 개발자에서 셋업 필요.   FacebookBinding.init 메서드에서 어플 아이디를 써야 한다.  페북은 single sign on 을 쓴다. 이것은 info.plist 파일의  URL 셋업을 요구한다.  물론 우리는 이것들을 편하게 할 수 있는 방법을 제공한다.  더 알아보려면 Facebook SDK 를 참조하라. 추가적인 단계는 쉬우며 비디오 참조..

  • Choose “Info.plist additions” from the Prime31 menu in Unity
  • Add a new CFBundle URLScheme by setting it’s Size to 1
  • Enter “fb” followed by your Facebook application Id. (ex. fb123456)
  • Click Save Changes

그 이후에는 페북에 글을 올리거나 …. 메시지 이용… 사진을 올릴 수 있다.

좀 더 높은 수준의 graph API 를 쓰려면 …