相关疑难解决方法(0)

如何在本地最好地保存InApp购买状态?

我正处于完成我的第一个应用程序的边缘,剩下的最后一件事就是实现IAP计费,这就是为什么我目前正在阅读相关主题(包括加密,混淆和东西等安全问题).

我的应用程序是免费版本,能够通过IAP升级到完整版本,因此只有一个托管购买项目"溢价".我有几个问题:

在Google IAP API示例(trivialdrivesample)中,总是在MainActivity中检查IAP以查看用户是否购买了高级版本,通过

mHelper.queryInventoryAsync(mGotInventoryListener);

我的第一个问题:这是否意味着用户始终需要在应用启动时拥有互联网/数据连接,才能切换到高级版本?如果用户没有互联网连接怎么办?他会选择我猜的精简版,我觉得这很烦人.

所以我想到了如何在SharedPrefs或app数据库中本地保存isPremium状态.现在,我知道你无法阻止黑客对应用程序进行逆向工程,无论如何,即便如此,因为我没有服务器来进行服务器端验证.

然而,一个人根本无法在某处保存"isPremium"标志,因为这太容易被发现.

所以我在考虑这样的事情:

  • 用户购买Premium
  • 应用程序获取IMEI/Device-ID,XOR使用硬编码的String键对其进行编码,并将其保存在应用程序数据库中.

现在,当用户再次启动应用程序时:

  • App从数据库中获取编码的String,对其进行解码并检查decodeString == IMEI.如果是 - >溢价
  • 如果不是,则将调用正常的queryInventoryAsync以查看用户是否购买了premium.

您如何看待这种方法?我知道这不是超级固定,但对我而言,更重要的是用户不会烦恼(比如强制性的互联网连接),而不是应用程序将无法解决(无论如何这是不可能的).你有其他一些提示吗?

另一件事,我目前还不知道,是当用户卸载/重新安装应用程序时如何恢复事务状态.我知道API有一些机制,并且我的数据库可以通过应用程序导出和导入(因此编码的isPremium标志也可以导出/导入).好吧,我猜这将是另一个问题,当时机成熟时;-)

对这种方法的任何想法和评论都是受欢迎的,您认为这是一个很好的解决方案吗?或者我错过了什么/朝着错误的方向前进?

security android in-app-purchase

34
推荐指数
3
解决办法
6392
查看次数

刷新iventory时出错(查询商品价格).(回复:6:错误)

我面临的问题完全相同

应用内结算v3无法在没有网络连接或飞机/飞行模式下查询项目

它并不总是发生.您需要将手机切换到飞行模式,或关闭wifi,等待几个小时,只会出现问题.将显示以下错误消息.

无法查询iventory:IabResult:刷新iventory时出错(查询商品价格).(回复:6:错误)

作者建议使用

List<String> skulist = new ArrayList<String>();
skulist.add("my_sku_name1");
skulist.add("my_sku_name2");
mHelper.queryInventoryAsync(true, skulist, mGotInventoryListener);
Run Code Online (Sandbox Code Playgroud)

解决问题.

但是,它对我不起作用.同样的问题仍然存在.

有关此问题的任何解决方法吗?谢谢.

android

18
推荐指数
1
解决办法
9312
查看次数

如何防止Android的应用内购买商品被破解

我有一个免费下载Android应用程序,它附带应用程序内购买项目(非消耗品)

最近,我发现几个黑市都带有我的Android应用程序,所有应用内购买项目都可以自由访问.

我在想,这些饼干是怎么做到的?这就是我在我身边所做的.

  • 有计划来混淆我的Android代码.
  • 从Google官方示例中获取以下应用内购买代码.我onCreate会触发updateIsPremium.

代码如下

private void updateIsPremium() {
    if (mHelper != null) {
        return;
    }

    /* base64EncodedPublicKey should be YOUR APPLICATION'S PUBLIC KEY
     * (that you got from the Google Play developer console). This is not your
     * developer public key, it's the *app-specific* public key.
     *
     * Instead of just storing the entire literal string here embedded in the
     * program,  construct the key at runtime from pieces or
     * use bit manipulation …
Run Code Online (Sandbox Code Playgroud)

security android cracking

7
推荐指数
1
解决办法
2650
查看次数

标签 统计

android ×3

security ×2

cracking ×1

in-app-purchase ×1