2017-09-03 3 views
1

내 Android 앱이 LVL을 구현하고 시작되면 유효한 라이선스를 확인합니다. ServerManagedPolicy를 사용하고 있습니다. 테스트 계정을 사용하거나 Play 스토어에서 앱을 구입할 때마다 라이센스가없는 응답이 제공되고 사용자가 매우 짜증을냅니다.앱 구매시 Google Play 무면허 응답

관련 코드 :

final Random r = new SecureRandom(); 
    byte[] SALT = new byte[20]; 
    r.nextBytes(SALT); 

    lkey = "MyGooglePlayKey(hidden)"; 

    android_id = Settings.Secure.getString(getApplicationContext().getContentResolver(), Settings.Secure.ANDROID_ID); 

    mLicenseCheckerCallback = new MyLicenseCheckerCallback(); 
    mChecker = new LicenseChecker(
      this, new ServerManagedPolicy(this, 
      new AESObfuscator(SALT, getPackageName(), android_id)), lkey); 

Settings.Secure.getString(getApplicationContext().getContentResolver(), Settings.Secure.ANDROID_ID)에 문제가 있습니까? 당연히 Android 개발자는 장치 ID를 얻는 방법에 전혀 도움이되지 않으며 다른 방법을 사용하려면 다른 권한이 필요합니다. 내 메소드를 사용하면 Android Studio에서 "getString을 사용하여 장치 식별자를 얻지 않는 것이 좋습니다"라고 말합니다. 때문에 아주 오래된 롤리팝 버그의

내 LicenseChecker 클래스는 명시 적 의도를 사용하도록 변경해야했다 :

if (mService == null) { 
      Log.i(TAG, "Binding to licensing service."); 
      try { 
       Intent serviceIntent = new Intent(new String(Base64.decode("Y29tLmFuZHJvaWQudmVuZGluZy5saWNlbnNpbmcuSUxpY2Vuc2luZ1NlcnZpY2U="))) 
         .setPackage("com.android.vending"); 

       boolean bindResult = mContext.bindService(serviceIntent, 
         this, // ServiceConnection. 
         Context.BIND_AUTO_CREATE); 

내 LVL 라이브러리를 사용하는 것과 같은 targetSDK/내 응용 프로그램으로/minSDK 컴파일 :

android { 
compileSdkVersion 26 
buildToolsVersion "26.0.1" 
useLibrary 'org.apache.http.legacy' 

defaultConfig { 
    minSdkVersion 17 
    targetSdkVersion 26 
} 

buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 
    } 
} 

dependencies { 
    compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1' 
} 

NamePairValueURLEncodedUtils 메소드가 사용되지 않으므로 이러한 Apache 대체품을 사용해야했습니다.

답변

0

저는 전문가는 아니지만 소금이 앱에 무작위 적이기 때문에 무작위라고 생각합니다. 즉석에서 생성하지 마십시오. documentation을 참조하십시오.

AESObfuscator를 사용하려면 먼저 Activity로 가져 오십시오. 솔트 바이트를 보관 유지하기 위해서 private static final 배열을 선언 해, 그것을 랜덤에 생성 된 20 바이트에 초기화합니다.

... 
// Generate 20 random bytes, and put them here. 
private static final byte[] SALT = new byte[] { 
-46, 65, 30, -128, -103, -57, 74, -64, 51, 88, -95, 
-45, 77, -117, -36, -113, -11, 32, -64, 89 
}; 
... 
+0

안타깝게도 작동하지 않았습니다. 그냥 그것을 사용하여 업데이 트를 추진하고 여전히 오류가 발생했습니다. –

+0

Google 지원팀에 문의했으며 라이선스 서버가 라이선스 응답을 반환한다고 알려 왔습니다. –