当前位置: 首页 > 知识库问答 >
问题:

Google play商店应用内计费

陆星文
2023-03-14

我意识到每次应用程序运行时都没有必要检查谷歌play商店,尤其是如果购买已经准备好了。如果用户在使用应用程序时没有GPRS/WiFi,这也可能会导致问题!

因此,我在考虑创建一个共享偏好,它将作为检查用户是否购买了应用内购买的条件。

还有其他更安全的方法吗?正如我所读到的,共享首选项可以很容易地改变。

共有1个答案

向安福
2023-03-14

您可以使用ProGuard。

或者,您可以在共享首选项或数据库中使用一些加密文本以安全的方式保存购买状态。所以更难操纵它。

加密示例:

 MCrypt mcrypt = new MCrypt();
 String encrypted = MCrypt.bytesToHex(mcrypt.encrypt("Text to Encrypt"));
MCrypt mcrypt = new MCrypt();
String decrypted = new String(mcrypt.decrypt(encrypted));
public class MCrypt {

    private String iv = "fedcba9876543210";//Dummy iv (CHANGE IT!)
    private IvParameterSpec ivspec;
    private SecretKeySpec keyspec;
    private Cipher cipher;
    private String SecretKey = "0123456789abcdef";//Dummy secretKey (CHANGE IT!)

    public MCrypt() {
        ivspec = new IvParameterSpec(iv.getBytes());

        keyspec = new SecretKeySpec(SecretKey.getBytes(), "AES");

        try {
            cipher = Cipher.getInstance("AES/CBC/NoPadding");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        }
    }

    public byte[] encrypt(String text) throws Exception {
        if (text == null || text.length() == 0) throw new Exception("Empty string");

        byte[] encrypted = null;

        cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);

        encrypted = cipher.doFinal(padString(text).getBytes());
        try { 
            encrypted = android.util.Base64.encode(encrypted, android.util.Base64.NO_PADDING);
        } catch (NoClassDefFoundError e) {
        }

        return encrypted;
    }

    public byte[] decrypt(String code) throws Exception {
        if (code == null || code.length() == 0) throw new Exception("Empty string");

        byte[] decrypted = null;

        cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec);

        try { 
            decrypted = cipher.doFinal(android.util.Base64.decode(code, android.util.Base64.NO_PADDING));
        } catch (NoClassDefFoundError e) {
        }
        return decrypted;
    }



    private static String padString(String source) {
        char paddingChar = ' ';
        int size = 16;
        int x = source.length() % size;
        int padLength = size - x;

        for (int i = 0; i < padLength; i++) {
            source += paddingChar;
        }

        return source;
    }
}
 类似资料:
  • 我们开发了一款Android应用,上传到谷歌PlayStore。由于我们想在非个性化设备上推出应用程序,我们正在使用Aurora Store在这些设备上下载并安装应用程序,而无需使用谷歌帐户。 不过,我们希望使用Play Console中的Reach和设备概览统计数据,例如列出应用程序的安装数量和潜在崩溃报告。 在设备上通过极光商店安装应用程序后,Google Play Console中的安装数量

  • 在google play商店完成必要的手续后,我为我的应用程序上传了一个apk文件。 几分钟后,我查看了我的帐户,该帐户显示以下消息, 您的 APK 因包含违反恶意行为政策的安全漏洞而被拒绝。“警报”页包含有关如何解决此问题的详细信息。 如果您提交了更新,则您之前版本的应用仍会在 Google Play 上线。 我收到一封邮件,上面写着:“以下是在您最近提交的文件中发现的问题列表和相应的APK版本

  • 一、跨应用商店的来源分析痛点 由于Android/iOS的应用市场的限制,难以对下载前后的用户进行唯一识别,导致H5落地页的推广与APP下载转化只能追溯到应用市场的下载。如在微信朋友圈、微博投放的信息流广告;APP开屏广告、插屏广告;Banner、推荐位;二维码推广;H5分享下载等推广形式,大多都需要根据下载前后的注册信息匹配用户,难以衡量推广效果。 二、解决方案 你可以在H5落地页为分享链接或网

  • 我想在谷歌地图上存储一些POI(兴趣点),只在android应用程序中使用 然后我想检索用户当前位置“x”km范围内的所有POI 所以,问题是:是否有可能将自定义数据存储在谷歌地图上供应用程序私人使用?(请提供任何示例的链接) 要存储的任何其他完全管理的解决方案

  • 我一直在研究这个问题,在提交我的代码后,7个案例通过了,然而,9个案例失败了。问题链接位于HackerRank:电子商店 问题陈述 一个女孩想买一个键盘和一个USB驱动器,她想尽可能多地花钱,但要在预算内(将这两个项目结合起来)。如果这两件物品的价格都超过了她的预算,那么退货-1,否则她就买不到了。强制性的是,她想买这两件东西,而不是一件。 例子 一系列键盘以数组的形式给出,USB驱动器以。现在,

  • URL release环境: https://skill.rokid.com/storev2