Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 应用内购买沙箱环境中的收据刷新:是否可以在不同时购买测试项目的情况下刷新收据?_Ios_In App Purchase_Receipt Validation - Fatal编程技术网

Ios 应用内购买沙箱环境中的收据刷新:是否可以在不同时购买测试项目的情况下刷新收据?

Ios 应用内购买沙箱环境中的收据刷新:是否可以在不同时购买测试项目的情况下刷新收据?,ios,in-app-purchase,receipt-validation,Ios,In App Purchase,Receipt Validation,我知道我已经为iOS 7正确配置了沙盒环境的应用程序,因为我可以进行测试购买,并且在测试购买完成时,我会看到带有[environment:sandbox]文本的警报。同时刷新收据,我可以使用+[NSBundle appStoreReceiptURL]方法访问它 但每当我尝试仅使用SKReceiptRefreshRequest类中的方法刷新收据时,我只会得到以下序列: 1“登录”警报显示,我从中选择“使用现有Apple ID” 2当“Apple ID Password”警报出现时,我输入测试用户的

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

但每当我尝试仅使用SKReceiptRefreshRequest类中的方法刷新收据时,我只会得到以下序列:

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

2当“Apple ID Password”警报出现时,我输入测试用户的凭据

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

“这个苹果ID尚未在iTunes商店中使用。 点击“查看”登录,然后查看您的帐户信息。“

这当然会要求你提供信用卡信息,而你不应该在沙箱环境中这样做

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

// 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无法登录UserInfo=0x14d8a780{NSLocalizedFailureReason=此Apple ID尚未在iTunes应用商店中使用,NSLocalizedDescription=无法登录}

在尝试刷新收据之前,我始终:

1从设备中删除应用程序

2确保设置->应用商店没有输入的Apple ID凭据

3使用我的开发人员凭据对应用程序进行签名

4确保测试帐户有以前的购买,以便生成收据

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

可以在沙箱中刷新收据吗

更新:正在工作

我终于让它工作了——但我不知道关键的一步是什么——除了坚持和不断尝试

为了让其他有同样问题的人受益,以下是我遵循的步骤:

1创建一个全新的测试用户,但未对该帐户进行测试购买

2已从设备中删除应用,并确保没有帐户登录到设置->应用商店

3我在Xcode中启动了该应用程序,并在控制台中收到了一直以来收到的错误消息-以及以下描述文本:error Domain=SSServerErrorDomain Code=5001无法登录UserInfo=0x155f5140{NSLocalizedFailureReason=iTunes商店中尚未使用此Apple ID.,NSLocalizedDescription=无法登录}

4当iTunes商店尚未使用此Apple ID时。当我按下取消按钮时,警报响起

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

6这一次“此苹果ID尚未在iTunes商店中使用”消息没有出现,而是出现了一个提示输入苹果ID和密码的对话框。我在对话框中输入了测试帐户凭据

7在输入测试用户凭据后,调用了SKRequestDelegate requestDidFinish:delegate方法,并将收据放入应用程序包中。顺便提一下,requestDidFinish:方法提供的SKRequest实例的类型为SKReceiptRefreshRequest


我发现,一旦它第一次工作,它就会继续工作-我不必删除应用程序或清除设置->应用程序商店中的凭据-收据刷新将在后台继续工作,使用缓存在设置->应用程序商店中的测试凭据。你看了吗,我想我已经阅读了每一篇关于收据刷新的帖子,我已经在这个功能上工作了好几个星期,没有什么是我没有尝试过的。请注意,大多数帖子都是在iOS 7天前发布的,我的情况是,我只是想刷新收据,而不是进行实际的测试购买。但是谢谢你让我注意到这条线索。