【问题标题】:Mac App Store Receipt - Hash not matching. Why?Mac App Store 收据 - 哈希不匹配。为什么?
【发布时间】:2020-03-10 11:45:19
【问题描述】:

我正在尝试创建一个 Mac 应用程序,请对我温柔一点,因为这是我的第一次尝试!基本上将我在 iOS 上所做的事情转移到 Mac 上,它几乎已经准备就绪,只剩下一个部分 - App Store 验证以防止人们复制它。

我在几个 iOS 应用中运行了收据验证码,它们可以为我找到(用于应用内购买)。对于 Mac,我只想验证收据并希望这就足够了。这是我创建的代码的基础:

char buf[512] = "";
get_platform_uuid(buf, sizeof(buf));

NSString *uuidString = [NSString stringWithUTF8String:buf];
NSUUID *myUUID = [[NSUUID UUID] initWithUUIDString:uuidString];

unsigned char uuidBytes[16];
[myUUID getUUIDBytes:uuidBytes];

NSMutableData *input = [NSMutableData data];
[input appendBytes:uuidBytes length:16];
[input appendData:[receipt objectForKey:kReceiptOpaqueValue]];
[input appendData:[receipt objectForKey:kReceiptBundleIdentifierData]];

NSMutableData *hash = [NSMutableData dataWithLength:SHA_DIGEST_LENGTH];
SHA1([input bytes], [input length], [hash mutableBytes]);

NSLog(@"kReceiptHash: %@", [receipt objectForKey:kReceiptHash]);
NSLog(@"hash: %@", hash);

最后两个 NSLog 命令只是为了让我可以在调试期间记录它,但会比较哈希值。这是我知道两者都不正确的地方。 “get_platform_uuid”是我发现的用于获取 Mac 的 UUID 的函数,它似乎工作正常。

我已经获取了整个“输入”变量并将信息插入其中并在 iOS 上运行它,我在 iOS 设备上做了同样的事情并在 Mac 上运行它。在这两种情况下,计算的 Hash 是相同的;我认为计算很好。

但在 Mac 上,它仍然与收据哈希不同。该应用的 iOS 计算和收据哈希匹配。

我已经在 iTunes Connect 上设置了应用程序,它似乎选择了正确的捆绑标识符。我已在 Mac 上退出 App Store。我将应用程序从 Xcode 构建应用程序的位置复制到不同的目录以运行它。然后它要求我登录,我使用测试帐户进行登录。然后反复尝试重新运行应用程序并退出(我将其复制回调试文件夹,这会中断重新运行周期)。

我已经在 Apple Developer 网站上设置了用于 Mac 开发和分发的证书,但我确定这是我在应用程序权限或我运行应用程序的方式上没有得到正确的东西。但我就是想不通(而且我已经看了很长时间了!)。

我确信这很愚蠢,但作为一个孤独的开发者,我唯一的希望就是问你我做错了什么?

谢谢。

【问题讨论】:

    标签: macos app-store receipt-validation


    【解决方案1】:

    经过大量搜索,我找到了另一种构建和比较哈希值的方法。但这也需要修改才能在 Mac 上运行,因为它是相当旧的代码。我现在拥有的是这种方法和它的混合体。

    我无法解释的是为什么旧代码可以在 iOS 上运行,但不能在 Mac 上运行,而且我不是一个足够优秀的程序员来研究原因。我所知道的是这种混合方法似乎很有效。

    【讨论】:

      猜你喜欢
      • 2010-10-11
      • 2011-05-14
      • 2012-07-22
      • 2021-04-25
      • 2016-10-05
      • 2021-04-23
      • 1970-01-01
      • 2020-04-06
      • 2017-06-04
      相关资源
      最近更新 更多