java - Android 许可证验证检查始终返回错误代码 6

标签 java android android-lvl

我的 LicenseCheckerCallback 调用方法 applicationError 并返回错误代码 6。 在我的 LogCat 中,我得到以下 JavaStack:

02-27 08:55:18.258: I/LicenseChecker(19572): Binding to licensing service.
02-27 08:55:18.268: D/dalvikvm(19572): threadid=1: still suspended after undo (sc=1 dc=1)
02-27 08:55:18.268: D/dalvikvm(19572): GC_CONCURRENT freed 112K, 12% free 7284K/8263K, paused 12ms+2ms, total 27ms
02-27 08:55:28.233: I/System.out(19728): broadcast Received
02-27 08:55:29.408: I/System.out(19572): DIALOG_RETRY Error
02-27 08:55:29.603: E/ActivityThread(19572): Activity My_company.My_appname.LicenseVerification has leaked ServiceConnection com.google.android.vending.licensing.LicenseChecker@41da7698 that was originally bound here
02-27 08:55:29.603: E/ActivityThread(19572): android.app.ServiceConnectionLeaked: Activity My_company.My_appname.LicenseVerification has leaked ServiceConnection com.google.android.vending.licensing.LicenseChecker@41da7698 that was originally bound here
02-27 08:55:29.603: E/ActivityThread(19572):    at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:966)
02-27 08:55:29.603: E/ActivityThread(19572):    at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:860)
02-27 08:55:29.603: E/ActivityThread(19572):    at android.app.ContextImpl.bindService(ContextImpl.java:1364)
02-27 08:55:29.603: E/ActivityThread(19572):    at android.app.ContextImpl.bindService(ContextImpl.java:1356)
02-27 08:55:29.603: E/ActivityThread(19572):    at android.content.ContextWrapper.bindService(ContextWrapper.java:401)
02-27 08:55:29.603: E/ActivityThread(19572):    at com.google.android.vending.licensing.LicenseChecker.checkAccess(LicenseChecker.java:150)
02-27 08:55:29.603: E/ActivityThread(19572):    at My_company.My_appname.LicenseVerification.bCheckLicense(LicenseVerification.java:84)
02-27 08:55:29.603: E/ActivityThread(19572):    at My_company.My_appname.LicenseVerification.onCreate(LicenseVerification.java:65)
02-27 08:55:29.603: E/ActivityThread(19572):    at android.app.Activity.performCreate(Activity.java:5188)
02-27 08:55:29.603: E/ActivityThread(19572):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
02-27 08:55:29.603: E/ActivityThread(19572):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
02-27 08:55:29.603: E/ActivityThread(19572):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
02-27 08:55:29.603: E/ActivityThread(19572):    at android.app.ActivityThread.access$700(ActivityThread.java:140)
02-27 08:55:29.603: E/ActivityThread(19572):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237)
02-27 08:55:29.603: E/ActivityThread(19572):    at android.os.Handler.dispatchMessage(Handler.java:99)
02-27 08:55:29.603: E/ActivityThread(19572):    at android.os.Looper.loop(Looper.java:137)
02-27 08:55:29.603: E/ActivityThread(19572):    at android.app.ActivityThread.main(ActivityThread.java:4921)
02-27 08:55:29.603: E/ActivityThread(19572):    at java.lang.reflect.Method.invokeNative(Native Method)
02-27 08:55:29.603: E/ActivityThread(19572):    at java.lang.reflect.Method.invoke(Method.java:511)
02-27 08:55:29.603: E/ActivityThread(19572):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
02-27 08:55:29.603: E/ActivityThread(19572):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
02-27 08:55:29.603: E/ActivityThread(19572):    at dalvik.system.NativeStart.main(Native Method)
  • 我的许可证验证实现:

    public class LicenseVerification  extends Activity {
    
    private static final int LICENSED = 0x0;
    private static final int NOT_LICENSED = 0x1;
    private static final int LICENSED_OLD_KEY = 0x2;
    private static final int ERROR_NOT_MARKET_MANAGED = 0x3;
    private static final int ERROR_SERVER_FAILURE = 0x4;
    private static final int ERROR_OVER_QUOTA = 0x5;
    
    private static final int ERROR_CONTACTING_SERVER = 0x101;
    private static final int ERROR_INVALID_PACKAGE_NAME = 0x102;
    private static final int ERROR_NON_MATCHING_UID = 0x103;
    
    ApplicationContextProvider application;
    
     private static final byte[] SALT = new byte[] {
            -46, 65, 37, -128, -103, -57, 74, -64, 51, 88, -91, -45, 77, -17, -36, -113, -11, 32, -64,
            89
        };
    
     private LicenseCheckerCallback mLicenseCheckerCallback;
     private LicenseChecker mChecker;
     private static final String BASE64_PUBLIC_KEY = "MYKEY";
    
     public void sendBackLicenseCheck(String sStatus, int errorCode){
            Intent replyIntent = new Intent("My_company.My_app.A_CUSTOM_INTENT");
            replyIntent.putExtra("Status", sStatus);
            replyIntent.putExtra("ErrorCode", errorCode);
            this.sendBroadcast(replyIntent);
     }
     public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Toast.makeText(this, "LicenseVerification ", Toast.LENGTH_SHORT);
            CheckLicense();
            finish();
     }
     public void CheckLicense(){
            Context AppContext=application.getContext();
            String sPackageName=AppContext.getPackageName();
            //Toast.makeText(this, "sPackageName: "+sPackageName, Toast.LENGTH_LONG).show();
            mLicenseCheckerCallback = new MyLicenseCheckerCallback2();
            String deviceId = Secure.getString(AppContext.getContentResolver(), Secure.ANDROID_ID);
            mChecker = new LicenseChecker(this, new ServerManagedPolicy(AppContext, new AESObfuscator(SALT, sPackageName, deviceId)),BASE64_PUBLIC_KEY);
            mChecker.checkAccess(mLicenseCheckerCallback);
     }
     private class MyLicenseCheckerCallback2 implements LicenseCheckerCallback {
            public void allow(int reason) {
                System.out.println("Allow");
                sendBackLicenseCheck("Allow",-1);
            }
            public void dontAllow(int reason) {
    
                sendBackLicenseCheck("Deny",0);
                System.out.println("DIALOG_GOTOMARKET");
    
                if (reason == Policy.RETRY) {
                    System.out.println("DIALOG_RETRY");
                } else {
                    System.out.println("DIALOG_GOTOMARKET");
                }
            }
            @Override
            public void applicationError(int errorCode) {
                sendBackLicenseCheck("Error",errorCode);
                System.out.println("DIALOG_RETRY Error");
            }
        }
    }
    
  • 我已在 BETA 测试阶段发布了该应用,并为我的代码获取了 BASE64_PUBLIC_KEY。

  • 我已在开发者控制台的 LICENSETEST 下的设置中添加了一个许可证测试帐户

  • 我将测试响应设置为已许可

现在,当我使用 eclipse 在我的电脑上本地调试应用程序时,我看到我的 LicenseCheckerCallback (MyLicenseCheckerCallback2) 调用 applicationError,错误代码为 6。我没有找到有关代码 6 的任何信息,我不知道可能是什么原因。

有什么提示吗?

最佳答案

错误代码 6 表示您的应用没有 com.android.vending.CHECK_LICENSE允许。您需要在 list 中声明您的应用使用此权限。

关于java - Android 许可证验证检查始终返回错误代码 6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28760314/

相关文章:

android - 某些设备上的对话框未填满整个窗口

android - 如何在不从市场购买的情况下测试许可的 android apk?

java - 如何使用 Gradle 拉取 Maven 测试 jar ?

java - 我可以避免使用多个计时器吗?

java - 当我按下连续按钮时,为什么它不连续运行?

设备上的 Android 许可服务器

android - 为什么绑定(bind)/启动服务不起作用(lvl)

Java注解字段setter和getter如何

java - 列表项 li 未通过 Selenium WebDriver 从下拉列表中选择

java - 为什么 String hashCode 没有大小限制?