【发布时间】:2018-06-29 13:21:03
【问题描述】:
我在我的应用程序中添加了应用内购买,它在沙盒环境中运行良好,但是当我将它的 URL 从沙盒更改为实时运行并运行应用程序时,它的行为异常。
这是我的代码:
以下是我们要求苹果获取用户应用购买详情的方法。
-(BOOL) getSubscriptionStatusFromAppleWithReceipt:(NSData *) receiptData
{
NSError *error;
NSMutableDictionary *requestContents = [NSMutableDictionary dictionaryWithObject:
[receiptData base64EncodedStringWithOptions:0] forKey:@"receipt-data"];
NSString *sharedSecret = @“*********************”;
if (sharedSecret) requestContents[@"password"] = sharedSecret;
NSData *requestData = [NSJSONSerialization dataWithJSONObject:requestContents options:0 error:&error];
NSString *strUrl = @"";
// Live server
strUrl = @"https://buy.itunes.apple.com/verifyReceipt";
// Devlopment server
// strUrl = @"https://sandbox.itunes.apple.com/verifyReceipt";
NSMutableURLRequest *storeRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:strUrl]];
[storeRequest setHTTPMethod:@"POST"];
[storeRequest setHTTPBody:requestData];
queue = [NSOperationQueue mainQueue];
// NSError *error = nil;
NSHTTPURLResponse *response = nil;
NSData *data = [NSURLConnection sendSynchronousRequest:storeRequest returningResponse:&response error:&error];
if (!error)
{
NSString* newStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSDictionary *jsonResponse = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
if ([jsonResponse[@"latest_receipt_info"] isKindOfClass:[NSArray class]])
{
NSArray *receiptInfo = (NSArray *) jsonResponse[@"latest_receipt_info"];
return [self parseJsonFromAppleServer:receiptInfo];
}
}
else
{ NSLog(@"%@", error.localizedDescription);
}
return false;
}
接下来的方法是检索收据数组的最后一个索引,并尝试获取用户的订阅详细信息。
我应该在试飞时上传它还是以其他方式上传它以区分从实时到开发的差异? 如何在实际环境中进行测试。
谢谢
【问题讨论】:
标签: ios objective-c testing in-app-purchase receipt-validation