亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

iOS開發內購全套圖文教程

2019-11-14 18:03:14
字體:
來源:轉載
供稿:網友

2015年最全的內購圖文教程,首先是填各種資料,最后是代碼,廢話不多說,直接上圖

======================第一部分協議===============


第一步

第二步

第三步

第四步

第五步

第六步

第七步

第八步

第九步

第十步

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


十一步

十二步

十三步

十四步

十五步

十七步

十八步

十九步

二十步
 

=============第二部分創建內購項目============


 

 

 

 

 

 

 
 

===========第三部分貼加內購項目測試賬號==========


創建測試賬號

沙盒測試員

賬號信息
 

=============第四部分主要實現代碼==========

首先導入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"http://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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色偷偷9999www| www国产精品com| 九九精品视频在线| 亚洲国产女人aaa毛片在线| 69久久夜色精品国产69乱青草| 亚洲欧美日本伦理| 国产精品一区二区三区毛片淫片| 91精品国产综合久久香蕉最新版| 久久久欧美精品| 日韩日本欧美亚洲| 91系列在线播放| 亚洲综合视频1区| 国产精品视频中文字幕91| 欧美极品少妇xxxxⅹ免费视频| 久久人人爽人人| 深夜福利国产精品| 亚洲福利在线观看| 97香蕉超级碰碰久久免费的优势| 国产精品主播视频| 欧美精品亚州精品| 久久av资源网站| 狠狠综合久久av一区二区小说| 精品免费在线观看| 色综合伊人色综合网站| 欧美久久久精品| 亚洲第一区第二区| 精品一区二区亚洲| 国产午夜精品久久久| 亚洲国产成人爱av在线播放| 日韩视频免费在线| 亚洲视频国产视频| 国产精品欧美久久久| 国产美女扒开尿口久久久| 欧美精品午夜视频| 欧美精品精品精品精品免费| 美女扒开尿口让男人操亚洲视频网站| 国产成人在线视频| 国产精品激情av在线播放| 亚洲国产欧美自拍| 久久影视三级福利片| 亚洲精品久久久久国产| 欧美日韩另类字幕中文| 久久久久久亚洲精品中文字幕| 亚洲视频国产视频| 国产精品一区二区性色av| 久久视频在线看| 亚洲乱码av中文一区二区| 国产精品国产自产拍高清av水多| 亚洲欧美色图片| 日韩高清电影免费观看完整| 亚洲深夜福利视频| 国产91露脸中文字幕在线| 久久福利视频网| 午夜精品一区二区三区在线视| www.国产一区| 国产亚洲欧美日韩精品| 中文字幕综合在线| 欧美成人午夜免费视在线看片| 欧美性猛交xxx| 国产成人精品免高潮在线观看| 黄色精品一区二区| 亚洲精品98久久久久久中文字幕| 国产不卡av在线| 日韩av电影国产| 国产成人精品a视频一区www| 欧美激情性做爰免费视频| 国产999视频| 国产免费久久av| 精品国产91久久久| 欧美另类极品videosbest最新版本| 欧美日韩亚洲视频一区| 成人精品视频99在线观看免费| 亚洲美女自拍视频| 精品视频在线播放色网色视频| 欧美激情精品久久久久| 欧美在线视频一区二区| 国产欧美精品日韩精品| 欧美在线视频免费| 欧美超级免费视 在线| 亚洲成色777777女色窝| 国产精品久久久久高潮| 日韩精品在线免费播放| 国产成人精品日本亚洲专区61| 日韩成人激情在线| 国产视频精品免费播放| 国产精品免费久久久久影院| 国语自产精品视频在线看| 国产精品一区二区三区久久| 日韩美女毛茸茸| 日韩国产精品亚洲а∨天堂免| 欧美在线亚洲一区| 欧洲美女免费图片一区| 粉嫩老牛aⅴ一区二区三区| 日韩免费在线看| 久久91亚洲人成电影网站| 日韩av一卡二卡| 国产精品情侣自拍| 国产精品日韩欧美综合| 国产精品爽黄69| 日韩在线观看免费全| 亚州欧美日韩中文视频| 最新国产成人av网站网址麻豆| 88国产精品欧美一区二区三区| 国产欧美一区二区三区视频| 国产精品一区二区在线| 久久久久国色av免费观看性色| 色一情一乱一区二区| 亚洲激情电影中文字幕| 欧美精品制服第一页| 欧美性受xxxx白人性爽| 欧美日韩高清区| 久久久久久久亚洲精品| 中文字幕日韩精品在线| 日韩av免费观影| 91精品国产自产在线老师啪| 精品久久香蕉国产线看观看亚洲| 俺去了亚洲欧美日韩| 亚洲欧洲第一视频| 国产91av在线| 18一19gay欧美视频网站| 日韩av大片在线| 欧美裸体xxxx极品少妇| 成人精品视频99在线观看免费| 久久久精品国产亚洲| 欧美激情2020午夜免费观看| 亚洲男女自偷自拍图片另类| 亚洲欧美日本另类| 日韩在线播放av| 亚洲国产精品va在线看黑人动漫| 91社影院在线观看| 亚洲精品自拍视频| 欧美精品手机在线| 国产偷亚洲偷欧美偷精品| 国产视频999| 欧美激情欧美激情| 欧美精品久久久久a| 亚洲性视频网址| 日韩精品高清在线| 国产精品第三页| 国产丝袜一区二区三区免费视频| 成人在线视频福利| 日韩人体视频一二区| 久久精品国产成人精品| 中文字幕亚洲图片| 久久久久国色av免费观看性色| 欧美精品性视频| 国产精品揄拍一区二区| 高清欧美性猛交xxxx| 欧美激情在线观看视频| 亚洲美女精品久久| 国产福利成人在线| 欧美影院久久久| 午夜精品美女自拍福到在线| 亚洲自拍偷拍福利| 国产午夜精品一区二区三区| 久久精品成人一区二区三区| 亚洲国产福利在线| 亚洲精品99久久久久中文字幕| 亚洲精品一区二区三区婷婷月| 欧美尺度大的性做爰视频| 中文字幕9999| 国产精品免费一区| 中文字幕亚洲字幕| 亚洲va国产va天堂va久久|