2013-10-15 2 views
-1

Google에서 인앱 구매를 추가하는 것에 관한 거의 모든 stackoverflow 질문을 살펴 보았지만 그 중 아무 것도 작동하지 않는 것 같습니다. 내 앱에서 구매를 시도 할 때 모든 것이 잘 작동하고 제품이 사용 가능하지만 모든 구매에 대한 경고보기가 표시되지 않습니다. IAP를위한 Heres는 내 모든 코드 :iPhone 응용 프로그램에서 인앱 구매가 작동하지 않습니다.

user taps remove ads button 
user requests to remove ads 
user can make payments 
products available! 

모든 것을 :이 일을 해요 경우

- (IBAction)tapsRemoveAdsButton{ 
NSLog(@"User taps remove ads button"); 
[self tapsRemoveAds]; 
} 

- (void)tapsRemoveAds{ 
NSLog(@"User requests to remove ads"); 

if([SKPaymentQueue canMakePayments]){ 
    NSLog(@"User can make payments"); 

    SKProductsRequest *productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObject:kRemoveAdsProductIdentifier]]; 
    productsRequest.delegate = self; 
    [productsRequest start]; 

} 
else{ 
    NSLog(@"User cannot make payments due to parental controls"); 
} 
} 

- (IBAction)purchase{ 
SKProduct *removeAdsProductID = (SKProduct *)kRemoveAdsProductIdentifier; 
SKPayment *payment = [SKPayment paymentWithProduct:(SKProduct *)kRemoveAdsProductIdentifier]; 
[[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 
[[SKPaymentQueue defaultQueue] addPayment:payment]; 
} 

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{ 
SKProduct *validProduct = nil; 
int count = [response.products count]; 
if(count > 0){ 
    validProduct = [response.products objectAtIndex:0]; 
    NSLog(@"Products Avalable!"); 
    //[self sloganizeWord]; 
} 
else if(!validProduct){ 
    NSLog(@"No products avalable"); 
} 
} 

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions{ 
for(SKPaymentTransaction *transaction in transactions){ 
    switch (transaction.transactionState){ 
     case SKPaymentTransactionStatePurchasing: NSLog(@"Transaction state -> Purchasing"); 
      break; 
     case SKPaymentTransactionStatePurchased: [self doRemoveAds]; 
      [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 
      NSLog(@"Transaction state -> Purchased"); 
      break; 
     case SKPaymentTransactionStateRestored: 
      NSLog(@"Transaction state -> Restored"); 
      [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 
      break; 
     case SKPaymentTransactionStateFailed: 
      if(transaction.error.code != SKErrorPaymentCancelled){ 
       NSLog(@"Transaction state -> Cancelled"); 
      } 
      [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 
      break; 
     } 
    } 
} 


- (void)doRemoveAds{ 
areAdsRemoved = YES; 
[[NSUserDefaults standardUserDefaults] setBool:areAdsRemoved forKey:@"areAdsRemoved"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 
} 

올바르게 경고보기는 방법 "paymentQueue"콘솔에서 모든 내가 얻을에 표시한다 그것은 또한

transaction state -> purchasing 

등을 기록해야 paymentQueue 방법까지, 난 이미 IAP는 아이튠즈 커넥트에서 설정해야하고, IAP에 대한 ID가 정확한지 확인하십시오. (그렇지 않으면 제품을 사용할 수 없을 것입니다.) iOS7에서 비 jailbroken 장치를 사용하고 있으며 프로비저닝 프로파일을 모두 설정했습니다 (또는 적어도 이미 앱 스토어에 앱을 제출했기 때문에 생각합니다.)) 다시, 저는 다른 질문들을 보았습니다. 그러나 그들 중 누구도 저에게 어떤 도움도 제공하지 않는 것 같습니다. 누구나 도움을 주신 모든 분들께 미리 감사드립니다.

+2

모바일 설정으로 이동하고 iTunes 연결 및 앱 스토어 섹션에서 로그 아웃 한 후 다시 시도하십시오 –

+0

구매를 위해 테스트 계정을 사용하고 있습니까 ?? – abhishekkharwar

답변

0

이 문제가 확인되지 않았습니다 : SKProduct *removeAdsProductID = (SKProduct *)kRemoveAdsProductIdentifier; - SKProduct* 대신 NSString*을 사용할 수 없습니다.

validProduct 대신 - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response을 사용해야합니다.

버튼 하나만 구입하면됩니다 (purchaseIBAction은 필요 없음).

당신은 실제 SKProduct*의 보류를 취할 필요가 : (: 응용 프로그램이 시작될 때 등) 만 가능

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{ 
    SKProduct *validProduct = nil; 
    int count = [response.products count]; 
    if(count > 0){ 
     validProduct = [response.products objectAtIndex:0]; 
     NSLog(@"Products Avalable!"); 

     // initiate the actual purchase 
     [self purchase:validProduct]; 
    } 
    else if(!validProduct){ 
     NSLog(@"No products avalable"); 
    } 
} 

-(void)purchase:(SKProduct *)product{ 
    SKPayment *payment = [SKPayment paymentWithProduct:product]; 
    [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 
    [[SKPaymentQueue defaultQueue] addPayment:payment]; 
} 

더 나은 솔루션은 이전 단계에서 유효한 제품의 목록을 검색하는 것 SKProduct * 개체를 사용할 수있는 경우 upgrade 버튼을 클릭합니다.

복원을 처리하지 않는 것과 같은 다른 문제도 있습니다 (SKPaymentTransactionStatePurchasing 경우와 비슷하게 처리해야 함). 더 나은 이해를 위해 In-App Purchase Programming Guide 이상의 모양을 제안합니다.

+0

정말 고마워요! 이 코드는 앱 구매시 발견 한 유일한 코드입니다. 고마워 – Domenico

관련 문제