iOS App Receipt Validation - 调试时模拟器和设备上缺少收据
Posted
技术标签:
【中文标题】iOS App Receipt Validation - 调试时模拟器和设备上缺少收据【英文标题】:iOS App Receipt Validation - Receipt is missing in simulator and on device while debugging 【发布时间】:2016-10-08 10:02:39 【问题描述】:为什么我的应用在开发过程中会缺少收据?
我正在从 Xcode 7.3.1 运行我的 ios(7、8、9)应用程序。该应用程序的收据似乎丢失了。这个应用程序目前在 App Store 中发布,所以我有我的开发者凭据和一个“沙盒”用户登录。
模拟器
运行以下代码时:
NSURL* url = [[NSBundle mainBundle] appStoreReceiptURL];
NSLog(@"url: %@", url);
Simulator 9.3 for iPhone 6s Plus 中的结果:
file:///Users/Bourque/Library/Developer/CoreSimulator/Devices/7F32850A-CC1A-45A3-8ED6-95C75CD9DD44/data/Containers/Data/Application/46BDF021-D2A3-418E-91E1-61A15215942B/StoreKit/收据
然而,当我导航到以第二个 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
urlContents: (null)
未找到以下网址的收据: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
【问题讨论】:
弗兰克的回答似乎回答了你的问题。能接受就好了。 【参考方案1】:由于您是通过 Xcode 而不是从商店安装应用程序,因此它不包含收据。但是,您可以启动 SKReceiptRefreshRequest
以获得可用于测试的沙盒收据。
另外请注意,您需要退出 App Store 并使用测试用户帐户(在 iTunes Connect 中创建)在您启动请求以使其正常工作后提示您登录。
【讨论】:
非常有用的答案。谢谢弗兰克。另一个重要提示:从 iOS 12 开始,在设置 > iTunes 和 App Store > 滚动到底部,您应该会看到一个名为“沙盒帐户”的部分和一个允许您使用测试用户帐户登录的字段(创建于应用商店连接)。我仍然必须使用真实的 Apple ID 进行“退出舞会”,才能使初始收据刷新、加载和验证正常工作。但是有了这个设置,您可以在 Xcode 中构建的开发应用程序中执行沙盒事务,同时使用真实的 Apple ID 登录到该设备 这非常有用。感谢分享! 快速跟进。我注意到即使可以通过“设置”>“iTunes 和 App Store”>“沙盒帐户”登录,也请避免这样做。相反,如果这是第一次在设备上安装 Xcode 开发版本: 1) 确保您已退出真实的“iTunes & App Store 帐户”。 2) 从 Xcode 构建和运行。 3) 如果您的应用在启动时运行收据验证代码,则应提示您使用电子邮件和密码登录 - 使用沙盒帐户。 4) 收据现已出现,您将能够重新登录到您的真实 iTunes 和 App Store 帐户。以上是关于iOS App Receipt Validation - 调试时模拟器和设备上缺少收据的主要内容,如果未能解决你的问题,请参考以下文章
iOS 订阅 DID_CHANGE_RENEWAL_STATUS 通知:latest_expired_receipt vs latest_receipt