应用内购买 - 解锁功能

5

您好,我正在创建一个内购iPhone应用程序。我的应用程序有内置模型。它有一个表格视图,其中包含6个项目。在免费应用中,有3个项目可用,我想锁定3个项目。人们可以通过支付0.99美元的单笔交易来解锁所有三个项目。

我想在我的应用程序中创建一个plist文件,其中将包含一个标志。如果flag = 0,则锁定一些功能;如果flag = 1,则解锁所有内容。我的plist文件只包含一个“flag”,可能是0或1。

我不知道如何创建plist文件。我应该把plist文件放在哪里,以便客户无法访问它?我应该将其保存在资源文件夹中吗?

在SKTransactionStatePurchased之后,我想更改.plist文件中的标志。您能否给我提供代码,以便在flag.plist文件中将标志值从0更改为1?

谢谢。

2个回答

2

我认为你应该寻找另一种方法来解决你的问题,有几个原因:

  • 任何有权访问iOS内部文件系统的人都可以编辑plist:这包括越狱用户,也有一些工具允许非越狱用户访问。
  • 使用代码编辑plist需要权限。你的应用程序只有在其文档文件夹中具有编辑权限。也就是说,某些人可以轻松地制作越狱应用程序来访问你的应用程序文档文件夹并编辑它的值。

对于没有直接回答你的问题,我感到抱歉,但将这样的内容存储在应用程序使用的文档中真的不是一个好主意。我强烈建议你寻找替代方法来实现这一点(比如使用自己的服务器)。


我是个人而不是公司,没有服务器或网站。我也不想为它们付费。我知道还有其他个人正在创建应用内购买应用程序。如果他们没有使用plist方法,他们使用的是什么方法?通常采用什么方法? - chits12345
我自己曾经进行过应用内购买,但我知道一些事情;人们使用自己的服务器,有时会在应用程序本身中进行“解锁”。不过,我对最后一种方法并不确定,因为所有可以被设计的东西都可以被反向设计。如果我是你,我会考虑使用NSUserDefaults,但始终要使用某种描述。 - Andy Ibanez
(void)provideContent: (NSString *)productId { if ([productId isEqualToString:kInAppPurchaseProUpgradeProductId]) { [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"isProUpgradePurchased" ]; [[NSUserDefaults standardUserDefaults] synchronize]; } }如果我使用这段代码,是否意味着我正在NSUserDefaults中设置一个标志“IsProUpgradePurchased”,该标志无法被进行购买的用户或越狱者访问和更改。我需要一个服务器来实现NSUserDefaults吗? - chits12345
使用NSUserDefaults不需要服务器,这应该可以暂时解决问题。主要问题是它没有以任何方式加密。你现在所做的比以前更安全,但只适用于未越狱的用户。您可以考虑使用iOS Keychain存储某些令牌。 - Andy Ibanez

2
实际上回答你的问题:
在SKTransactionStatePurchased之后,只需调用
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setInteger:1 forKey:@"yourKey"];
[defaults synchronize];

yourKey可以是您自己选择的任何内容。最好使用毫无意义和随机的单词,以便黑客不知道它与应用内购买有关。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接