iOS应用收据验证 - 在模拟器和调试设备上,收据丢失

9

为什么我的应用在开发中会缺少收据?

我正在使用Xcode 7.3.1运行我的iOS(7、8、9)应用程序。该应用程序的收据似乎已经丢失了。此应用程序目前在App Store上发布,因此我拥有开发者凭据和“沙盒”用户登录。

模拟器

当运行以下代码时:

NSURL* url = [[NSBundle mainBundle] appStoreReceiptURL];
NSLog(@"url: %@", url);

iPhone 6s Plus 模拟器 9.3 的结果为:

file:///Users/Bourque/Library/Developer/CoreSimulator/Devices/7F32850A-CC1A-45A3-8ED6-95C75CD9DD44/data/Containers/Data/Application/46BDF021-D2A3-418E-91E1-61A15215942B/StoreKit/receipt

但是当我进入以第二个 UUID 命名的文件夹时,我没有找到 StoreKit 文件夹。

真实设备

为了在真实的 iOS iPod touch 上进行测试,我将代码扩展到...

...查看应该找到收据的位置。

NSURL* url = [[NSBundle mainBundle] appStoreReceiptURL];
NSLog(@"url: %@", url);

尝试加载此类文件。

NSString* urlContents = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
NSLog(@"urlContents: %@", urlContents);

…验证文件是否存在。

NSError *err;
if ( [url checkResourceIsReachableAndReturnError:&err] == NO ) {
    NSLog(@"BAD No receipt found for url: %@" , url );
} else {
    NSLog(@"GOOD Receipt found for url: %@" , url );
}

运行结果。

网址:file:///private/var/mobile/Containers/Data/Application/21430192-6E3A-4929-B847-23FD525D804E/StoreKit/sandboxReceipt

网址内容:(空)

错误:找不到网址为file:///private/var/mobile/Containers/Data/Application/21430192-6E3A-4929-B847-23FD525D804E/StoreKit/sandboxReceipt的收据

网址:file:///private/var/mobile/Containers/Data/Application/B1497F0D-95A7-4AD8-A9D5-7AF95663A04F/StoreKit/sandboxReceipt


Frank的回答似乎回答了你的问题。接受它会是一个好选择。 - Murray Sagal
1个回答

17

由于您是通过Xcode安装应用程序而不是从商店中获取,因此它不包含任何收据。但是,您可以开始一个SKReceiptRefreshRequest,以便获取用于测试的沙盒收据。

同时请注意,您需要注销App Store并在启动请求后使用测试用户帐户(在iTunes Connect中创建)进行登录,以使其正常工作。


2
非常有用的答案。谢谢Frank。这里还有一个顶级提示:自iOS 12以来,在“设置”>“iTunes和App Store”>向下滚动,您应该会看到一个名为“沙盒帐户”的部分,以及一个字段,允许您使用测试用户帐户(在App Store Connect中创建)进行登录。我仍然需要使用真实的Apple ID进行“注销舞蹈”,以使初始收据刷新、加载和验证工作。但是,拥有此设置允许您在使用真实的Apple ID登录设备的情况下,在Xcode中构建的开发应用程序中执行沙盒事务。 - Neil Smith
这非常有用。谢谢分享! - Frank Rupprecht
1
快速跟进一下。我注意到,即使可以通过“设置”>“iTunes和App Store”>“沙盒帐户”登录,也要避免这样做。相反,如果这是在设备上第一次安装Xcode开发版本:1)确保您已退出真实的“iTunes和App Store”帐户。2)从Xcode构建和运行。3)如果您的应用程序在启动时运行收据验证代码,则应提示您使用电子邮件和密码进行登录-使用沙盒帐户。4)现在存在收据,您将能够重新登录到您的真实iTunes和App Store帐户。 - Neil Smith

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