paymentcontroller.h檔案:
/*
* paymentcontroller.h
** created by chiu on 15-06-16.
*/#import #import @inte***ce paymentcontroller : nsobject@property nsstring *productid;
- (void)initproductid:(nsstring*) productidstr;
- (void)purchasefunc;
@end
paymentcontroller.mm檔案:
/*
author: chiu
project: bygame
date: 2016/08/22
*/#import "paymentcontroller.h"
#import "cchelp.h"
@inte***ce paymentcontroller ()
@end
@implementation paymentcontroller
static bool hasaddobersver = no;
- (id)initwithpayconstructor:(nsstring *) productidstr
}return self;
}- (void)initproductid:(nsstring*) productidstr
- (void)purchasefuncelse
}//請求商品
- (void)requestproductdata:(nsstring *)type
//收到產品返回資訊
- (void)productsrequest:(skproductsrequest *)request didreceiveresponse:(skproductsresponse *)response
nslog(@"productid:%@", response.invalidproductidentifiers);
nslog(@"產品付費數量:%d",[product count]);
skproduct *payinfoporduct = nil;
for (skproduct *pro in product)
}if(!payinfoporduct)
nslog(@"傳送購買請求");
if (floor(nsfoundationversionnumber) < nsfoundationversionnumber_ios_5_0)
else
[request autorelease];
}- (void)requestproupgradeproductdata
//請求失敗
- (void)request:(skrequest *)request didfailwitherror:(nserror *)error
- (void)requestdidfinish:(skrequest *)request
-(void) purchasedtransaction: (skpaymenttransaction *)transaction
//監聽購買結果
- (void)paymentqueue:(skpaymentqueue *)queue updatedtransactions:(nsarray *)transaction
break;
case skpaymenttransactionstatepurchasing:
break;
case skpaymenttransactionstaterestored:
break;
case skpaymenttransactionstatefailed:
break;
default:
break;}}
}//交易結束
- (void)completetransaction:(skpaymenttransaction *)transaction
- (void) failedtransaction: (skpaymenttransaction *)transaction
switch (transaction.error.code)
[[skpaymentqueue defaultqueue] finishtransaction: transaction];
}- (void) restoretransaction: (skpaymenttransaction *)transaction
#pragma mark connection delegate
- (void)connection:(nsurlconnection *)connection didreceivedata:(nsdata *)data
- (void)connectiondidfinishloading:(nsurlconnection *)connection
- (void)connection:(nsurlconnection *)connection didreceiveresponse:(nsurlresponse *)response
}- (void)connection:(nsurlconnection *)connection didfailwitherror:(nserror *)error
- (void)dealloc
@end
呼叫例子:
/* ios iap entrance */
int payprice = pnotify->getsubtype();
std::string productidstr;
switch (payprice)
nslog(@"----------當前商品id: %s", productidstr.c_str());
nsstring* ocproductidstr = [nsstring stringwithformat:@"%s",
productidstr.c_str()];
paymentcontroller* ppaycontroller = [[paymentcontroller alloc] initwithpayconstructor:ocproductidstr];
[ppaycontroller purchasefunc];
ps:內建模式並沒有做訂單憑證後台驗證,整個流程看起來都非常簡單,所以是很不安全的方式,容易被破解內購產品刷單,下篇blog處理伺服器模式
實現模式之一種程式設計理論
這篇文章講述的是,我們在程式設計的過程中以一種什麼樣的價值觀作為導向,遵守一些什麼樣的規則。就能編寫出比較優秀的 先說一下三個概念 模式 也就是我們通常所說的解決方案,比如要寫乙個迴圈遍歷有很多實現方案。模式表達的是我們要做什麼和怎麼做出來。價值觀 也就是我們程式設計應該實現的目的,統一支配我們程式...
設計模式之一(Iterator模式)
表 1 1 類和介面的一覽表 名字說明 aggregate 表示集合的介面 iterator 遍歷集合的介面 book 表示書的類 bookshelf 表示書架的類 bookshelfiterator 遍歷書架的類 main 測試程式行為的類 aggregate介面 public inte ce a...
通過跳線方式實現STM32 的IAP模式
iap,即在應用程式設計。很多微控制器都支援這個功能,stm32也不例外。在之前的flash模擬eeprom實驗裡面,我們學習了stm32的flash自程式設計,本章我們將結合flash自程式設計的知識,通過stm32的串列埠實現乙個簡單的iap功能。48.1 iap簡介 第乙個專案程式不執行正常的...