EDM营销技巧

iOS开发内购全套图文教程

浏览: | 标签:ios记费 ios内购

 2015年最全的内购图文教程,首先是填各种资料,最后是代码,废话不多说,直接上图

如对你有帮助,请不要吝惜打赏和喜欢,谢谢!

======================第一部分协议===============


第一步.png

第二步.jpg

第三步.jpg

第四步.png

第五步.png

第六步.png

第七步.jpg

第八步.jpg

第九步.jpg

第十步.png

CNAPS CODE 查询地址
https://e.czbank.com/CORPORBANK/query_unionBank_index.jsp


十一步.jpg

十二步.jpg

十三步.png

十四步.png

十五步.jpg

十七步.jpg

十八步.jpg

十九步.png

2016/11/18号更新


十九步(1).png

十九步(2).png

没显示的都是可以不填的,主要是打钩 title 和最后面的Self


二十步.png

=============第二部分创建内购项目============


1.png

2.png

3.png

4.png

5.png

6.png

7.png

===========第三部分贴加内购项目测试账号==========


创建测试账号.png

沙盒测试员.png

账号信息.png

=============第四部分主要实现代码==========

首先导入StoreKit.framework

.h文件

#import <StoreKit/StoreKit.h>  enum{ IAP0p20=20, IAP1p100, IAP4p600, IAP9p1000, IAP24p6000, }buyCoinsTag;  //代理 @interface RechargeVC : UIViewController <SKPaymentTransactionObserver,SKProductsRequestDelegate >  { int buyType; }  - (void) requestProUpgradeProductData;  -(void)RequestProductData;  -(void)buy:(int)type;  - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions;  -(void) PurchasedTransaction: (SKPaymentTransaction *)transaction;  - (void) completeTransaction: (SKPaymentTransaction *)transaction;  - (void) failedTransaction: (SKPaymentTransaction *)transaction;  -(void) paymentQueueRestoreCompletedTransactionsFinished: (SKPaymentTransaction *)transaction;  -(void) paymentQueue:(SKPaymentQueue *) paymentQueue restoreCompletedTransactionsFailedWithError:(NSError *)error;  - (void) restoreTransaction: (SKPaymentTransaction *)transaction;  -(void)provideContent:(NSString *)product;  -(void)recordTransaction:(NSString *)product;  @end

.m文件

#import "RechargeVC.h"  //在内购项目中创的商品单号 #define ProductID_IAP0p20 @"Nada.JPYF01"//20 #define ProductID_IAP1p100 @"Nada.JPYF02" //100 #define ProductID_IAP4p600 @"Nada.JPYF03" //600 #define ProductID_IAP9p1000 @"Nada.JPYF04" //1000 #define ProductID_IAP24p6000 @"Nada.JPYF05" //6000  @interface RechargeVC ()  @end  @implementation RechargeVC  - (void)viewDidLoad {      [super viewDidLoad];      [[SKPaymentQueue defaultQueue] addTransactionObserver:self];     [self buy:IAP0p20];  }  -(void)buy:(int)type {     buyType = type;     if ([SKPaymentQueue canMakePayments]) {     [self RequestProductData];     NSLog(@"允许程序内付费购买"); } else {     NSLog(@"不允许程序内付费购买");     UIAlertView *alerView =  [[UIAlertView alloc] initWithTitle:@"提示"     message:@"您的手机没有打开程序内付费购买"     delegate:nil cancelButtonTitle:NSLocalizedString(@"关闭",nil) otherButtonTitles:nil];      [alerView show];      } }  -(void)RequestProductData {     NSLog(@"---------请求对应的产品信息------------");     NSArray *product = nil;     switch (buyType) {         case IAP0p20:         product=[[NSArray alloc] initWithObjects:ProductID_IAP0p20,nil];         break;         case IAP1p100:         product=[[NSArray alloc] initWithObjects:ProductID_IAP1p100,nil];         break;         case IAP4p600:         product=[[NSArray alloc] initWithObjects:ProductID_IAP4p600,nil];         break;         case IAP9p1000:         product=[[NSArray alloc] initWithObjects:ProductID_IAP9p1000,nil];         break;         case IAP24p6000:         product=[[NSArray alloc] initWithObjects:ProductID_IAP24p6000,nil];         break;          default:         break; }     NSSet *nsset = [NSSet setWithArray:product];     SKProductsRequest *request=[[SKProductsRequest alloc] initWithProductIdentifiers: nsset];     request.delegate=self;     [request start];  }  //<SKProductsRequestDelegate> 请求协议 //收到的产品信息 - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{      NSLog(@"-----------收到产品反馈信息--------------");     NSArray *myProduct = response.products;     NSLog(@"产品Product ID:%@",response.invalidProductIdentifiers);     NSLog(@"产品付费数量: %d", (int)[myProduct count]);     // populate UI     for(SKProduct *product in myProduct){     NSLog(@"product info");     NSLog(@"SKProduct 描述信息%@", [product description]);     NSLog(@"产品标题 %@" , product.localizedTitle);     NSLog(@"产品描述信息: %@" , product.localizedDescription);     NSLog(@"价格: %@" , product.price);     NSLog(@"Product id: %@" , product.productIdentifier); }     SKPayment *payment = nil;     switch (buyType) {         case IAP0p20:         payment  = [SKPayment paymentWithProductIdentifier:ProductID_IAP0p20];    //支付25         break;         case IAP1p100:         payment  = [SKPayment paymentWithProductIdentifier:ProductID_IAP1p100];    //支付108         break;         case IAP4p600:         payment  = [SKPayment paymentWithProductIdentifier:ProductID_IAP4p600];    //支付618         break;         case IAP9p1000:         payment  = [SKPayment paymentWithProductIdentifier:ProductID_IAP9p1000];    //支付1048         break;         case IAP24p6000:         payment  = [SKPayment paymentWithProductIdentifier:ProductID_IAP24p6000];    //支付5898         break;         default:         break; }     NSLog(@"---------发送购买请求------------");     [[SKPaymentQueue defaultQueue] addPayment:payment];  } - (void)requestProUpgradeProductData {     NSLog(@"------请求升级数据---------");     NSSet *productIdentifiers = [NSSet setWithObject:@"com.productid"];     SKProductsRequest* productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];     productsRequest.delegate = self;     [productsRequest start];  } //弹出错误信息 - (void)request:(SKRequest *)request didFailWithError:(NSError *)error{     NSLog(@"-------弹出错误信息----------");     UIAlertView *alerView =  [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Alert",NULL) message:[error localizedDescription]     delegate:nil cancelButtonTitle:NSLocalizedString(@"Close",nil) otherButtonTitles:nil];     [alerView show];  }  -(void) requestDidFinish:(SKRequest *)request {     NSLog(@"----------反馈信息结束--------------");  }  -(void) PurchasedTransaction: (SKPaymentTransaction *)transaction{     NSLog(@"-----PurchasedTransaction----");     NSArray *transactions =[[NSArray alloc] initWithObjects:transaction, nil];     [self paymentQueue:[SKPaymentQueue defaultQueue] updatedTransactions:transactions]; }  //<SKPaymentTransactionObserver> 千万不要忘记绑定,代码如下: //----监听购买结果 //[[SKPaymentQueue defaultQueue] addTransactionObserver:self];  - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions//交易结果 {     NSLog(@"-----paymentQueue--------");     for (SKPaymentTransaction *transaction in transactions)     {         switch (transaction.transactionState)         {             case SKPaymentTransactionStatePurchased:{//交易完成             [self completeTransaction:transaction];             NSLog(@"-----交易完成 --------");              UIAlertView *alerView =  [[UIAlertView alloc] initWithTitle:@""             message:@"购买成功"             delegate:nil cancelButtonTitle:NSLocalizedString(@"关闭",nil) otherButtonTitles:nil];              [alerView show];          } break;         case SKPaymentTransactionStateFailed://交易失败             { [self failedTransaction:transaction];             NSLog(@"-----交易失败 --------");             UIAlertView *alerView2 =  [[UIAlertView alloc] initWithTitle:@"提示"             message:@"购买失败,请重新尝试购买"             delegate:nil cancelButtonTitle:NSLocalizedString(@"关闭",nil) otherButtonTitles:nil];              [alerView2 show];          }break;         case SKPaymentTransactionStateRestored://已经购买过该商品             [self restoreTransaction:transaction];             NSLog(@"-----已经购买过该商品 --------");             case SKPaymentTransactionStatePurchasing:      //商品添加进列表             NSLog(@"-----商品添加进列表 --------");             break;             default:             break;         }     } } - (void) completeTransaction: (SKPaymentTransaction *)transaction  {     NSLog(@"-----completeTransaction--------");     // Your application should implement these two methods.     NSString *product = transaction.payment.productIdentifier;     if ([product length] > 0) {      NSArray *tt = [product componentsSeparatedByString:@"."];     NSString *bookid = [tt lastObject];     if ([bookid length] > 0) {     [self recordTransaction:bookid];     [self provideContent:bookid]; } }      // Remove the transaction from the payment queue.      [[SKPaymentQueue defaultQueue] finishTransaction: transaction];  }  //记录交易 -(void)recordTransaction:(NSString *)product{     NSLog(@"-----记录交易--------"); }  //处理下载内容 -(void)provideContent:(NSString *)product{     NSLog(@"-----下载--------"); }  - (void) failedTransaction: (SKPaymentTransaction *)transaction{     NSLog(@"失败");     if (transaction.error.code != SKErrorPaymentCancelled)     {      }     [[SKPaymentQueue defaultQueue] finishTransaction: transaction];  } -(void) paymentQueueRestoreCompletedTransactionsFinished: (SKPaymentTransaction *)transaction{  }  - (void) restoreTransaction: (SKPaymentTransaction *)transaction {     NSLog(@" 交易恢复处理");  }  -(void) paymentQueue:(SKPaymentQueue *) paymentQueue restoreCompletedTransactionsFailedWithError:(NSError *)error{     NSLog(@"-------paymentQueue----"); }  #pragma mark connection delegate - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {     NSLog(@"%@",  [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]); } - (void)connectionDidFinishLoading:(NSURLConnection *)connection{  }  - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{     switch([(NSHTTPURLResponse *)response statusCode]) {         case 200:         case 206:         break;         case 304:         break;         case 400:         break;         case 404:         break;         case 416:         break;         case 403:         break;         case 401:         case 500:         break;         default:         break;     } }  - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {     NSLog(@"test"); }  -(void)dealloc {     [[SKPaymentQueue defaultQueue] removeTransactionObserver:self];//解除监听  }  @end

2016/11/22更新

内购项目不再是单独提交审核了,只要app提交审核内购项目自然跟着改变状态,不消耗物品请不要选择 托管那一项,不然会出现问题

权益声明:本文由bdluntan.com编辑发表,转载此文章须经作者同意,并请附上出处(网络营销信息港bdluntan.com)及本页链接。部分资源来源于网络或网友投稿,若有版权争议,请邮件至kf@113126.com 处理,我们将在查阅邮件后处理。

分享此文章:
  • iOS开发内购全套图文教程
  • iOS App提交指南(二)-协议
  • iOS之清除缓存-ios开发
  • iOS应用内付费(IAP)提交审
  • 应用内购(In-App Purchase)常
  • 炸裂!苹果群发警告邮件,这3类
  • iOS之计算上次日期距离现在
  • 苹果所有常用证书,appID,Pro
  • iOS之苹果调整 App Store
  • iOS证书说明和发布内购流程
  • iOS中 Apple开发相关邮箱汇
  • iOS开发笔记-图标和图片大小