2011-07-06 2 views
2

유료 앱을 안드로이드 마켓에 게시하려고합니다. 앱은 LVL (Application Licensing)을 사용합니다. 라이선스를 확인하려면 기기의 고유 ID를 제공해야합니다.애플리케이션 라이선스 및 Android 고유 ID

Secure.getString(getContentResolver(), Secure.ANDROID_ID); 

나는 또한 TelephonyManager 클래스를 사용할 수 있지만이 의존 할 수 있도록 응용 프로그램은 또한 태블릿 기기를 대상으로 : 문제는 호출 할 때 (때문에 알려진 문제에 대한) 일부 안드로이드 장치가 같은 '독특한'ID를 가지고있다 그걸로.

혹시라도 LVL을 사용하는 사람이 있다면 LicenseChecker() 객체를 만들 때 devices'id를 어떻게 얻었는지 알려주십시오. 나는 단지 같은 장치 ID를 가진 두 명의 사용자가 앱을 구매하려고 할 때 어떤 일이 벌어 질 수 있는지 이해하려고 노력하고 있습니다.

답변

1

동일한 ID를 가진 두 개의 기기가 다른 기기에 무료로 앱을 제공하지만 LVL은 여전히 ​​Google ID와 호환됩니다. LVL은 Google의 인증을 사용하기 때문에 ID가 동일하고 Google ID가 동일한 사용자가 동일한 앱을 구매하는 경우가 거의 없습니다. 특히 그들은 이미 그것을 소유하고 있기 때문에!

그 아래 시도 도움이되지 않는 경우 :

http://developer.android.com/guide/publishing/licensing.html 상태 :

가 장치 식별자를 유지하고 필요한 방법으로 값을 생성하는 변수를 선언합니다. 예를 들어, LVL에 포함 된 샘플 응용 프로그램은 각 장치에 고유 한 android.Settings.Secure.ANDROID_ID에 대한 시스템 설정을 쿼리합니다.

사용하는 API에 따라 응용 프로그램에서 장치 별 정보를 얻기 위해 추가 사용 권한을 요청해야 할 수 있습니다. 예를 들어 장치 IMEI 또는 관련 데이터를 가져 오도록 TelephonyManager를 쿼리하려면 응용 프로그램이 매니페스트에서 android.permission.READ_PHONE_STATE 권한을 요청해야합니다.

Obfuscator에서 사용하기위한 장치 별 정보를 얻기위한 새로운 권한을 요청하기 전에 일부 권한으로 인해 SDK 빌드 도구가 추가로 인해 Android 마켓에서 응용 프로그램이나 필터링에 영향을 미칠 수 있습니다. 관련). 이 공식 안드로이드 개발자 블로그 포스팅 참조 응용 프로그램에서 설치된 각 안드로이드 장치에 대한 고유 식별자를하는 방법에 대한 자세한 지침은

1

:

http://android-developers.blogspot.com/2011/03/identifying-app-installations.html

그것은 가장 좋은 방법은 것은 당신입니다 설치시 자신을 생성하고 응용 프로그램이 다시 실행될 때 읽습니다.

개인적으로는 받아 들일 만하지만 이상적이지 않습니다. Android에서 제공하는 식별자는 대부분 휴대 전화의 무선 상태 (Wi-Fi 켜기/끄기, 휴대 전화 켜기/끄기, 블루투스 켜기/끄기)에 따라 다르므로 모든 인스턴스에서 작동합니다. Settings.Secure.ANDROID_ID와 같은 다른 제품은 제조업체에서 구현해야하며 고유성이 보장되지 않습니다.

다음은 응용 프로그램이 로컬에 저장하는 다른 데이터와 함께 저장되는 INSTALLATION 파일에 데이터를 쓰는 예제입니다.

public class Installation { 
    private static String sID = null; 
    private static final String INSTALLATION = "INSTALLATION"; 

    public synchronized static String id(Context context) { 
     if (sID == null) { 
      File installation = new File(context.getFilesDir(), INSTALLATION); 
      try { 
       if (!installation.exists()) 
        writeInstallationFile(installation); 
       sID = readInstallationFile(installation); 
      } catch (Exception e) { 
       throw new RuntimeException(e); 
      } 
     } 
     return sID; 
    } 

    private static String readInstallationFile(File installation) throws IOException { 
     RandomAccessFile f = new RandomAccessFile(installation, "r"); 
     byte[] bytes = new byte[(int) f.length()]; 
     f.readFully(bytes); 
     f.close(); 
     return new String(bytes); 
    } 

    private static void writeInstallationFile(File installation) throws IOException { 
     FileOutputStream out = new FileOutputStream(installation); 
     String id = UUID.randomUUID().toString(); 
     out.write(id.getBytes()); 
     out.close(); 
    } 
}