2014-11-01 3 views
0

"In App purchase"를 사용하여 iAd를 제거하는 데 도움이 필요합니다. "In App Purchase"에 대한 코드 작업 중입니다. 하지만 (IOS) SpriteKit Game으로 구현하는 방법을 모른다. View Controller에서 구현할 때 훌륭하게 작동하지만 MyScene.m에서 작동해야합니다. "-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event"메서드의 "구매"알림 창에서 버튼을 누르면 플레이어가 구매하게합니다.SpriteKit의 앱 구매 통합

This code is working in Storyboard and has IBbutton but it is not seen in SKScene. 
I am beginner developer and know how SKScene and MyScene but thats now enough. 
If you want to look at code let me know thanks 




Here is ny Code: 
in View Controller.h I declare 


    @interface ViewController : UIViewController <ADBannerViewDelegate> 

{ 
    IBOutlet ADBannerView *iadBanner; 
// 

} 
@property (nonatomic,strong) NSArray*products; 

@property(nonatomic,strong)NSUserDefaults*defaults; 


@end 


In ViewController.m 

    #import "MyNewlyCreatedScene.h" 

#import "ViewController.h" 

#import <StoreKit/StoreKit.h> 

@interface ViewController() 

@end 

@implementation ViewController 

@synthesize /*idBanner*/ products,defaults; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [[SKPaymentQueue defaultQueue]addTransactionObserver:(id)self]; 

    defaults =[NSUserDefaults standardUserDefaults]; 

    BOOL isPro=[defaults boolForKey:@"isPro"]; 



    if (!isPro) { 
     //user code here 
     [self fetchProducts]; 

} else { 
     iadBanner.alpha=0.0; 

} 

} 
-(void)bannerViewDidLoadAd:(ADBannerView *)banner{ 

    defaults =[NSUserDefaults standardUserDefaults]; 

    BOOL isPro=[defaults boolForKey:@"isPro"]; 

    if (!isPro) { 
     //user code here 

[UIView beginAnimations:nil context:NULL]; 

    [UIView setAnimationDuration:1]; 

      [banner setAlpha:1]; 

    [UIView commitAnimations]; 


    } 

    else 

    { 

     iadBanner.alpha=0.0; 

    } 

} 

-(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error{ 


    [UIView beginAnimations:nil context:NULL]; 

    [UIView setAnimationDuration:1]; 

    [banner setAlpha:0]; 

    [UIView commitAnimations]; 
} 

-(void)fetchProducts{ 
    SKProductsRequest*request = [[SKProductsRequest alloc]initWithProductIdentifiers:[NSSet 
setWithArray:@[@"testingAppPurchaseID "]]]; 

    request.delegate = (id)self; 

    [request start]; 
} 

-(void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{ 

    products = response.products; 

    NSLog(@"Product was purchased"); 
} 
-(void)request:(SKRequest*)request didFailWithError:(NSError *)error{ 

    NSLog(@"%@",error); 

} 

-(void)buy:(SKProduct*)product{ 

    SKPayment *payment = [SKPayment paymentWithProduct:product]; 

    [[SKPaymentQueue defaultQueue]addPayment:payment]; 
} 
-(IBAction)removeAdvertisment:(id)sender 
{ 
    SKProduct *prod = [products objectAtIndex:0]; 

    [self buy:prod]; 
} 
-(void)paymentQueue:(SKPaymentQueue*)queue updatedTransactions:(NSArray *)transactions{ 

    for (SKPaymentTransaction *tx in transactions) { 

     switch (tx.transactionState) { 

      case SKPaymentTransactionStatePurchased: 
       [[SKPaymentQueue defaultQueue]finishTransaction:tx]; 
       //_____________________ 
       iadBanner.alpha=0.0; 
       //______________________ 

      [defaults setBool:YES forKey:@"isPro"]; 
       break; 

      case SKPaymentTransactionStateFailed: 

       [[SKPaymentQueue defaultQueue]finishTransaction:tx]; 

       NSLog(@"Error:%@",tx.error); 

         break; 



      case SKPaymentTransactionStateRestored: 
       [[SKPaymentQueue defaultQueue]finishTransaction:tx]; 

       break; 


      default: 
       break; 
     } 
    } 

} 
- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning];`` 
    } 

@end 


In Storyboard I add iAdbannerView and a button and connect button to action, and set iAdbannerView to delegate 


Give me some hints how to solve this problem. 

많은 개발자가 앱 스토어에서 게임을하는 이유가 무엇인지는 MyScene에 IN 앱 구매가 구현되어 있음을 의미하므로 도움을 받으십시오.

+0

"코드를보고 싶다면 알려주세요"... 아니요, ** ** 코드를 살펴 봅니다. 코드에 문제가있는 경우 코드를 게시해야하며, 개선 방법을 제안하고 문제점을 지적 할 수있는 다른 방법은 무엇입니까? – LearnCocos2D

답변

0

코드가 괜찮습니다. 너는 그저 달릴 필요가있다.

구매를 유발하는 것은 그렇게 할만한가? 당신과 같이 블록에 매립하여 SKAction에 objC 메서드 호출을 연결할 수 있습니다 :

[SKAction runBlock:^ { 
      [self removeAdvertisment:self]; 
     }] 

다음 실행할 일부 노드 또는 다른 (아마도 textNode 또는 spriteNode 등 버튼으로 포즈를) 지시 할 수있다 이 작업

난 당신에 대해 생각 할 수 있습니다 관련되지 않은 두 가지를 언급 ​​할 것이다 ...

  1. 하나의 전체 두 번째는보기에서 빈 adBanner를 제거하는 것은 매우 느린 애니메이션이다. 내가 너라면 적어도 애니메이션 시간을 절반으로 줄이겠다.

  2. 광고가 제거 된 것으로 보이는 광고는 adBanner 인스턴스를 만들기 전에 기본값을 확인하고 사용자가 이미 결제 한 경우 추가하지 않아야합니다. 사용자가 구매할 때 배너를 완전히 제거하고 없애 버리면 숨겨진 배너는 RAM을 묶어서 잠재적으로 수익에 악영향을 미치지 않습니다.

+0

Jef에게 답장을 보내 주셔서 감사합니다. 매우 감사 드리지 만 질문에 답변을하지 않으므로 시간을 줄이면 좋습니다. 나는 그 방법을 구현하는 데 너무 바빴다. 나는 그것을 할 수 있음을 깨달았다. 나는 코드가 어떻게 동작하는지 생각했다. 프로그래머는 실제로 경험하지 않았다. 이에 대한 해결책이 있어야합니다. 내가 xib 같은 도우미 뷰 컨트롤러를 호출 할 수 있고 모든 코드가 xib oranother 뷰 컨트롤러에있을 것이고 뷰 컨트롤러에 도착하면 구매 버튼을 누르지 않을 수 있습니까? –