在应用程序钥匙串中存储In App Purchase收据

2020/12/16 13:11 · ios ·  · 0评论

我之前从未实现过In App Purchase,因此我使用了MKStoreKit包装器,并且可以正常工作。MKStoreKit将所有收据作为BOOL保留在UserDefaults .plist中,因此,盗版者以“破解”状态分发应用内购买商品非常简单。首次购买后,可以分发捆绑包,并可以重新创建.plist以启用IAP解锁。

我想扩展MKStoreKit以在iOS钥匙串中创建In App Purchase验证数据。是否有任何缺点或可能的原因导致付费用户失败,不可靠,或有其他原因导致这样做总的主意?我知道盗版是不可避免的,并且我绝对不想疏远付费用户,但是我觉得UserDefaults .plist太容易绕开了。

在我的情况下,购买时会将一个简单的字符串放入钥匙串中。这样,如果分发了二进制文件,则尚未启用解锁功能。当然,有可能提出一种解决方法,但是这将花费更多的精力,并且知道如何找到TRUE / FALSE标志,并使其始终返回正确的值。通过混淆,我什至可以使追踪它变得更加困难。

感谢您提供的所有见解,也感谢您避免不必要的盗版,处理后回复的答案。我对该解决方案的技术可行性更感兴趣。

我们完全在我们的应用程序中做到这一点,并且效果很好。它是一个免费的应用程序,您可以升级到完整版本,并将升级指示符存储在钥匙串中。升级指示符是您选择的任意字符串,但出于钥匙串的目的,它被视为密码,即kSecValueData的值在钥匙串中已加密。这种方法的一个好处是,如果用户删除应用程序,然后再重新安装它,则所有功能都像魔术一样被重新启用,因为钥匙串项与应用程序分开存储。而且,除了将某些内容存储在用户默认值中之外,几乎没有什么额外的工作,我们认为这是值得的。

这是创建安全项目的方法:

NSMutableDictionary* dict = [NSMutableDictionary dictionary];

[dict setObject: (id) kSecClassGenericPassword  forKey: (id) kSecClass];
[dict setObject: kYourUpgradeStateKey           forKey: (id) kSecAttrService];
[dict setObject: kYourUpgradeStateValue         forKey: (id) kSecValueData];

SecItemAdd ((CFDictionaryRef) dict, NULL);

这是查找安全项目以检查其值的方法:

NSMutableDictionary* query = [NSMutableDictionary dictionary];

[query setObject: (id) kSecClassGenericPassword forKey: (id) kSecClass];
[query setObject: kYourUpgradeStateKey          forKey: (id) kSecAttrService];
[query setObject: (id) kCFBooleanTrue           forKey: (id) kSecReturnData];

NSData* upgradeItemData = nil;
SecItemCopyMatching ( (CFDictionaryRef) query, (CFTypeRef*) &upgradeItemData );
if ( !upgradeItemData )
{
    // Disable feature
}
else
{
    NSString* s = [[[NSString alloc] 
                        initWithData: upgradeItemData 
                            encoding: NSUTF8StringEncoding] autorelease];

    if ( [s isEqualToString: kYourUpgradeStateValue] )
    {
        // Enable feature
    }
}

如果upgradeItemData为nil,则该密钥不存在,因此您可以假设升级不存在,或者我们所做的是将其值替换为未升级。

更新资料

添加了kSecReturnData(感谢@Luis指出)

GitHub上的代码(ARC变体)

本文地址:http://ios.askforanswer.com/zaiyingyongchengxuyaoshichuanzhongcunchuin-app-purchaseshouju.html
文章标签: ,   ,   ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!