Objective c 如何在ios5中进行应用内购买?
我在应用程序内购买时使用了以下代码Objective c 如何在ios5中进行应用内购买?,objective-c,in-app-purchase,xcode4.3,ios5,Objective C,In App Purchase,Xcode4.3,Ios5,我在应用程序内购买时使用了以下代码 - (void)viewDidLoad { if ([SKPaymentQueue canMakePayments]) { NSLog(@"Can Buy Product"); SKProductsRequest *productRequest=[[SKProductsRequest alloc]initWithProductIdentifiers:[NSSet setWithObject:@"com.mycompany.myproduct.
- (void)viewDidLoad {
if ([SKPaymentQueue canMakePayments]) {
NSLog(@"Can Buy Product");
SKProductsRequest *productRequest=[[SKProductsRequest alloc]initWithProductIdentifiers:[NSSet setWithObject:@"com.mycompany.myproduct.productpack"]];
productRequest.delegate=self;
[productRequest start];
}
else {
NSLog(@"Product Can't be purchased");
}
}
-(IBAction)purchasePack1 {
SKPayment *payment=[SKPayment paymentWithProductIdentifier:@"com.mycompany.myproduct.productpack"];
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
[[SKPaymentQueue defaultQueue] addPayment:payment];
}
-(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
validProduct=nil;
int count=[response.products count];
if (count>0) {
NSLog(@"Product Avail");
validProduct=[response.products objectAtIndex:0];
}
else {
NSLog(@"No Product avail");
[purchaseBtn setHidden:TRUE];
}
}
-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
for (SKPaymentTransaction *transaction in transactions) {
switch (transaction.transactionState) {
case SKPaymentTransactionStatePurchasing:
NSLog(@"Purchasing");
[activityIndicatorObj setHidden:FALSE];
[activityIndicatorObj startAnimating];
break;
case SKPaymentTransactionStatePurchased:
UIAlertView *alt=[[UIAlertView alloc]initWithTitle:@"Congrats" message:@"Thanks For Purchasing " delegate:self cancelButtonTitle:@"Dismiss" otherButtonTitles:nil];
[alt show];
[alt release];
NSLog(@"Purchased");
[activityIndicatorObj stopAnimating];
[activityIndicatorObj setHidden:TRUE];
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
break;
case SKPaymentTransactionStateFailed:
if (transaction.error.code!=SKErrorPaymentCancelled) {
NSLog(@"Cancelled");
}
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
UIAlertView *alt1=[[UIAlertView alloc]initWithTitle:@"Sorry" message:@"Some Error Encountered!" delegate:self cancelButtonTitle:@"Dismiss" otherButtonTitles:nil];
[alt1 show];
[alt1 release];
NSLog(@"Failed");
[activityIndicatorObj stopAnimating];
[activityIndicatorObj setHidden:TRUE];
break;
case SKPaymentTransactionStateRestored:
NSLog(@"Restored");
[activityIndicatorObj stopAnimating];
[activityIndicatorObj setHidden:TRUE];
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
break;
default:
break;
}
}
}
当我单击“购买”按钮时,会收到一条警告消息,提示“您已购买此产品,但尚未下载,是否要下载?”
当我单击“是”时,我并没有从应用程序中得到任何响应,我确信该产品并没有下载。谁能告诉我这个问题的建议吗。提前感谢。我没有看到任何
-(void)provideContent:(NSString*)productId的实现-您错过了那部分吗?在任何情况下,当transactionState切换到SKPaymentTransactionState时,您都会收到通知
如果您还没有购买,您可能想看看Ray Wenderlich tut,这将帮助您建立一个应用程序内管理器类。我认为您已经将应用程序内逻辑放在了视图控制器中——最好将该部分放在单独的类中。因此,应用程序内管理器/助手:-)是否在加载视图时打印“产品可用性”文本?自iOS 5以来,paymentWithProductIdentifier:已被弃用。您应该使用paymentWithProduct:代替。