包括 purchase 和 iap兵怯, gamecenter题涨,等之后用到再補充
https://docs.godotengine.org/zh_CN/latest/tutorials/platform/services_for_ios.html
Store Kit
一些支付代碼參考
https://gist.github.com/FEDE0D/8595c1cf5e0a3263fdbc
對應源碼:platform/iphone/in_app_store.mm
https://github.com/godotengine/godot/blob/master/platform/iphone/in_app_store.mm
godot xcode部分源碼
header定義
//獲取產(chǎn)品信息
Error request_product_info(Variant p_params);
//恢復購買
Error restore_purchases();
//購買
Error purchase(Variant p_params);
//正在處理的事件數(shù)
int get_pending_event_count();
//拋出最舊(最前)一個事件,并返回此事件
Variant pop_pending_event();
//完成交易
void finish_transaction(String product_id);
//設置是否自動完成交易
void set_auto_finish_transaction(bool b);
//(內(nèi))發(fā)送事件
void _post_event(Variant p_event);
//(內(nèi))記錄事件
void _record_purchase(String product_id);
//(內(nèi))單例
static InAppStore *get_singleton();
主文件下定義了鏈接:
void InAppStore::_bind_methods() {
ClassDB::bind_method(D_METHOD("request_product_info"), &InAppStore::request_product_info);
ClassDB::bind_method(D_METHOD("restore_purchases"), &InAppStore::restore_purchases);
ClassDB::bind_method(D_METHOD("purchase"), &InAppStore::purchase);
ClassDB::bind_method(D_METHOD("get_pending_event_count"), &InAppStore::get_pending_event_count);
ClassDB::bind_method(D_METHOD("pop_pending_event"), &InAppStore::pop_pending_event);
ClassDB::bind_method(D_METHOD("finish_transaction"), &InAppStore::finish_transaction);
ClassDB::bind_method(D_METHOD("set_auto_finish_transaction"), &InAppStore::set_auto_finish_transaction);
};
我想或渤,這些經(jīng)過綁定的函數(shù),應該才是可以被調(diào)用的
先看purchase函數(shù):
參數(shù)必須符合:包含product_id
關鍵字
發(fā)送支付申請
NSString *pid = [[[NSString alloc] initWithUTF8String:String(params["product_id"]).utf8().get_data()] autorelease];
SKPayment *payment = [SKPayment paymentWithProductIdentifier:pid];
SKPaymentQueue *defq = [SKPaymentQueue defaultQueue];
[defq addPayment:payment];
printf("purchase sent!\n");
iap 使用方法
獲得單例
InAppStore = Engine.get_singleton("InAppStore")
激活購買 purchase必須包含關鍵字product_id
var result = InAppStore.purchase( { "product_id": "getpro" } )
if result == OK:
print("next action")
restore 恢復購買功能,無參數(shù)
var result = InAppStore.restore_purchases()
if result== OK:
當執(zhí)行purchase和restore后result狀態(tài)為ok(無異常)時棚菊,使用timer來反復偵聽
func check_events_real():
if !InAppStore:
return
while InAppStore.get_pending_event_count() > 0:
var event = InAppStore.pop_pending_event()
if event.type == "purchase":
if event.result == "ok":
show_success(event.product_id)
else:
show_error()
var event = InAppStore.pop_pending_event() 中event對應參數(shù)
參數(shù) | 數(shù)組 | 意義 |
---|---|---|
titles | 是 | 標題 |
descriptions | 是 | 描述 |
prices | 是 | 價格 |
ids | 是 | id組 |
localized_prices | 是 | 本地價格 |
currency_codes | 是 | 貨幣代碼 |
type | 否 | 類型,purchase / restore |
result | 否 | 字符串:ok叔汁,error |
product_id | 否 | 當前id號 |
transaction_id | 否 | 當前交易id |
GameCenter
略
https://docs.godotengine.org/zh_CN/latest/tutorials/platform/services_for_ios.html
可以按照iap鏈接手法來處理
godot和ios之間通信不是對等的统求,ios無法請求godot方的函數(shù),所以無論是發(fā)送還是獲取信息据块,都是要godot來主動觸發(fā)的码邻。所以獲取結果的時候就出現(xiàn)了需要循環(huán)去檢索的方法(也是沒辦法)