我想将付费应用程序发布到Android市场,所以我将android LVL添加到我的apk中.我已在手机上测试过了.当我安装应用程序时,它会显示检查手机状态,市场许可证的权限.安装完成后,我尝试运行并提示"未找到许可证并进入市场购买".它似乎工作,因为没有从市场下载不允许运行apk.
现在的问题是,我如何测试或模仿买家的情况?这意味着买家可以在购买我的应用后运行我的应用.如果他们无法运行并提示购买后未找到许可证,那么我的许可证检查有问题.我已经将我的gmail包含在market.android.com的仪表板中的"编辑个人资料"中.我将状态更改为LICENSED,NON-LICENSED,OLD LICENSED.但没有回复发送到我的Gmail.所以我不知道该怎么做.
它是否已在Google许可证服务器上完成,还是需要修改Android市场许可证代码包?我检查是否有代码处理案件的请求,如许可证,无许可证,旧许可证,市场错误等.
这是因为Android模拟器中没有市场,我也无法在帐户中添加谷歌帐户(仅限交换帐户)并在模拟器中同步(在1.6,2.2和2.3中尝试过).所以我只能在我真正的Android手机上测试.
任何人都有经验或一些方法来测试付费应用程序而无需从市场上购买自己的应用程序,如果有人购买我的应用程序,我如何测试许可证服务器的响应?
我有一个可接收高级内容的Android应用,我想在服务器端验证该应用是通过Android Market购买的。我可以使用许可服务来检查对应用程序的访问,有没有办法从服务器连接到许可服务?如果没有,我可以使用Google Checkout API数据来验证购买吗?
我希望能够为我的应用程序制作一个有时间限制的试用版,但我不确定如何可靠地确定用户是否在到期日后尝试重新安装该应用程序.
我可能会将初始安装日期存储在卸载时不会被删除的存储位置,但这似乎不是一种理想的方法.Google Play的应用程序许可是否支持此功能,还是有其他可接受的方法来实现此功能?
我想在我的Android许可证政策中满足LICENSE_OLD_KEY.我打算修改ServerManagedPolicy它,因为它不适合这个,据我所知,它似乎只是寻找Policy.LICENSED或Policy.NOT_LICENSED在processServerResponse方法:
public void processServerResponse(int response, ResponseData rawData) {
// Update retry counter
if (response != Policy.RETRY) {
setRetryCount(0);
} else {
setRetryCount(mRetryCount + 1);
}
if (response == Policy.LICENSED) {
// Update server policy data
Map<String, String> extras = decodeExtras(rawData.extra);
mLastResponse = response;
setValidityTimestamp(extras.get("VT"));
setRetryUntil(extras.get("GT"));
setMaxRetries(extras.get("GR"));
} else if (response == Policy.NOT_LICENSED) {
// Clear out stale policy data
setValidityTimestamp(DEFAULT_VALIDITY_TIMESTAMP);
setRetryUntil(DEFAULT_RETRY_UNTIL);
setMaxRetries(DEFAULT_MAX_RETRIES);
}
setLastResponse(response);
mPreferences.commit();
}
Run Code Online (Sandbox Code Playgroud)
我想知道LICENSE_OLD_KEY的响应代码是什么,因为Policy中不存在:
public static final int LICENSED …Run Code Online (Sandbox Code Playgroud) 我只是遵循标准的Android许可证检查程序,最近我得到了这些报告:
java.lang.NullPointerException
at com.google.android.vending.licensing.LicenseValidator.verify(LicenseValidator.java:99)
at com.google.android.vending.licensing.LicenseChecker$ResultListener$2.run(LicenseChecker.java:228)
at android.os.Handler.handleCallback(Handler.java:605)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.os.HandlerThread.run(HandlerThread.java:60)
Run Code Online (Sandbox Code Playgroud)
这意味着什么?这是正常的吗?我以前从来没有这样做过.由于有问题的应用程序越来越受欢迎 - 这是否表明有人试图以某种方式破解应用程序以避免支付?
非常感谢您的见解!
我终于准备好发布我的第一个应用了.我进去做付费版本,它说我需要在我的二进制文件中添加一些代码.我不知道那是哪里.这是它在页面上的内容(开发指南似乎已经过时了,这个新方法):
SERVICES & APIS
LICENSING & IN-APP BILLING
Licensing allows you to prevent unauthorized distribution of your app. It can also be used to verify in-app billing purchases. Learn more about licensing.
YOUR LICENSE KEY FOR THIS APPLICATION
Base64-encoded RSA public key to include in your binary. Please remove any spaces.
"a bunch of random numbers and letters"
Run Code Online (Sandbox Code Playgroud) 有几种方法可以识别设备 - IMEI/IMSI/ESN,GoogleID,您自己的加密GUID,保存在私人商店等等.但是,只要人们每3-6个月切换一次设备,重要的是不要识别设备而是确切地说是用户.
我们知道Google使用唯一ID来识别允许在Google Play上购买的用户(电子邮件)等.此外,我们知道谷歌拒绝开发者访问此ID,保存并用于垃圾邮件等.实际上,现在我们可以使用客户经理来获取它,至少其中一个.至少我不知道如何区分哪个帐户处于活动状态并用于购买我的应用程序.
在Widows Phone中,我看到了一个明智的方法:系统为开发人员提供了一些来自用户帐户ID /电子邮件的哈希值.除了识别您的用户之外,您无法对其执行任何操作.正是我想要做的!即使有人会窃取这个身份证,他也不能将其用作电子邮件或其他任何东西.
所以我搜索类似的东西.我仍然没有找到关于如何安全地识别用户的明确信息.有很多帖子,很多意见,但仍然没有明确和可理解的方式.
到目前为止,在IAP安全方案中,我想到在设备上获取所有谷歌帐户并记住我或谷歌服务器上的双md5用于特定购买/订单_no.稍后,当我的应用程序的任何实例将请求此购买时,发送其所有者google-id的双md5,服务器将比较它记住此特定购买/ order_no的至少一个帐户是否等于该ID,然后将回复得当.
但也许有更明确的方案?
android user-identification userid in-app-purchase android-lvl
我将发布Android和ios的付费应用程序.我希望一个帐户只能在一台设备上安装和运行.否则我想阻止第一台设备上的应用程序.有没有办法做到这一点?
注意:我知道Google Play有一个lvl.但我不确定,它确实如此.对不起我的英语不好.
我在ServerManagedPolicy中使用AESObfuscator进行Android许可.到现在为止,我已经创建了这样的deviceId:
String deviceId = Secure.getString( getContentResolver(), Secure.ANDROID_ID );
Run Code Online (Sandbox Code Playgroud)
在互联网上的所有示例中都是这样做的,但有时会说它不是很安全,但没有描述其他方式.我已经读过ANDROID_ID可以很容易地改变,甚至可以为null,所以我真的想要另一种方法来获得一个唯一的id.对于已经购买我的应用程序的人来说,许可证失败不止一次,而且我很确定它与此有关,否则它只会是谷歌的一个问题,我真的怀疑.
那我该怎么做呢?只需创建一个随机哈希并将其添加到deviceId(当然将其存储在某处......?)
我在我的应用程序中实现了LVL服务器托管策略.我知道lvl服务器响应会在设备中缓存一段时间,因此用户可以在没有internt连接的情况下使用应用程序(然后lvl使用缓存许可证).我想知道这段时间到底有多长,以及如何增加它.基本上,我每次应用程序启动时都会实施检查许可证,并且我希望将缓存有效时间增加到60天.