因此,我最近使用 Apple 广泛使用的示例代码添加了一些客户端 IAP 收据验证。
该示例主要是关于向 Apple 的服务器发送收据数据,本质上是询问它是否是真实的收据。但它也包括一些简单的、本地执行的验证。其中一部分是获取交易的“购买信息”,一个 64 位编码的属性列表,描述购买。
该属性列表如下所示:
{
"original-purchase-date-pst" = "2013-10-25 10:04:44 America/Los_Angeles";
"unique-identifier" = "15546137c0c5c74672ce8b71223ad173fc2b2ac2";
"original-transaction-id" = "1000000055641224";
"bvrs" = "1.7";
"transaction-id" = "100000008886513";
"quantity" = "1";
"original-purchase-date-ms" = "1382720684000";
"unique-vendor-identifier" = "73F61531-4415-451B-A144-65165012BC51";
"product-id" = "com.fakeco.FakeGame.GoldCookieBundle_1";
"item-id" = "555555555";
"bid" = "com.fakeco.FakeGame";
"purchase-date-ms" = "1382720684000";
"purchase-date" = "2013-10-25 17:04:44 Etc/GMT";
"purchase-date-pst" = "2013-10-25 10:04:44 America/Los_Angeles";
"original-purchase-date" = "2013-10-25 17:04:44 Etc/GMT";
}
Apple 的代码使用 NSPropertyListSerialization 的 propertyListWithData: 方法从这个 plist 创建一个字典。但是这个函数为我返回了一个错误:
kCFPropertyListOldStyleParsingError
Unexpected character { at line 1
因此,在浏览了 Apple 的文档之后,我了解到这个 ASCII 键值列表是 plist 的“旧式”表示。
根据格式,plist 可以表示 NSString、NSArray、NSData 或 NSDictionary。它说,NSDicitonary“用花括号括起来”。但是我得到的错误是我的左大括号是“意外的”。
因此,作为测试,我在调用 propertyListWithData: 方法之前添加了一些代码来删除大括号。
decodedPurchaseInfo = [decodedPurchaseInfo stringByReplacingOccurrencesOfString:@"{" withString:@""];
decodedPurchaseInfo = [decodedPurchaseInfo stringByReplacingOccurrencesOfString:@"}" withString:@""];
然后它起作用了!propertyListWithData: 方法正确地返回了一个带有预期键值对的 NSDictionary。
有没有人有一些见解可以帮助我?我很难相信我是唯一遇到这种情况的人......我的意思是,其他人必须使用这个示例代码,对吧?
但我绝对不想做的是移除大括号并将其称为“固定”。
“如果你不知道为什么它是固定的,它就不是固定的。”