2013-04-11 3 views
2

인앱 구매 기능을 호출하는 버튼이 있습니다. 제품을로드하는 동안로드 휠을 표시하고 UIAlertView가 구매 확인을 표시하면이를 닫습니다. MBAlertView를 사용하여 내 응용 프로그램에서 다른 메시지를 표시하고 있으며 여기에서도이 메시지를 사용합니다. 어떻게해야합니까? 사용자가 버튼을 누를 때 표시하고 응답을 받으면 해제합니다.앱 구매시로드 중 활동 표시기를 표시하는 방법은 무엇입니까?

여기 내 코드가 있습니다.

- (IBAction)buyCoffeeInAppPurchase:(id)sender { 
    SKProductsRequest *request= [[SKProductsRequest alloc] 
           initWithProductIdentifiers: [NSSet setWithObject:  @"com.giovannibalestra.emergencycall.Thankyoudeveloper"]]; 
    request.delegate = self; 
    [request start]; 
    // I should add something like this line of code to show the activity indicator but I can only set hidesAfter some seconds 
    // [MBHUDView hudWithBody:@"Wait." type:MBAlertViewHUDTypeActivityIndicator hidesAfter:4.0 show:YES]; 
} 
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { 
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 

    NSArray *myProduct = response.products; 
    NSLog(@"%@",[[myProduct objectAtIndex:0] productIdentifier]); 

    SKPayment *newPayment = [SKPayment paymentWithProduct:[myProduct objectAtIndex:0]]; 
    [[SKPaymentQueue defaultQueue] addPayment:newPayment]; 

} 

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions { 
    for (SKPaymentTransaction *transaction in transactions) 
    { 
     switch (transaction.transactionState) 
     { 
      case SKPaymentTransactionStatePurchased: 
       [self completeTransaction:transaction]; 
       break; 
      case SKPaymentTransactionStateFailed: 
       [self failedTransaction:transaction]; 
       break; 
      case SKPaymentTransactionStateRestored: 
       [self restoreTransaction:transaction]; 
      default: 
       break; 
     } 
    } 
} 

- (void)completeTransaction:(SKPaymentTransaction *)transaction { 
    [[SKPaymentQueue defaultQueue] finishTransaction: transaction]; 
} 

- (void)restoreTransaction:(SKPaymentTransaction *)transaction { 
    [[SKPaymentQueue defaultQueue] finishTransaction: transaction]; 
} 

- (void)failedTransaction:(SKPaymentTransaction *)transaction { 
    if (transaction.error.code != SKErrorPaymentCancelled) 
    { 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Purchase Unsuccessful" 
                 message:@"Your purchase failed. Please try again." 
                 delegate:self 
               cancelButtonTitle:@"OK" 
               otherButtonTitles:nil]; 
     [alert show]; 
    } 
    [[SKPaymentQueue defaultQueue] finishTransaction: transaction]; 
} 
+0

'InApp'의 흐름을 알기에'InAppPurchase' 클래스의 각 함수에'breakpoints '를 설정하고 그에 따라'MBAlertView'를 표시하거나 숨 깁니다! – Hemang

+0

buyCoffeeInAppPurchase ....---> show 및 completeTransaction ----> 숨기기, failedTransaction ---> –

+0

hv u 님이 해결책을 찾았습니다 ..? –

답변

2

쇼로드의 경우 MBProgressHUD를 사용할 수도 있습니다. 로딩 과정을 보여주는 쉬운 방법. MBProgressHUD.h & .m 파일 (인터넷 &)을 xcode 프로젝트에 복사하십시오.

HOW TO USE: 가져 오기 당신도 .H &하는 .m 파일 &이 MBProgressHUD * HUD에서이 # import를 "MBProgressHUD.h"; .h 파일에서. * (SKPaymentTransaction : completeTransaction (무효) -

- (IBAction)buyCoffeeInAppPurchase:(id)sender { 

    HUD = [[MBProgressHUD alloc] initWithFrame:CGRectMake(0, 0, 320, 460) ]; 
     HUD.labelText = @"Fetching..."; 
     [self.view addSubview:HUD]; 
     [HUD show:YES]; 


    SKProductsRequest *request= [[SKProductsRequest alloc] 
           initWithProductIdentifiers: [NSSet setWithObject:  @"com.giovannibalestra.emergencycall.Thankyoudeveloper"]]; 
    request.delegate = self; 
    [request start]; 
    // I should add something like this line of code to show the activity indicator but I can only set hidesAfter some seconds 
    // [MBHUDView hudWithBody:@"Wait." type:MBAlertViewHUDTypeActivityIndicator hidesAfter:4.0 show:YES]; 
} 
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { 
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 

    NSArray *myProduct = response.products; 
    NSLog(@"%@",[[myProduct objectAtIndex:0] productIdentifier]); 

    SKPayment *newPayment = [SKPayment paymentWithProduct:[myProduct objectAtIndex:0]]; 
    [[SKPaymentQueue defaultQueue] addPayment:newPayment]; 

    [HUD hide:YES]; 
    [HUD removeFromSuperViewOnHide]; 

} 

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions { 
    for (SKPaymentTransaction *transaction in transactions) 
    { 
     switch (transaction.transactionState) 
     { 
      case SKPaymentTransactionStatePurchased: 
       [self completeTransaction:transaction]; 
       break; 
      case SKPaymentTransactionStateFailed: 
       [self failedTransaction:transaction]; 
       break; 
      case SKPaymentTransactionStateRestored: 
       [self restoreTransaction:transaction]; 
      default: 
       break; 
     } 
    } 
} 

- (void)completeTransaction:(SKPaymentTransaction *)transaction { 
    [[SKPaymentQueue defaultQueue] finishTransaction: transaction]; 
} 

- (void)restoreTransaction:(SKPaymentTransaction *)transaction { 
    [[SKPaymentQueue defaultQueue] finishTransaction: transaction]; 
} 

- (void)failedTransaction:(SKPaymentTransaction *)transaction { 
    if (transaction.error.code != SKErrorPaymentCancelled) 
    { 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Purchase Unsuccessful" 
                 message:@"Your purchase failed. Please try again." 
                 delegate:self 
               cancelButtonTitle:@"OK" 
               otherButtonTitles:nil]; 
     [alert show]; 
    } 
    [[SKPaymentQueue defaultQueue] finishTransaction: transaction]; 
} 
+0

감사합니다. 나는 오늘 밤 이걸 시험해 볼거야. 그것이 효과가 있다면 알려 드리겠습니다. – BalestraPatrick

0
- (void)paymentQueue:(SKPaymentQueue *)queue 
updatedTransactions:(NSArray *)transactions 
{ 
    for (SKPaymentTransaction *transaction in transactions) 
    { 
     if (transaction.transactionState == SKPaymentTransactionStatePurchased) { 
      [self completeTransaction:transaction]; 
     } 
     if (transaction.transactionState == SKPaymentTransactionStateFailed) { 
      [self failedTransaction:transaction]; 
     } 
     if (transaction.transactionState == SKPaymentTransactionStateRestored) { 
      [self restoreTransaction:transaction]; 
     } 
     else { 
      // Do something. 
     } 

     // You can dismiss your Activity Indicator (MBHUDView) here. 
    } 
} 
+0

이것은 SKPaymentTransactionStatePurchasing 및 SKPaymentTransactionStateDeferred 상태에서도 활동 표시기를 닫습니다. 또한 병렬 트랜잭션을 처리하지 않습니다. –

0

안녕하세요 간단하게 활동 표시를 적용 할 때 구매 버튼을 사용자가 클릭이 방법 후 활동 표시를 중지 같은 그런하는 .m에서 코드 파일이 보인다)트랜잭션. 실패한 거래에서 멈추는 것을 잊지 마세요, 다른 현명한 활동 표시기가 움직이기 시작합니다. 활동 표시기가 스레드를 통해 호출해야하는 경우가 있습니다. 그러니 한번 시도해보십시오.

관련 문제