2011-01-30 4 views
3

무료 앱 A를 가지고 있습니다. 기부금 앱인 앱 B를 가지고 있습니다. 나는 사람들이 커피에 4 달러를 지불하고 다른 채널을 통해 무료로 내 앱을 얻는 것을 잘 알고 있지만 오 잘.애플리케이션 B가 시장에서 합법적으로 구매되었는지 확인하기 위해 애플리케이션 A에서 Android Market License 서버를 쿼리 할 수 ​​있습니까?

앱 B가 합법적이고 시장에서 나와 비용을 지불하면 앱 A에서 더 많은 기능을 사용하고 싶습니다.

그래서 앱 A가 앱을 실행하고 있어도 앱 B를 확인하기 위해 시장 라이센스 코드에서 패키지 이름을 변경하면 궁금합니다.

mChecker = new LicenseChecker(ctx, new ServerManagedPolicy(ctx, 
new AESObfuscator(SALT, ctx.getPackageName(), deviceId)), 
BASE64_PUBLIC_KEY); 

나는 물론 나는 알고 내 응용 프로그램입니다 응용 프로그램 B에서 패키지 이름으로 ctx.getPackageName()를 대체하고 싶습니다 :

예를 들어,이 라인은 LVL 라이브러리 코드에서입니다 . 예 :

mChecker = new LicenseChecker(ctx, new ServerManagedPolicy(ctx, 
new AESObfuscator(SALT, com.something.app.b, deviceId)), 
BASE64_PUBLIC_KEY); 

누구나이 경험이 있습니까?

+0

5개월 후, 휴식 것, 나는 임의의 downvote를 얻을 수 이것에 ... 누군가 내가 모르는 뭔가를 알고 있니? 의견을 말하고 도와주세요. – trgraglia

답변

1

obfuscator 생성자에 대한 인수를 변경하면 원하는 것을 수행 할 수 없습니다. 검사 된 패키지는 첫 번째 인수에서 LicenseChecker 생성자에 의해 결정됩니다. 패키지 B의 패키지 이름과 버전 코드를 사용하는 LicenseChecker에 대한 새 생성자를 정의 할 수 있습니다.

앱 A도 자체 라이센스를 확인하려는 경우 ServerManagedPolicy도 확장해야합니다. 앱 A의 환경 설정 파일에서 각 앱에 대한 캐시 데이터를 분리하십시오. 당신이 시장에서 응용 프로그램 B를 업데이트 할 경우 응용 프로그램 A.으로 특정 버전의 코드에 와이어로해야하므로이 작동하는 경우에도

주, 그것은

+0

환경 설정을 공유하는 것이 더 나은 방법이라고 생각하십니까? – trgraglia

+2

그럴 수 있습니다. App A는 App B의 캐시 된 유효성 검사 데이터에 액세스하여 기본 정책이 사용하는 것과 거의 동일한 논리를 사용하여 현재 있는지 확인합니다. (앱 B가 유효성이 확인되지 않은 경우 앱 A는 유효성을 검사하지 않으며 라이센스 서버에 쿼리하지 않을 것이라고 가정 할 수 있습니다. 이는 100 % 정확하지는 않지만 특정 목적에 충분할 수 있습니다. B가 사용하는 라이선스 라이브러리를 수정하여 앱 A에서 결과를 해독 할 수 있습니다. 기본 암호화를 공유 할 수 없다고 생각합니다. –

+0

의미가 있습니다 ... 동일한 인증서로 서명 한 경우 B의 mode_private에 액세스 할 수도 있습니다 암호화하지 않고 캐시 된 결과를 읽습니다. 실시간 인 경우 암호화되어 있지 않더라도 차이가 발생하지 않아야합니다. – trgraglia