레이블이 Anti-replication인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Anti-replication인 게시물을 표시합니다. 모든 게시물 표시

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");
 }
}