【发布时间】:2018-03-18 22:53:12
【问题描述】:
在我的应用中,我有应用内购买功能。我在应用程序中添加了恢复购买功能。我在应用程序中显示了一个恢复购买按钮,因此用户可以通过点击按钮恢复他之前的所有购买。
但我从解决中心收到此错误 Guideline 3.1.1 - Business - Payments - In-App Purchase
错误描述说我们必须包含一个恢复购买按钮和功能。我已经包含在应用程序中。
我的代码运行良好。我使用沙盒测试员帐户进行了测试。因此,如果我购买了一些物品,然后卸载应用程序,如果我重新安装应用程序并点击恢复购买按钮后,该沙盒测试用户的所有先前购买的物品都会解锁。
这是我的代码 sn-p:
-(void)sendreciptToApple{
NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];
NSData *receipt = [NSData dataWithContentsOfURL:receiptURL];
// Create the JSON object that describes the request
NSError *error;
NSDictionary *requestContents = @{
@"receipt-data": [receipt base64EncodedStringWithOptions:0]
};
NSData *requestData = [NSJSONSerialization dataWithJSONObject:requestContents
options:0
error:&error];
if (!requestData) { /* ... Handle error ... */ }
// Create a POST request with the receipt data.
// NSURL *storeURL = [NSURL URLWithString:@"https://sandbox.itunes.apple.com/verifyReceipt"]; //for sandbox
NSURL *storeURL = [NSURL URLWithString:@"https://buy.itunes.apple.com/verifyReceipt"]; // for live
// https://sandbox.itunes.apple.com/verifyReceipt
// https://buy.itunes.apple.com/verifyReceipt
NSMutableURLRequest *storeRequest = [NSMutableURLRequest requestWithURL:storeURL];
[storeRequest setHTTPMethod:@"POST"];
[storeRequest setHTTPBody:requestData];
// Make a connection to the iTunes Store on a background queue.
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest:storeRequest queue:queue
completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
if (connectionError) {
/* ... Handle error ... */
} else {
NSError *error;
NSDictionary *jsonResponse = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
if (!jsonResponse) { /* ... Handle error ...*/ }
[self isAppPreviouslyPurchased:jsonResponse];
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
// update the UI here
// [self fireAllProductPurchaseOnetime];
[self showViewsAfterOrBeforePurchase];
[SVProgressHUD dismiss];
}];
}
}];
}
我正在解析和保存来自苹果的 JSON 响应并在本地存储..
-(void)isAppPreviouslyPurchased:(NSDictionary *)receipt{
NSLog(@"after receive reciept data %@",receipt);
NSMutableArray *purchasedItemArray=[[NSMutableArray alloc]initWithArray:[receipt valueForKeyPath:@"receipt.in_app"]];
NSLog(@"Already purchased item array<<<<>>>>>> %@",purchasedItemArray);
NSString *valueToSave = @"yes";
if (purchasedItemArray.count>0)
{
for (int i=0; i<purchasedItemArray.count; i++)
{
NSDictionary *productItem=[purchasedItemArray objectAtIndex:i];
NSString *productID=[productItem valueForKey:@"product_id"];
if ([productID isEqualToString: @"com.iwonderapp.iWonder.EntireApp"])
{
[[NSUserDefaults standardUserDefaults] setObject:valueToSave forKey:@"IsAllProductPurchased"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
if ([productID isEqualToString: @"com.iwonderapp.iWonder.Organs"])
{
[[NSUserDefaults standardUserDefaults] setObject:valueToSave forKey:@"IsOrgansPurchased"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
if ([productID isEqualToString: @"com.iwonderapp.iWonder.Endocrines"])
{
[[NSUserDefaults standardUserDefaults] setObject:valueToSave forKey:@"IsEndocrinesPurchased"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
if ([productID isEqualToString: @"com.iwonderapp.iWonder.Emotions"])
{
[[NSUserDefaults standardUserDefaults] setObject:valueToSave forKey:@"IsEmotionsPurchased"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
if ([productID isEqualToString: @"com.iwonderapp.iWonder.SexIntInf"])
{
[[NSUserDefaults standardUserDefaults] setObject:valueToSave forKey:@"IsIntimacyPurchased"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
if ([productID isEqualToString: @"com.iwonderapp.iWonder.ConOverCon"])
{
[[NSUserDefaults standardUserDefaults] setObject:valueToSave forKey:@"IsConflictOverwhelmPurchased"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
if ([productID isEqualToString: @"com.iwonderapp.iWonder.PowConMan"])
{
[[NSUserDefaults standardUserDefaults] setObject:valueToSave forKey:@"IsPowerControlPurchased"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
if ([productID isEqualToString: @"com.iwonderapp.iWonder.CreExpRej"])
{
[[NSUserDefaults standardUserDefaults] setObject:valueToSave forKey:@"IsCreativityPurchased"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
if ([productID isEqualToString: @"com.iwonderapp.iWonder.Chakras"])
{
[[NSUserDefaults standardUserDefaults] setObject:valueToSave forKey:@"IsChakrasPurchased"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
}
}
}
【问题讨论】:
-
您是否告诉 Apple 在哪里可以找到“恢复购买”按钮?
标签: ios objective-c iphone in-app-purchase xcode8