1

我知道我已经为沙盒环境正确配置了我的应用程序(适用于 iOS 7),因为我可以进行测试购买,并且当测试购买通过时,我会看到带有 [Environment: Sandbox] 文本的警报。收据同时刷新,我可以使用该+[NSBundle appStoreReceiptURL]方法访问它。

但是每当我尝试SKReceiptRefreshRequest单独使用类中的方法刷新收据时,我只会得到这个序列:

  1. “登录”警报显示我从中选择“使用现有 Apple ID”。

  2. 当出现“Apple ID 密码”警报时,我输入了测试用户的凭据。

  3. 但此警报总是在输入凭据后立即显示:

“此 Apple ID 尚未在 iTunes Store 中使用。点击查看以登录,然后查看您的帐户信息。”</p>

这当然会继续询问您在沙盒环境中不应该做的信用卡信息。

我在应用程序委托中使用此代码来启动收据刷新:

// in didFinishLaunchingWithOptions:

SKReceiptRefreshRequest *request = [[SKReceiptRefreshRequest alloc] initWithReceiptProperties:nil];
request.delegate = self;
[request start];

// with the delegate methods:

-(void)requestDidFinish:(SKRequest *)request
{
    if ([request isKindOfClass:[SKReceiptRefreshRequest class]]) {
        NSLog(@"Got a new receipt...");
    }
}

-(void)request:(SKRequest *)request didFailWithError:(NSError *)error
{
    NSLog(@“%@“, error.description);
}

但是唯一调用的委托方法是 didFailWithError: 它给出了消息:

Error Domain=SSServerErrorDomain Code=5001 "Could Not Sign In" UserInfo=0x14d8a780 {NSLocalizedFailureReason=此 Apple ID 尚未在 iTunes Store 中使用。, NSLocalizedDescription=无法登录}

在尝试刷新收据之前,我总是:

  1. 从设备中删除应用程序

  2. 确保 Settings->App Store 没有输入 Apple ID 凭据

  3. 使用我的开发人员凭据签署应用程序

  4. 确保测试帐户之前进行过购买,以便可以生成收据。

  5. 确保从未将测试帐户凭据输入到 App Store 登录中(因为这会使它们在测试时失效)。

是否可以在沙箱中进行收据刷新?

更新:现在工作

我终于让它工作了——但我不知道关键步骤是什么——除了坚持不懈并继续尝试。

为了其他有同样问题的人的利益,这里是我遵循的步骤:

  1. 创建一个全新的测试用户,但没有在帐户上进行测试购买。

  2. 从设备中删除应用程序并确保没有帐户登录到设置-> App Store。

  3. 我在 Xcode 中启动了该应用程序,并在控制台中收到了我一直收到的错误消息 - 带有以下描述文本:

“错误域=SSServerErrorDomain Code=5001“无法登录”UserInfo=0x155f5140 {NSLocalizedFailureReason=此 Apple ID 尚未在 iTunes Store 中使用。NSLocalizedDescription=无法登录}”。

  1. 当“此 Apple ID 尚未在 iTunes Store 中使用。 ”警报出现时,我按下了取消按钮。

  2. 关闭应用程序,不做任何更改,在 Xcode 下重新启动它。在重新启动之前,我没有从设备中删除该应用程序。

  3. 这次“<em>此 Apple ID 尚未在 iTunes Store 中使用”。消息没有出现,而是出现了一个提示输入 Apple ID 和密码的对话框。我在对话框中输入了测试帐户凭据。

  4. 在我输入测试用户凭据后,SKRequestDelegate requestDidFinish:委托方法被调用,并且收据被放置在应用程序包中。顺便说一句,该方法SKRequest提供的实例requestDidFinish:是类型SKReceiptRefreshRequest

我发现一旦它第一次工作,它就会继续工作 - 我不必删除应用程序或从设置 - > App Store清除凭据 - 收据刷新将继续在后台工作,使用从那时起缓存在设置-> App Store 中的测试凭据。

4

0 回答 0