2012-04-30 167 views
10

使用com.android.vending.licensing您可以检查您的应用程序是否已获得许可。有一个回调,applicationError(),告诉你是否有任何问题。今天我遇到错误ERROR_NOT_MARKET_MANAGED,我无法弄清楚我应该如何处理它!你如何处理LicenseCheckerCallback.ERROR_NOT_MARKET_MANAGED错误代码?

这里就是我所做的:

  1. 在谷歌玩,我说我的E-mail地址作为测试帐户。
  2. 在Google Play上,我用versionCode="10"保存了我的应用(未发布)。
  3. 在我的机器上,我更改为versionCode="11"
  4. 许可证检查现在失败,错误代码为ERROR_NOT_MARKET_MANAGED

问题是;我应该处理这个错误还是这是一个不切实际的情况?

回答

30

ERROR_NOT_MARKET_MANAGED:该名称确实告诉了所有关于它自身的信息,应用程序不受Android Market(现称为Google Play)管理。更具体地说,您的应用程序的第11版不会在Google Play中上传或发布。

我应该处理这个错误还是这是一个不切实际的情况?

我会认为这是不切实际的情况。只要您在Google Play中上传新的应用版本,就不需要执行任何特殊的代码。 ERROR_NOT_MARKET_MANAGED更像是LVL开发警告,它帮助开发人员正确实施许可证检查代码,并按照正确的程序在项目构建时测试许可证检查。检查出LVL示例代码中的注释:

private class MyLicenseCheckerCallback implements LicenseCheckerCallback { 

    ... ... 

    public void applicationError(ApplicationErrorCode errorCode) { 
     if (isFinishing()) { 
      // Don't update UI if Activity is finishing. 
      return; 
     } 
     // This is a polite way of saying the developer made a mistake 
     // while setting up or calling the license checker library. 
     // Please examine the error code and fix the error. 
     //String result = String.format(getString(R.string.application_error), errorCode); 
     //String result = "Error"; 
     //handleLicensingResult(result); 
    } 
} 

整合LVL到应用程序的整点是使用谷歌Play上发布您的应用程序,并使用谷歌播放客户端应用程序下载和安装应用程序(见Requirements and Limitations节开发指南)。我看不到,可在最终用户的设备上运行时造成这个的ApplicationError任何一点,如果:

  1. 开发者遵循正确的程序上传(用于测试LVL),或在谷歌发布(真正释放)播放。
  2. 最终用户使用Google Play客户端应用程序购买,下载并安装应用程序。

如果最终用户以某种方式从其他渠道(不通过Google Play购买)中获取应用程序副本(LVL已集成并上载/在Google Play中发布)并尝试将其安装到他的设备上(与Google播放安装在该设备上的客户端应用程序),在这种情况下,LicenseCheckerCallback将转到dontAllow()而不是applicationError(ApplicationErrorCode errorCode)。

+1

优秀的答案!谢谢。 – l33t

+0

似乎这个错误不是强制性的。我已经开发了两年多的应用程序,而且我在使用ICS的SamsungGalaxy S2上运行我的应用程序时只看到了这个错误。 – slott

+0

明智的回答这个,绝对精彩,很多人认为。 – Soham

13

不要在将应用上传到Google Play后立即测试您的应用。

等待一段时间(15-20分钟或可能更长),然后开始测试。 Google Play需要一些时间才能识别您的应用。

+4

我认为这是由您手机上的Google Play商店应用程序的缓存数据引起的,通过清除数据和/或缓存(设置 - 应用程序 - Google Play商店),我可以立即测试并获取许可证状态更改。 – yorkw

+0

或者更好的是,获得一个硬件设备,将其重置为出厂设置,然后将其主要用户帐户设置为您上传APK的开发者帐户。 – logray

+1

对我来说,花了一个多小时......我以为我做错了什么,但似乎有时候需要耐心等待。 – neon1

1

至于现在,2014年5月,为了测试上传的APK和扩展OBB,我必须发布测试应用(无需制作APK上传)。否则,当测试APKExpansionPolicy时,我总是得到ERROR_NOT_MARKET_MANAGED。发布后2小时(网页上的通知称“长达24小时”),我可以获取扩展文件信息。

除测试人员外,没有人可以看到已发布的应用程序AFAIK。

2

29 Jul,我发现虽然我的应用程序在Alpha或Beta测试中,但我所得到的只有Error 3或Error_Not_Market_Managed。这实际上是来自服务器的回复。这意味着我正在接触服务器并且代码很好。无论开发者控制台中的回复是什么,这都是我得到的唯一回复。

我已经等了3天,没有变化。所以没有等待时间是可以接受的。我甚至清除并重置了我的整个手机。我清除了Google Play缓存以及所有其他魔术技巧。他们都不是理由。

我使用新的Google许可证代码更新了一个已发布的应用程序,并得到了完全相同的响应。在我更改了版本代码并将其上传后,大约4小时后,该应用程序正常运行,并且Google许可证检查响应了一个很好的有效代码。现在,只要它已完全发布,它就会以我告诉它的任何代码进行响应。

所以答案是,谷歌许可证将无法正常运行,直到完全发布。如果您的应用程序处于Alpha或Beta版,并且您收到错误3,那么您可能会很好。在准备发布之前,只需注释许可证检查方法即可。

+0

如果您的应用在Google Play上存在不存在(发布或未发布)的'versionCode',则应放弃所有错误。我原来的问题实际上包含正确的答案;这是不切实际的情况。 – l33t

+0

“在我更改了版本代码,然后将其上传到大约4小时后,该应用程序正常运行”之后,可能是因为您更改了版本代码? 我也有同样的问题,而我仍然认为beta测试应该可以。 – Jacky

0

它也可以发生在旧设备。我正在测试我的应用程序,但没有发布实际版本,它在我的Galaxy S8上运行良好,但是我在Galaxy S4上收到了此消息。 这意味着这也是一种礼貌的方式,可以说这也可能是Google的错误。