经过几天的解决方案搜索,我发现了我的案例的错误。
使用 LicenseChecker,我看到监听器用代码 3 回调了一个 applicationError。这里的代码:
aep = new APKExpansionPolicy(this,
new AESObfuscator(ContentDownloaderService.SALT, getPackageName(), deviceId));
aep.resetPolicy();
checker = new LicenseChecker(this, aep,
BASE64_PUBLIC_KEY // Your public licensing key.
);
checker.checkAccess(new LicenseCheckerCallback() {
@Override
public void allow(int reason) {
System.out.println("Allow Reason "+reason);
}
@Override
public void dontAllow(int reason) {
System.out.println("Don't Allow Reason "+reason);
try {
switch (reason) {
case Policy.NOT_LICENSED:
System.out.println("Not licensed");
break;
case Policy.RETRY:
System.out.println("Retry");
break;
}
} finally {
}
}
@Override
public void applicationError(int errorCode) {
System.out.println("aplication error "+errorCode);
}
});
错误代码 3 是 ERROR_NOT_MARKET_MANAGED,您可以在此处查看完整的错误列表https://developer.android.com/google/play/licensing/licensing-reference.html#server-response-codes,在这里我可以获得有关该信息的信息error mean你如何处理 LicenseCheckerCallback.ERROR_NOT_MARKET_MANAGED 错误代码?
总结,这是因为我的本地版本与谷歌控制台上的版本不同,而发生在我身上是因为我的 versionCode 是由这样的脚本生成的:
def getBuildVersionCode() {
def date = new Date()
def formattedDate = date.format('yyMMddHHmm')
return (formattedDate as int) + 221066279;
}
def getBuildVersionName() {
return getBuildVersionCode().toString();
}
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "com.test.testing"
minSdkVersion 15
targetSdkVersion 21
versionCode getBuildVersionCode()
versionName getBuildVersionName()
}
所以每次我编译时都会得到一个新版本,显然那个版本不在谷歌控制台上。
我将我的 gradle 脚本更改为:
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "com.test.testing"
minSdkVersion 15
targetSdkVersion 21
versionCode 1731227595 // My actual version number of apk in google developer console.
versionName 1731227595
}
这救了我的命,我希望这个答案对任何人都有用..