Implement in-App Purchases & amp; Game Ce in iOS 7 and Game Center

Source: Internet
Author: User

 

 

When I used the ios7SDK build yesterday, I found several warnings. Some of the previously written internal purchase methods were discarded under ios7. Today I changed it and sent the code.

PGStoreKitManager. h

 

 

//// PGStoreKitManager. h // OCPhysicGame /// Created by LiuYanghui on 14-1-26. // Copyright (c) 2014 LiuYanghui. all rights reserved. // # import
 
  
# Import
  
   
# Import
   
    
@ Class ViewController; @ interface PGStoreKitManager: NSObject
    
     
{UIAlertView * _ loadingAlert; BOOL _ enableGameCenter;} @ property (nonatomic, readwrite, strong) ViewController * viewController; + (PGStoreKitManager *) getInstance; // game center login/** log on to gamecenter. Set setViewController */-(void) authenticateLocalPlayer;/** upload points */-(void) reportScore: (NSString *) identifier hiScore :( int64_t) score;/** upload achievement */-(void) reportAchievementIdentifier: (NSString *) identifier percentComplete :( float) percent; /** display ultimate version */-(void) showLeaderboard: (NSString *) leaderboard;/** display achievement */-(void) showAchievements; // iap --------------------------------------/** initialize internal consumption */-(void) initStoreKit;/** Purchase Product */-(void) purchaseItem: (NSString *) identifier; @ end
    
   
  
 


 

PGStoreKitManager. m

 

 

//// PGStoreKitManager. m // OCPhysicGame /// Created by LiuYanghui on 14-1-26. // Copyright (c) 2014 LiuYanghui. all rights reserved. // # import PGStoreKitManager. h # import ViewController. h @ implementation PGStoreKitManager + (PGStoreKitManager *) getInstance {static PGStoreKitManager * mgr = nil; static dispatch_once_t onceToken; dispatch_once (& onceToken, ^ {mgr = [[self alloc] init] ;}); return mgr ;}- (I D) init {self = [super init]; if (self) {[self initData]; return self;} return nil;}-(void) initData {_ enableGameCenter = NO; _ viewController = nil;}-(void) showMessage :( NSString *) title Message :( NSString *) msg {UIAlertView * alert = [[UIAlertView alloc] initWithTitle: title message: msg delegate: self cancelButtonTitle: @ confirm otherButtonTitles: nil, nil]; [alert show];}-(void) showLoadingView :( NSString *) Title {_ loadingAlert = [[UIAlertView alloc] initWithTitle: title message: @ delegate: self cancelButtonTitle: nil otherButtonTitles: nil, nil]; [_ loadingAlert show];} -(void) removeLoadingView {[_ loadingAlert failed: 0 animated: YES];} # pragma mark-GameCenter-(void) authenticateLocalPlayer {GKLocalPlayer * localPlayer = [GKLocalPlayer localPlayer]; if ([localPlayer isAuthenticated] = NO) {localPlayer. authenticateHandler = ^ (UIViewController * viewController, NSError * error) {if (error) {_ enableGameCenter = NO;} else {_ enableGameCenter = YES; if (viewController) {[_ viewController presentViewController: viewController animated: YES completion: nil] ;}};} else {_ enableGameCenter = YES ;}}/** upload points */-(void) reportScore: (NSString *) identifier hiScore :( int64_t) score; {if (sco Re <0 |! _ EnableGameCenter) return; GKScore * scoreBoard = [[GKScore alloc] initWithLeaderboardIdentifier: identifier]; scoreBoard. value = score; [GKScore reportScores: @ [scoreBoard] withCompletionHandler: ^ (NSError * error) {if (error) {// handle error}];} /** upload achievement */-(void) reportAchievementIdentifier: (NSString *) identifier percentComplete :( float) percent {if (percent <0 |! _ EnableGameCenter) return; GKAchievement * achievement = [[GKAchievement alloc] initWithIdentifier: identifier]; if (achievement) {achievement. percentComplete = percent; [GKAchievement reportAchievements: @ [achievement] withCompletionHandler: ^ (NSError * error) {if (error) {// handle error}];} /** display ultimate version */-(void) showLeaderboard: (NSString *) leaderboard {if (! _ EnableGameCenter) return; GKGameCenterViewController * gameCenterViewController = [[GKGameCenterViewController alloc] init]; gameCenterViewController. viewState = GKGameCenterViewControllerStateLeaderboards; gameCenterViewController. gameCenterDelegate = self; [_ viewController presentViewController: gameCenterViewController animated: YES completion: nil];}/** display achievement */-(void) showAchievements {if (! _ EnableGameCenter) return; GKGameCenterViewController * gameCenterViewController = [[GKGameCenterViewController alloc] init]; gameCenterViewController. viewState = GKGameCenterViewControllerStateAchievements; gameCenterViewController. gameCenterDelegate = self; [_ viewController presentViewController: gameCenterViewController animated: YES completion: nil] ;}# pragma mark gameCenterViewController Close callback-(v Oid) gameCenterViewControllerDidFinish :( GKGameCenterViewController *) gameCenterViewController {[_ viewController dismissViewControllerAnimated: YES completion: nil];} // region # pragma mark-IAP-(BOOL) canProcessPayments {if ([SKPaymentQueue canMakePayments]) {return YES;} else {return NO ;}/ ** initialize in-class consumption */-(void) initStoreKit {[[SKPaymentQueue default Queue] addTransactionObserver: self];}/** Purchase Product */-(void) purchaseItem: (NSString *) identifier {[self showLoadingView: @ Access Store...]; if (! [Self canProcessPayments]) {NSLog (@ 1. failed --> SKPaymentQueue canMakePayments NO); [self removeLoadingView]; return;} NSLog (@ 1. success --> Request Product information... % @, identifier); // use the requested product information to purchase SKProductsRequest * request = [[SKProductsRequest alloc] initWithProductIdentifiers: [NSSet setWithObject: identifier]; request. delegate = self; [request start];} // callback of SKProductsRequest-(void) productsRequest :( SKProductsRequest *) r Equest didReceiveResponse :( SKProductsResponse *) response {NSArray * myProduct = response. products; if (myProduct. count = 0) {NSLog (@ 2. failed --> unable to obtain product information. Failed to purchase. InvalidProductIdentifiers =%@, response. invalidProductIdentifiers); [self removeLoadingView]; return;} NSLog (@ 2. success --> the product information is obtained successfully. you are purchasing the product ...); SKPayment * payment = [SKPayment paymentWithProduct: myProduct [0]; [[SKPaymentQueue defaultQueue] addPayment: payment];} // callback of SKPayment-(void) paymentQueue :( SKPaymentQueue *) queue updatedTransactions :( NSArray *) transactions {NSLog (@ 3. success --> receive Apple purchase data, processing ...); for (SKPaymentTransaction * transaction in transactions) {switch (transaction. transactionState) {case SKPaymentTransactionStatePurchased: [self completeTransaction: transaction]; break; case when: [self failedTransaction: transaction]; break; case when: [self restoreTransaction: transaction; default: break ;}}// end transaction-(void) completeTransaction: (SKPaymentTransaction *) transaction {NSLog (@ 4. success --> end transaction SKPaymentTransactionStatePurchased); [self removeLoadingView]; // record the transaction and provide the product. The two methods must be processed: [self recordTransaction: transaction]; [self provideContent: transaction. payment. productIdentifier]; // remove transaction from the payment queue. [[SKPaymentQueue defaultQueue] finishTransaction: transaction];} // reset transaction-(void) restoreTransaction: (SKPaymentTransaction *) transaction {NSLog (@ 4. success --> Reset transaction SKPaymentTransactionStateRestored); [self recordTransaction: transaction]; [self provideContent: transaction. originalTransaction. payment. fail]; [[SKPaymentQueue defaultQueue] finishTransaction: transaction];} // transaction failed-(void) failedTransaction: (SKPaymentTransaction *) transaction {[self removeLoadingView]; NSLog (@ 4. success --> Transaction Failed SKPaymentTransactionStateRestored error. code: % d, (int) transaction. error. code); [[SKPaymentQueue defaultQueue] finishTransaction: transaction];} // transaction record-(void) recordTransaction: (SKPaymentTransaction *) transacation {NSLog (@ 4. success --> transaction record, where records can be stored);} // provides the product-(void) provideContent: (NSString *) identifier {NSLog (@ 4. success --> transaction successful. Please provide product identifier =%@, identifier); [self removeLoadingView]; [self showMessage: @ Success Message: @ You have successfully chased.];} @ end

The comment has been clearly written, and you can leave a message if you are not clear.

 

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.