2011년 6월 28일 화요일

Android Market LVL(License Validation Library) Application

LVL은 Android Version 1.5이상, 그리고 Pay Application 에만 적용이 가능하다.



 패키지를 설치하고 나면 Android SDK를 설치한 곳에 market_licensing 폴더가 생성되고, 그 안에 library 폴더를 이용해 LVL를 사용한다.


http://market.android.com/publish/Home 접속 -> 마켓로고 아래 Edit profile » 클릭



Public Key를 사용해서 LVL을 적용 할 것이다.
workspace에 library를 프로젝트로 추가시켜 놓자.

Contents 를 Create project from existing source로 바꾸고 library폴더를 지정하면 자동으로 입력이 된다.

이제 LVL을 적용할 프로젝트를 우클릭 -> properties

Android 탭 -> Library Add -> Library 선택 -> 적용 후 확인
프로젝트에 라이브러리를 추가하는 것 까지는 완료되었다. 이제부터는 LVL을 적용시켜보자.
먼저, 매니페스트에 퍼미션을 추가시킨다.
   <USES-PERMISSION android:name="com.android.vending.CHECK_LICENSE" />
<USES-PERMISSION android:name="android.permission.READ_PHONE_STATE" />


메인 액티비티에 소스를 추가하고 Ctrl + Shift + O 를 사용해 import 시키자.

// public key
private static final String BASE64_PUBLIC_KEY = "자신의 public key";
// 20개의 랜덤한 byte
private static final byte[] SALT = {-46, 65, 30, -128, -103, -57, 74, -64, 51, 88, -95, -45, 77, -117, -36, -113, -11, 32, -64, 89};
private LicenseCheckerCallback mLicenseCheckerCallback;
private LicenseChecker mChecker;
@Override
protected void onDestroy() {
 super.onDestroy();
 mChecker.onDestroy(); // 어플리케이션 종료시 메모리 반환
}
public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       mLicenseCheckerCallback = new MyLicenseCheckerCallback();
       TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
       String deviceId = tm.getDeviceId();
       // 초기화
       mChecker = new LicenseChecker( this
         , new ServerManagedPolicy(this, new AESObfuscator(SALT, getPackageName(), deviceId))
         , BASE64_PUBLIC_KEY);
       // 실행
       mChecker.checkAccess(mLicenseCheckerCallback);
        setContentView(R.layout.main);
   }
private class MyLicenseCheckerCallback implements LicenseCheckerCallback {
 @Override
 public void allow() {
  if (isFinishing()) {
   return;
  }
  // 인증 성공
  Log.v(null,"OK");
 }
 @Override
 public void applicationError(ApplicationErrorCode errorCode) {
  // error
  Log.v(null,"error");
 }
 @Override
 public void dontAllow() {
  if (isFinishing()) {
   return;
  }
  // 인증 실패
  Log.v(null,"fail");
 }
}

댓글 없음:

댓글 쓰기