Mac App Store收据验证码?

Rei*_*Rei 40 validation macos cocoa app-store

想知道是否有人有新的Mac App Store收据验证的教程或工作代码?到目前为止我能找到的唯一参考文献是Apple关于该主题的一流文档和一个编译但没有大量内联注释的开源项目,所以除非你是一个加密的高手,否则很难理解.

仅限注册开发者的Apple文档:

https://developer.apple.com/devcenter/mac/documents/validating.html

Roddi的ValidateStoreReceipt(看起来很有前景,但很少记录):

https://github.com/roddi/ValidateStoreReceipt

还想知道为什么Apple不仅提供验证的工作代码?

还有其他好的参考吗?

Lau*_*ble 30

很难为Mac App Store收据验证提供通用解决方案,主要是因为这是一段非常敏感的代码,必须难以绕过(参见Apple文档).

这些GitHub项目是了解在收据验证中必须执行哪些步骤的非常好的起点:

一旦你理解了必须做的事情,这里有一些建议:

  • 不要使用Objective-C类或方法.Objective-C携带大量元数据,其动态特性使其暴露于运行时注入.
  • 仅使用C函数调用.即使您需要使用CoreFoundation框架的更多代码行,您也可以完美地执行Foundation框架可以执行的操作(NSString,NSArray,NSDictionary,...).
  • 不要动态链接OpenSSL库,因为它已在Mac OS X Lion中弃用.如果你想使用OpenSSL,请静态链接以确保拥有最新版本.
  • 使用系统函数进行加密.自10.5以来,Mac OS X具有相同的功能.例如,要计算SHA-1哈希,可以使用CC_SHA1函数.
  • 不要在代码中以明文形式放置字符串.对它们进行编码或加密.如果您没有这样做,则会提示您的代码位置.
  • 不要在代码中使用数字常量.通过一些简单的操作(+, - ,/或*)在运行时计算它们.同样,如果您没有这样做,您可以提示代码的位置.
  • 通过将测试和对NSApplicationMain的调用嵌入到复杂循环中,避免进行简单的验证测试.
  • 避免直接调用NSApplicationMain.使用函数指针隐藏调用.如果您没有这样做,则会提示您的代码位置.
  • 对于应用程序的每个版本,稍微修改验证代码,使其永远不变.

请记住,收据验证是必要的,并且看起来并不简单.它可能会耗费大量时间,您可以在应用程序上花费更多.

所以我建议你看看这个应用程序:Receigen(免责声明:我是这个应用程序的开发人员).


sni*_*bbe 6

为了在测试后验证真实收据,请更改main.m文件中的以下代码行:

if (!validateReceiptAtPath(@"~/Desktop/receipt"))
Run Code Online (Sandbox Code Playgroud)

#ifdef USE_SAMPLE_RECEIPT   // defined for debug version
    NSString *pathToReceipt = @"~/Desktop/receipt";
#else
    NSString *pathToReceipt = [[[NSBundle mainBundle] bundlePath]
        stringByAppendingPathComponent:@"Contents/_MASReceipt/receipt"];
#endif  
    if (!validateReceiptAtPath(pathToReceipt))
        exit(173); //receipt did not validate
Run Code Online (Sandbox Code Playgroud)

在您的编译器设置中,您的调试配置的"其他C标志"应该包含 -DUSE_SAMPLE_RECEIPT

礼貌http://jesusagora.org/groups/futurebasic/0::53562:get:1read.html

  • 在Lion及以上版本中,使用`[[[NSBundle mainBundle] appStoreReceiptURL] path]`而不是硬编码接收路径. (6认同)
  • 你从哪里得到调试/测试收据? (4认同)

kor*_*gan 6

请务必检查您是否正在验证应用的收据.易于对错误的收据进行所有加密和签名验证.

请参阅http://pastebin.com/1eWf9LCg,看起来像"愤怒的小鸟"错过了这一点,并让人们在免费应用程序的收据中替换它们.

Alan Quatermain也有代码在github上执行此操作. https://github.com/AlanQuatermain/mac-app-store-validation-sample

它不应该原样用于避免自动删除.


小智 0

是的,在他们的文档中,它说:“重要的是,您采用对您的应用程序来说是独一无二的解决方案。”