1

因此,我最近使用 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。

有没有人有一些见解可以帮助我?我很难相信我是唯一遇到这种情况的人......我的意思是,其他人必须使用这个示例代码,对吧?

但我绝对不想做的是移除大括号并将其称为“固定”。
“如果你不知道为什么它是固定的,它就不是固定的。”

4

0 回答 0